Différence entre un socket et un port

121

Quelqu'un pourrait-il s'il vous plaît expliquer très clairement la différence entre un port et une prise. Je sais qu'un port sert de porte d'accès au réseau pour un processus d'application et que le processus d'application utilise une connexion socket au numéro de port donné pour gérer la communication réseau, mais lorsque plusieurs processus écoutent sur un seul numéro de port, je constate il est difficile de comprendre la différence entre le socket et le port et comment ils s’assemblent.

Cobie
la source
9
Le port est une adresse physique, alors que socket est un objet.
SuperM
14
Si un paquet frappe une poche sur une prise sur un port ...
user16764

Réponses:

116

S est un programme serveur: disons que c'est un serveur HTTP, il utilisera donc le numéro de port bien connu pour HTTP , qui est 80. Je l'exécute sur un hôte avec une adresse IP 10.0.0.4, de sorte qu'il écoute les connexions 10.0.0.4:80(car c'est là où tout le monde s'attendra à le trouver).

À l'intérieur de S , je vais créer un socket et le lier à cette adresse: le système d'exploitation sait maintenant que les connexions entrantes 10.0.0.4:80doivent être routées vers mon processus S via ce socket particulier.

  • la sortie netstat une fois que le socket est lié:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB l'adresse locale est tout en zéros parce que S ne se soucie pas de la façon dont ses clients l'atteignent

Une fois que S a lié ce socket, il accepte les connexions - chaque fois qu'un nouveau client se connecte, il acceptretourne un nouveau socket, qui est spécifique à ce client.

  • netstat en sortie une fois la connexion acceptée:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80représente la fin de la connexion de S et est associé au socket renvoyé paraccept
    • 10.0.0.5:55715est la fin de la connexion du client et est associé au socket que le client a transmis pour se connecter . Le port du client n'est utilisé que pour acheminer les paquets de cette connexion TCP vers le processus approprié: il est attribué de manière aléatoire par le noyau du client à partir de la plage de ports éphémère.

Maintenant, S peut continuer à accepter plus de connexions client. Chacun recevra son propre socket, chaque socket sera associé à une connexion TCP unique et chaque connexion aura une adresse distante unique. S suivra l’état du client (s’il en existe) en l’associant au socket.

Alors, à peu près:

  • l'adresse IP sert au routage entre les hôtes du réseau
  • le port sert au routage vers le bon socket sur l'hôte
    • J'ai presque dit processus correct , mais il est en fait possible d'avoir plusieurs processus (généralement enfants) acceptant tous sur le même socket ...
    • toutefois, chaque fois qu'un des acceptappels simultanés est renvoyé et ne le fait que dans un seul processus, le socket de chaque connexion entrante est unique pour une instance du serveur.
  • le socket est l'objet qu'un processus utilise pour parler au système d'exploitation d'une connexion particulière, un peu comme un descripteur de fichier
    • Comme mentionné dans les commentaires, il existe de nombreuses autres utilisations des sockets qui n'utilisent pas de ports du tout: socketpair, par exemple, crée une paire de sockets reliés entre eux qui n'ont aucun schéma d'adressage. La seule façon d'utiliser ce canal est d'être le processus qui a appelé socketpair, étant un enfant de ce processus et en héritant, ou étant explicitement passé à l'un des sockets de ce processus
Inutile
la source
1
@Useless Il est à noter que les sockets n'ont pas besoin d'être IP, comme l'indique la réponse. Ce n'est pas vraiment pertinent pour le PO mais une explication des familles de sockets aiderait à compléter cette réponse.
Hafichuk
Point positif: je commençais déjà à écrire sur les serveurs multiprocessus. N'hésitez pas à le modifier, et si vous ne le faites pas, j'y reviendrai à un moment donné ...
Inutile
11
ce n'est pas inutile du tout
l -'''''''''--------- '' '' '' '' '' ''
J'essaie de comprendre la prise dans l'électronique, un serveur lier une prise à un numéro de port est comme mettre une prise sur un mur en attendant que des dispositifs électroniques se branchent pour charger la batterie. Mais quand accepté, un nouveau socket est retourné? Pourquoi? Une nouvelle prise est-elle placée au mur? S'il vous plaît, aidez-moi à en comprendre le sens par une analogie.
Aaron Shen
3
Le problème ici est que votre analogie est fausse. Oubliez ce que signifie un socket dans le monde physique - ce n'est pas une métaphore pour autre chose, mais un terme technique pour désigner un concept de logiciel technique spécifique. Il n’est même pas fortement lié aux ports réseau physiques ou aux sockets - vous devez simplement le comprendre, dans ce domaine, comme un concept à sa manière.
Inutile
49

Pensez à votre machine comme à un immeuble d'habitation:

  • Un port est un numéro d'appartement.

  • Une prise est la porte d'un appartement.

  • Une adresse IP est l'adresse du bâtiment.

Caleb
la source
3
J'aime cette analogie, bien que maintenant je pense être dans cet appartement en regardant un couloir sans fin avec beaucoup de portes. Je ne peux pas sortir. Je ne peux pas sortir! :)
Daniel Hollinrake
1
@Caleb A socket is the door of an apartment.Mais ne pourrait-il pas y avoir de nombreuses sockets ouvertes sur un port?
Suhail Gupta,
3
@suhail Parfois, un appartement a plus d'une porte. Ils ont tous le même numéro d'appartement, mais ce sont des portes différentes.
Caleb
45

Un port fait partie de l'adresse dans les protocoles TCP et UDP. Il est utilisé pour aider le système d'exploitation à identifier quelle application doit récupérer les données reçues. Un système d'exploitation doit prendre en charge les ports pour prendre en charge TCP et UDP, car les ports font partie intégrante de TCP et UDP.

Un socket fait partie de l'interface que le système d'exploitation présente aux applications pour leur permettre d'envoyer et de recevoir des données réseau. La plupart des implémentations de socket prennent en charge de nombreux protocoles autres que TCP et UDP, dont certains n'ont pas de concept de port. Un système d'exploitation n'a pas besoin de supporter les sockets pour supporter TCP ou UDP; il pourrait fournir une interface différente pour les applications à utiliser. Un socket est simplement un moyen d’envoyer et de recevoir des données sur un port spécifique.

Dirk Holsopple
la source
Un socket est essentiellement un tuple composé de: IP source: Port-Dest IP: Port.
Tony le lion
tu veux dire que ce port n'existe que dans les protocoles TCP et UDP ??? Qu'en est-il de http et d'autres protocoles?
Hosein Aqajani
HTTP est un protocole de couche d'application qui s'exécute sur les protocoles de couche de transport tels que TCP ou UDP. Il n'a pas son propre concept de ports, il les hérite du protocole de la couche de transport sous-jacent.
Dirk Holsopple
8

Un ordinateur a une adresse IP qui l'identifie en tant qu'entité distincte du réseau. Nous ajoutons un nombre supplémentaire à cela pour nous permettre de différencier les connexions vers cet ordinateur. C'est le numéro de port. Sur le système d'exploitation de la connexion, vous avez besoin de tampons, d'état de connexion, etc. Cet objet logique est le socket.

pierre précieuse
la source
0

Une socket est un chemin de communication vers un port. Lorsque vous souhaitez que votre programme communique via le réseau, vous lui avez donné le moyen de s’adresser au port. Pour ce faire, vous créez un socket et vous le connectez au port. Fondamentalement, socket = IP + ports Les sockets fournissent un accès au port + ip

Sitati
la source
-1

Une adresse IP identifie le périphérique, c’est-à-dire l’adresse du périphérique en question. Lorsque vous atteignez la machine en utilisant IP, le port définit le processus de communication à utiliser sur cette machine.

Donc, pour que la communication ait lieu, vous avez besoin du port + IP qui s'appelle socket.

p j
la source