Quelle est la différence entre un port et une socket?

928

C'était une question soulevée par l'un des ingénieurs logiciels de mon organisation. Je m'intéresse à la définition la plus large.

Richard Dorman
la source
19
Pour rappel, les sockets ne se limitent pas aux E / S réseau. Ils sont disponibles dans toutes sortes de situations pour diffuser des données entre diverses applications.
Oli

Réponses:

977

Sommaire

Un socket TCP est une instance de point de terminaison définie par une adresse IP et un port dans le contexte d'une connexion TCP particulière ou de l'état d'écoute.

Un port est un identifiant de virtualisation définissant un point de terminaison de service (par opposition à un point de terminaison d' instance de service aka identifiant de session).

Un socket TCP n'est pas une connexion , c'est le point de terminaison d'une connexion spécifique.

Il peut y avoir des connexions simultanées à un point de terminaison de service , car une connexion est identifiée à la fois par ses points de terminaison locaux et distants , permettant au trafic d'être acheminé vers une instance de service spécifique.

Il ne peut y avoir qu'un seul socket d'écoute pour une combinaison adresse / port donnée .

Exposition

C'était une question intéressante qui m'a obligé à réexaminer un certain nombre de choses que je pensais savoir à l'envers. On pourrait penser qu'un nom comme "socket" serait explicite: il a évidemment été choisi pour évoquer l'imagerie du point de terminaison auquel vous branchez un câble réseau, il y a de forts parallèles fonctionnels. Néanmoins, dans le langage des réseaux, le mot "socket" porte tellement de bagages qu'un réexamen minutieux est nécessaire.

Dans le sens le plus large possible, un port est un point d'entrée ou de sortie. Bien qu'il ne soit pas utilisé dans un contexte de réseautage, le mot français porte signifie littéralement porte ou passerelle , soulignant davantage le fait que les ports sont des points d'extrémité de transport que vous expédiez des données ou de gros conteneurs en acier.

Aux fins de cette discussion, je limiterai l'examen au contexte des réseaux TCP-IP. Le modèle OSI est très bien mais n'a jamais été complètement implémenté, et encore moins largement déployé dans des conditions de trafic intense et de stress élevé.

La combinaison d'une adresse IP et d'un port est strictement connue sous le nom de point de terminaison et est parfois appelée socket. Cette utilisation provient de RFC793, la spécification TCP d'origine.

Une connexion TCP est définie par deux points d'extrémité appelés sockets .

Un point de terminaison (socket) est défini par la combinaison d'une adresse réseau et d'un identifiant de port . Notez que l'adresse / le port n'identifie pas complètement un socket (plus d'informations à ce sujet plus tard).

Le but des ports est de différencier plusieurs points de terminaison sur une adresse réseau donnée. On pourrait dire qu'un port est un point de terminaison virtualisé. Cette virtualisation rend possible plusieurs connexions simultanées sur une seule interface réseau.

C'est la paire de sockets (le quadruple composé de l'adresse IP du client, du numéro de port client, de l'adresse IP du serveur et du numéro de port du serveur) qui spécifie les deux points de terminaison qui identifient de manière unique chaque connexion TCP sur Internet. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)

Dans la plupart des langages dérivés de C, les connexions TCP sont établies et manipulées à l'aide de méthodes sur une instance d'une classe Socket. Bien qu'il soit courant d'opérer à un niveau d'abstraction plus élevé, généralement une instance d'une classe NetworkStream, cela expose généralement une référence à un objet socket. Pour le codeur, cet objet socket semble représenter la connexion car la connexion est créée et manipulée à l'aide des méthodes de l'objet socket.

En C #, pour établir une connexion TCP (avec un écouteur existant), vous créez d'abord un TcpClient . Si vous ne spécifiez pas de point de terminaison au constructeur TcpClient, il utilise les valeurs par défaut - d'une manière ou d'une autre, le point de terminaison local est défini. Ensuite, vous appelez la méthode Connect sur l'instance que vous avez créée. Cette méthode nécessite un paramètre décrivant l'autre point de terminaison.

Tout cela est un peu déroutant et vous amène à croire qu'une prise est une connexion, ce qui est des conneries. Je travaillais sous cette méprise jusqu'à ce que Richard Dorman pose la question.

Après avoir fait beaucoup de lecture et de réflexion, je suis maintenant convaincu qu'il serait beaucoup plus logique d'avoir une classe TcpConnection avec un constructeur qui prend deux arguments, LocalEndpoint et RemoteEndpoint . Vous pouvez probablement prendre en charge un seul argument RemoteEndpoint lorsque les valeurs par défaut sont acceptables pour le point de terminaison local. Cela est ambigu sur les ordinateurs multi-hôtes, mais l'ambiguïté peut être résolue à l'aide de la table de routage en sélectionnant l'interface avec l'itinéraire le plus court vers le point de terminaison distant.

La clarté serait également renforcée à d'autres égards. Un socket n'est pas identifié par la combinaison de l'adresse IP et du port:

[...] TCP démultiplexe les segments entrants en utilisant les quatre valeurs qui comprennent les adresses locales et étrangères: adresse IP de destination, numéro de port de destination, adresse IP source et numéro de port source. TCP ne peut pas déterminer quel processus obtient un segment entrant en regardant uniquement le port de destination. En outre, le seul des [divers] points d'extrémité à [un numéro de port donné] qui recevra les demandes de connexion entrantes est celui qui est à l'état d'écoute. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)

Comme vous pouvez le voir, il n'est pas seulement possible, mais tout à fait probable pour un service réseau d'avoir de nombreux sockets avec la même adresse / port, mais un seul socket d'écoute sur une combinaison adresse / port particulière. Les implémentations de bibliothèque typiques présentent une classe de socket, dont une instance est utilisée pour créer et gérer une connexion. Ceci est extrêmement regrettable, car il provoque une confusion et a conduit à une confusion généralisée des deux concepts.

Hagrawal ne me croit pas (voir commentaires) alors voici un vrai échantillon. J'ai connecté un navigateur Web à http://dilbert.com , puis j'ai couru netstat -an -p tcp. Les six dernières lignes de la sortie contiennent deux exemples du fait que l'adresse et le port ne sont pas suffisants pour identifier de manière unique un socket. Il existe deux connexions distinctes entre 192.168.1.3 (ma station de travail) et 54.252.94.236:80 (le serveur HTTP distant)

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Puisqu'un socket est le point de terminaison d'une connexion, il existe deux sockets avec la combinaison adresse / port 207.38.110.62:80et deux autres avec la combinaison adresse / port 54.252.94.236:80.

Je pense que le malentendu de Hagrawal vient de mon utilisation très prudente du mot «identifie». Je veux dire "identifie complètement, sans ambiguïté et uniquement". Dans l'exemple ci-dessus, il y a deux points de terminaison avec la combinaison adresse / port 54.252.94.236:80. Si tout ce que vous avez est l'adresse et le port, vous n'avez pas suffisamment d'informations pour différencier ces sockets. Ce n'est pas assez d'informations pour identifier un socket.

Addenda

Le paragraphe deux de l'article 2.7 de la RFC793 dit

Une connexion est entièrement spécifiée par la paire de prises aux extrémités. Une prise locale peut participer à de nombreuses connexions à différentes prises étrangères.

Cette définition de socket n'est pas utile du point de vue de la programmation car elle n'est pas la même chose qu'un objet socket , qui est le point de terminaison d'une connexion particulière. Pour un programmeur, et la plupart des auditeurs de cette question sont des programmeurs, c'est une différence fonctionnelle vitale.

Références

  1. TCP-IP Illustrated Volume 1 The Protocols , W. Richard Stevens, 1994 Addison Wesley

  2. RFC793 , Information Sciences Institute, University of Southern California pour DARPA

  3. RFC147 , La définition d'une prise, Joel M. Winett, Lincoln Laboratory

Peter Wone
la source
6
Peut-être qu'une analogie réelle avec les mots-clés socket et port aiderait ceux qui ont voté pour la question. Encore une bonne explication!
rohitverma
5
@rationalcoder - Lisez la réponse entière. Il y a une différence entre être défini par quelque chose et être identifié par lui. Par exemple, les instances d'une classe sont définies par la classe. Ils y sont partiellement mais pas complètement identifiés.
Peter Wone
6
Je n'ai pas voté car je suis en désaccord avec cette déclaration - " Un socket n'est pas identifié par la combinaison de l'adresse IP et du port: " .. Lire TCP RFC - tools.ietf.org/html/rfc793 .. Il est très clair que socket est une combinaison d'IP et de port, si vous connaissez IP et port alors vous avez identifié un socket ou un point de terminaison, si vous connaissez une paire de socket ie client IP + port et serveur IP + port alors vous avez identifié une connexion unique ..
hagrawal
6
"Dans l'exemple ci-dessus, il y a deux points de terminaison avec la combinaison adresse / port 54.252.94.236:80. Si tout ce que vous avez est l'adresse et le port, vous n'avez pas assez d'informations pour différencier ces sockets. Ce n'est pas assez d'informations pour identifier un prise." Ce ne sont pas les mêmes sockets, mais des connexions différentes, entre les deux connexions, vous avez 3 sockets, 2 locaux et un même socket de serveur connectés; ou s'agit-il en fait de deux prises différentes? Il ne serait pas possible de les différencier car ils sont identiques, mais pour différencier les connexions, vous aurez besoin des différentes prises locales.
Andrew Clavin
6
-1 Votre réponse est tout simplement fausse. Vous: "Un socket TCP est ... le point final d'une connexion spécifique ." RFC 793 : "une prise peut être utilisée simultanément dans plusieurs connexions ." Je ne sais pas quelles bibliothèques vous utilisez, mais dans les bibliothèques que j'ai utilisées, les objets socket ont été définis de manière unique par une IP et un port et ont engendré des objets de connexion pour chaque socket distant.
Zaz
187

Une prise se compose de trois choses:

  1. Une adresse IP
  2. Un protocole de transport
  3. Un numéro de port

Un port est un nombre compris entre 1 et 65535 inclus, qui signifie une porte logique dans un périphérique. Chaque connexion entre un client et un serveur nécessite un socket unique.

Par exemple:

  • 1030 est un port.
  • (10.1.1.2, TCP, port 1030) est une socket.
RT_
la source
80
Non. Un socket se compose de cinq éléments: {protocole, adresse locale, port local, adresse distante, port distant}.
Marquis de Lorne
19
@EJP Non, encore une fois. Voir la réponse sélectionnée pour plus d'informations.
Kehlan Krumme
2
@KorayTugay C'est dans l'en-tête IP. Qu'est-ce qui vous fait penser que la couche TCP ne peut pas voir cela?
Marquis de Lorne
1
@EJP, comme je peux le voir dans la réponse la plus votée ci-dessus, qu'une socket n'est PAS la connexion elle-même mais c'est le point final d'une connexion, alors comment se fait-il qu'elle puisse inclure à la fois des ports locaux et distants et des adresses IP. Un socket ne représentera qu'un seul côté de la connexion, à savoir le port local et l'adresse IP locale OU le port distant et l'accès IP distant. Veuillez me corriger si je me trompe.
RBT
7
@EJP Still RFC 793: "Une paire de sockets identifie de manière unique chaque connexion. Autrement dit, une socket peut être utilisée simultanément dans plusieurs connexions." Si une prise se composait déjà de cinq choses, comment pourrait-il y avoir "une paire de prises" dans ma citation?
Gab 是 好人
101

Un socket représente une connexion unique entre deux applications réseau. Ces deux applications s'exécutent nominalement sur des ordinateurs différents, mais les sockets peuvent également être utilisés pour la communication interprocessus sur un seul ordinateur. Les applications peuvent créer plusieurs sockets pour communiquer entre elles. Les sockets sont bidirectionnelles, ce qui signifie que chaque côté de la connexion est capable d'envoyer et de recevoir des données. Par conséquent, un socket peut être créé théoriquement à n'importe quel niveau du modèle OSI à partir de 2. Les programmeurs utilisent souvent des sockets dans la programmation réseau, quoique indirectement. Les bibliothèques de programmation comme Winsock masquent de nombreux détails de bas niveau de la programmation des sockets. Les prises sont largement utilisées depuis le début des années 80.

Un port représente un point d'extrémité ou un "canal" pour les communications réseau. Les numéros de port permettent à différentes applications sur le même ordinateur d'utiliser les ressources réseau sans interférer les unes avec les autres. Les numéros de port apparaissent le plus souvent dans la programmation réseau, en particulier la programmation de socket. Parfois, cependant, les numéros de port sont rendus visibles pour l'utilisateur occasionnel. Par exemple, certains sites Web qu'une personne visite sur Internet utilisent une URL comme celle-ci:

http://www.mairie-metz.fr:8080/ Dans cet exemple, le nombre 8080 fait référence au numéro de port utilisé par le navigateur Web pour se connecter au serveur Web. Normalement, un site Web utilise le numéro de port 80 et ce numéro n'a pas besoin d'être inclus avec l'URL (bien qu'il puisse l'être).

Dans les réseaux IP, les numéros de port peuvent théoriquement aller de 0 à 65535. La plupart des applications réseau populaires utilisent cependant des numéros de port à l'extrémité inférieure de la plage (comme 80 pour HTTP).

Remarque: Le terme port fait également référence à plusieurs autres aspects de la technologie réseau. Un port peut faire référence à un point de connexion physique pour des périphériques tels que des ports série, parallèle et USB. Le terme port fait également référence à certains points de connexion Ethernet, tels que ceux d'un concentrateur, d'un commutateur ou d'un routeur.

ref http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm

ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm

Galvanais
la source
2
La couche 2 sur le modèle OSI est une connexion entre les nœuds, elle n'a pas de mécanisme de connexion des processus. Je ne pense pas que vous puissiez considérer un socket existant à OSI l2.
Antonio Haley
19
Un circuit est une connexion - une prise est un point de terminaison. Une connexion se compose de 2 prises.
Mark Brackett
« Un socket représente une connexion unique entre deux applications réseau. » Cela ne correspond pas à la RFC 793, Transmission Control Protocol qui explique: « Pour permettre à de nombreux processus au sein d'un même hôte d'utiliser simultanément les fonctionnalités de communication TCP, le TCP fournit un ensemble d'adresses ou des ports au sein de chaque hôte. Concaténé avec le réseau et les adresses d'hôte de la couche de communication Internet, cela forme un socket. Une paire de sockets identifie de manière unique chaque connexion. "
Ron Maupin
84

Avec une certaine analogie

Bien que beaucoup de choses techniques soient déjà données ci-dessus pour les sockets ... Je voudrais ajouter ma réponse, juste au cas où, si quelqu'un ne pouvait toujours pas sentir la différence entre ip, port et sockets

Considérons un serveur S ,

et dire que la personne X, Y, Z a besoin d'un service (par exemple un service de chat) de ce serveur S

puis

L'adresse IP indique -> qui? est ce serveur de chat 'S' que X, Y, Z veulent contacter

ok, vous avez "qui est le serveur"

mais supposons que le serveur «S» fournit également d'autres services à d'autres personnes, disons que «S» fournit des services de stockage à la personne A, B, C

puis

le port indique ---> lequel? service dont vous (X, Y, Z) avez besoin, c'est-à-dire service de chat et non pas ce service de stockage

ok .., vous faites en sorte que le serveur sache que le «service de chat» est ce que vous voulez et non le stockage

mais

vous avez trois ans et le serveur peut vouloir identifier les trois différemment

voici la prise

maintenant socket indique -> lequel? connexion particulière

c'est-à-dire, disons,

prise 1 pour personne X

prise 2 pour la personne Y

et prise 3 pour la personne Z

J'espère que ça aide quelqu'un qui était encore confus :)

eRaisedToX
la source
Donc X, Y, Z se connecteraient au même port, c'est-à-dire au même service, mais auraient des sockets différents côté serveur? Ainsi, lorsque, par exemple, X envoie un paquet au serveur, cela va dire: `` trouvez-moi la prise (protocole, IP de X, port de X, IP de S, port de S) '' et envoyez-la à l'application de chat. Je suppose qu'il doit y avoir une liaison entre certains objets spécifiques à l'application et les objets socket? Par exemple, lorsque j'obtiens des données de socket-1, je veux les afficher en tant que message utilisateur, mais l'application doit savoir que les messages de socket A proviennent d'User-X.
monolithe
44

Tout d'abord, je pense que nous devrions commencer par un peu de compréhension de ce qui constitue l'obtention d'un paquet de A à B.

Une définition courante d'un réseau est l'utilisation du modèle OSI qui sépare un réseau en plusieurs couches selon le but. Il y en a quelques-uns importants que nous couvrirons ici:

  • La couche de liaison de données . Cette couche est chargée d'obtenir des paquets de données d'un périphérique réseau à un autre et se trouve juste au-dessus de la couche qui effectue réellement la transmission. Il parle des adresses MAC et sait comment trouver des hôtes en fonction de leur adresse MAC (matérielle), mais rien de plus.
  • La couche réseau est la couche qui vous permet de transporter des données sur des machines et au-delà des limites physiques, telles que des périphériques physiques. La couche réseau doit essentiellement prendre en charge un mécanisme basé sur l'adresse supplémentaire qui se rapporte en quelque sorte à l'adresse physique; entrez le protocole Internet (IPv4). Une adresse IP peut faire passer votre paquet de A à B sur Internet, mais ne sait rien sur la façon de parcourir des sauts individuels. Ceci est géré par la couche ci-dessus conformément aux informations de routage.
  • La couche transport . Cette couche est chargée de définir la façon dont les informations passent de A à B et toutes les restrictions, vérifications ou erreurs sur ce comportement. Par exemple, TCP ajoute des informations supplémentaires à un paquet de sorte qu'il est possible de déduire si des paquets ont été perdus.

TCP contient, entre autres, le concept de ports . Il s'agit en fait de différents points de terminaison de données sur la même adresse IP à laquelle un socket Internet ( AF_INET) peut se lier.

En fait, il en va de même pour UDP et d'autres protocoles de couche transport. Techniquement, ils n'ont pas besoin de disposer de ports, mais ces ports permettent à plusieurs applications des couches ci-dessus d'utiliser le même ordinateur pour recevoir (et même établir) des connexions sortantes.

Ce qui nous amène à l'anatomie d'une connexion TCP ou UDP. Chacun comporte un port et une adresse source, ainsi qu'un port et une adresse cibles. C'est ainsi que dans une session donnée, l'application cible peut répondre, ainsi que recevoir, de la source.

Les ports sont donc essentiellement un moyen imposé par les spécifications d'autoriser plusieurs connexions simultanées partageant la même adresse.

Maintenant, nous devons examiner comment vous communiquez du point de vue de l'application au monde extérieur. Pour ce faire, vous devez demander gentiment à votre système d'exploitation et puisque la plupart des systèmes d'exploitation prennent en charge la façon de faire Berkeley Sockets, nous voyons que nous pouvons créer des sockets impliquant des ports à partir d'une application comme celle-ci:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Génial! Donc dans les sockaddrstructures, on va spécifier notre port et bam! Travail accompli! Enfin presque, sauf:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

est également possible. Urgh, cela a jeté une clé dans les travaux!

D'accord, ce n'est pas le cas. Tout ce que nous devons faire est de trouver des définitions appropriées:

  • Une prise Internet est la combinaison d'une adresse IP, d'un protocole et de son numéro de port associé sur lesquels un service peut fournir des données. Donc, le port TCP 80, stackoverflow.com est une prise Internet.
  • Un socket Unix est un point de terminaison IPC représenté dans le système de fichiers, par exemple /var/run/database.sock.
  • Une API de socket est une méthode permettant de demander à une application de lire et d'écrire des données sur un socket.

Voila! Cela règle les choses. Donc, dans notre schéma,

  • Un port est un identifiant numérique qui, dans le cadre d'un protocole de couche transport, identifie le numéro de service qui doit répondre à la demande donnée.

Donc, vraiment un port est un sous-ensemble des exigences pour former une prise Internet. Malheureusement, il se trouve que la signification du mot socket a été appliquée à plusieurs idées différentes. Je vous conseille donc vivement de nommer votre prochain socket de projet, juste pour ajouter à la confusion;)


la source
C'est pourquoi les balles ne partent pas et ne quitteront pas Powerpoint; ils travaillent!
Anurag Kalia
Très belle introduction à la communication TCP-IP et au réseau. Débutants, lisez ceci en premier.
Colin
32

Un socket = adresse IP + un port (adresse numérique)
Ensemble, ils identifient un point de terminaison pour une connexion réseau sur une machine. (Est-ce que je viens de faire échouer le réseau 101?)

Gishu
la source
7
Je crois que le port a une signification plus large que votre définition.
Richard Dorman
2
Et les sockets ne sont pas uniquement soumis à la pile TCP / IP. Voir Sockets de domaine UNIX ou sockets de communication inter-processus en général.
matthias krull
pas sûr de cette réponse. Vous pouvez utiliser HTTP pour communiquer avec un autre processus via des sockets sans affecter de port.
SeF
31

Généralement, vous obtiendrez beaucoup de théorie, mais l'une des façons les plus simples de différencier ces deux concepts est la suivante:

Pour obtenir un service, vous avez besoin d'un numéro de service. Ce numéro de service est appelé un port. Aussi simple que cela.

Par exemple, le HTTP en tant que service s'exécute sur le port 80.

Maintenant, de nombreuses personnes peuvent demander le service et une connexion client-serveur a été établie. Il y aura beaucoup de connexions. Chaque connexion représente un client. Afin de maintenir chaque connexion, le serveur crée un socket par connexion pour maintenir son client.

kta
la source
Chaque socket nécessite-t-il son propre port?
LundiPaper
Impressionnant. La manière la plus simple de présenter une connaissance de la montagne.
Asif Mehmood
5
Je ne sais pas si votre déclaration: "le serveur crée une socket par connexion pour maintenir son client" est correcte.
Rushi Agrawal
1
@RushiAgrawal Ensuite, je vous suggère de le rechercher. Plus précisément, voyez l' homme accepter.
Marquis de Lorne
1
Cela implique que pour chaque socket que le serveur crée par connexion pour maintenir son client peut avoir le même numéro de port (tel que le port 80 pour la poursuite des connexions HTTP) mais avec une adresse IP différente des clients à partir desquels les demandes de connexions sont envoyées. droite?
Randika Vishman
25

Il semble y avoir beaucoup de réponses assimilant le socket à la connexion entre 2 PC ... ce qui, je pense, est absolument incorrect. Un socket a toujours été le point de terminaison sur 1 PC, qui peut être connecté ou non - nous avons sûrement tous utilisé des sockets d'écoute ou UDP * à un moment donné. La partie importante est qu'elle est adressable et active. L'envoi d'un message à 1.1.1.1:1234 ne fonctionnera probablement pas, car aucun socket n'est défini pour ce point de terminaison.

Les sockets sont spécifiques au protocole - donc l'implémentation de l'unicité que TCP / IP et UDP / IP utilisent * (ipaddress: port), est différente de celle par exemple., IPX (Network, Node, et ... ahem, socket - mais différente socket que ce que l'on entend par le terme général "socket". Les numéros de socket IPX sont équivalents aux ports IP). Mais, ils offrent tous un point de terminaison adressable unique.

Étant donné que l'IP est devenu le protocole dominant, un port (en termes de réseau) est devenu synonyme d'un numéro de port UDP ou TCP - qui est une partie de l'adresse de socket.

  • UDP est sans connexion - ce qui signifie qu'aucun circuit virtuel entre les 2 points d'extrémité n'est jamais créé. Cependant, nous faisons toujours référence aux sockets UDP comme point de terminaison. Les fonctions API indiquent clairement que les deux ne sont que des types de sockets différents - SOCK_DGRAMest UDP (envoie simplement un message) et SOCK_STREAMTCP (crée un circuit virtuel).

  • Techniquement, l'en-tête IP contient l'adresse IP et le protocole sur IP (UDP ou TCP) contient le numéro de port. Cela permet d'avoir d'autres protocoles (par exemple, ICMP qui n'ont pas de numéro de port, mais qui ont des informations d'adressage IP).

Mark Brackett
la source
25

Brève réponse brève.

Un port peut être décrit comme une adresse interne au sein d'un hôte qui identifie un programme ou un processus.

Un socket peut être décrit comme une interface de programmation permettant à un programme de communiquer avec d'autres programmes ou processus, sur Internet ou localement.

Andy
la source
3
Le mot «interne» dans la description du port me semble plutôt «non public».
Jonas N
Alors pourrions-nous dire: les sockets fonctionnent à l'intérieur des ports? ou les ports s'exécute à l'intérieur des sockets?
Gucho Ca
@GuchoCa Nous ne pouvons pas dire que les sockets ou les ports fonctionnent du tout, encore moins l'un dans l'autre. Pas clair ce que vous demandez.
Marquis de Lorne
16

Ce sont des termes de deux domaines différents: «port» est un concept de réseau TCP / IP, «socket» est une chose API (programmation). Un «socket» est créé (en code) en prenant un port et un nom d'hôte ou une carte réseau et en les combinant dans une structure de données que vous pouvez utiliser pour envoyer ou recevoir des données.

Roel
la source
Pour la réponse la plus générale, supprimez "faite en prenant un port et un nom d'hôte ou une carte réseau et en les combinant en un". Par exemple, un socket UNIX est (dans le code) une structure de données (ou objet) que vous pouvez utiliser pour envoyer ou recevoir des données.
Josiah Yoder
14

Ce sont des concepts de base du réseautage, je vais donc les expliquer de manière simple mais complète pour les comprendre en détail.

  • Une prise est comme un téléphone (c'est-à-dire un appareil de communication de bout en bout)
  • L'IP est comme votre numéro de téléphone (c'est-à-dire l'adresse de votre prise)
  • Le port est comme la personne à qui vous voulez parler (c'est-à-dire le service que vous souhaitez commander à partir de cette adresse)
  • Une prise peut être un client ou une prise serveur (c'est-à-dire que dans une entreprise, le téléphone du service client est un serveur mais un téléphone chez vous est principalement un client)

Ainsi, une prise en réseau est un périphérique de communication virtuel lié à une paire (ip, port) = (adresse, service).

Remarque:

  • Une machine, un ordinateur, un hôte, un mobile ou un PC peut avoir plusieurs adresses, plusieurs ports ouverts et donc plusieurs sockets. Comme dans un bureau, vous pouvez avoir plusieurs téléphones avec plusieurs numéros de téléphone et plusieurs personnes à qui parler.
  • L'existence d'un port ouvert / actif nécessite que vous ayez un socket lié, car c'est le socket qui rend le port accessible. Cependant, vous pouvez avoir des ports inutilisés pour le moment.
  • Notez également que dans un socket de serveur, vous pouvez le lier à (un port, une adresse spécifique d'une machine) ou à (un port, toutes les adresses d'une machine) car dans le téléphone, vous pouvez connecter de nombreuses lignes téléphoniques (numéros de téléphone) à un téléphone ou une ligne téléphonique spécifique vers un téléphone et vous pouvez toujours joindre une personne via toutes ces lignes téléphoniques ou via une ligne téléphonique spécifique.
  • Vous ne pouvez pas associer (lier) une prise à deux ports car dans le téléphone, vous ne pouvez généralement pas toujours avoir deux personnes utilisant le même téléphone en même temps.
  • Avancé: sur la même machine, vous ne pouvez pas avoir deux sockets de même type (client ou serveur) et de même port et IP. Cependant, si vous êtes un client, vous pouvez ouvrir deux connexions, avec deux sockets, à un serveur car le port local dans chacun des sockets de ce client est différent)

J'espère que cela efface vos doutes

Mosab Shaheen
la source
Il est intéressant de voir toutes ces compréhensions et analogies des sockets / ports / adresses IP sous cette question. Et j'aime cette réponse.
Bloodmoon
12

Après avoir lu les excellentes réponses votées, j'ai trouvé que le point suivant devait être souligné pour moi, un nouveau venu dans la programmation réseau:

Les connexions TCP-IP sont des voies bidirectionnelles reliant une adresse: combinaison de ports à une autre adresse: combinaison de ports. Par conséquent, chaque fois que vous ouvrez une connexion depuis votre ordinateur local vers un port d'un serveur distant (par exemple, www.google.com:80), vous associez également un nouveau numéro de port sur votre ordinateur avec la connexion, pour permettre au serveur d'envoyer les choses vous reviennent (par exemple 127.0.0.1:65234). Il peut être utile d'utiliser netstat pour consulter les connexions de votre machine:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...
Colin
la source
12

Une adresse de socket est une adresse IP et un numéro de port

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Une connexion se produit lorsque 2 sockets sont liés ensemble.

Zaz
la source
Il n’existe pas de liaison entre deux prises. Le mot «lié» signifie autre chose avec des ports.
Marquis de Lorne le
10

Un socket est un type spécial de descripteur de fichier utilisé par un processus pour demander des services réseau au système d'exploitation. Une adresse de socket est le triple: {protocole, adresse-locale, processus-local} où le processus local est identifié par un numéro de port.

Dans la suite TCP / IP, par exemple:

{tcp, 193.44.234.3, 12345}

Une conversation est le lien de communication entre deux processus décrivant ainsi une association entre deux. Une association est le 5-tuple qui spécifie complètement les deux processus qui composent une connexion: {protocole, adresse locale, processus local, adresse étrangère, processus étranger}

Dans la suite TCP / IP, par exemple:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

pourrait être une association valide.

Une demi-association est soit: {protocole, adresse-locale, processus-local}

ou

{protocole, adresse étrangère, processus étranger}

qui spécifient chaque moitié d'une connexion.

La demi-association est également appelée socket ou adresse de transport. C'est-à-dire qu'un socket est un point de terminaison pour la communication qui peut être nommé et adressé dans un réseau. L'interface socket est l'une des nombreuses interfaces de programmation d'application (API) des protocoles de communication. Conçue pour être une interface de programmation de communication générique, elle a été introduite pour la première fois par le système UNIX 4.2BSD. Bien qu'il n'ait pas été normalisé, il est devenu une norme industrielle de facto.

Krishna
la source
Cette réponse est celle qui l'a fait pour moi. Je suppose que c'est parce que personne d'autre n'a mentionné le mot association. Bonne explication.
rationalcoder
Il n'y a aucun numéro de processus dans aucun de vos exemples. Le mot que vous recherchez est «port».
Marquis de Lorne
Lisez le premier paragraphe .. Il y est clairement mentionné. Faites-moi part de toute ambiguïté en citant la phrase exacte. Ce serait utile pour moi d'improviser.
Krishna
7

Un socket est un point de terminaison de communication. Un socket n'est pas directement lié à la famille de protocoles TCP / IP, il peut être utilisé avec n'importe quel protocole pris en charge par votre système. L'API socket C s'attend à ce que vous obteniez d'abord un objet socket vide du système que vous pouvez ensuite lier à une adresse de socket locale (pour récupérer directement le trafic entrant pour les protocoles sans connexion ou pour accepter les demandes de connexion entrantes pour les protocoles orientés connexion) ou que vous pouvez vous connecter à une adresse de socket distante (pour l'un ou l'autre type de protocole). Vous pouvez même faire les deux si vous souhaitez contrôler les deux, l'adresse du socket local auquel un socket est lié et l'adresse du socket distant auquel un socket est connecté. Pour les protocoles sans connexion, la connexion d'un socket est même facultative, mais si vous ne le faites pas, vous ' ll devra également passer l'adresse de destination avec chaque paquet que vous souhaitez envoyer sur le socket, car comment le socket pourrait-il savoir où envoyer ces données? L'avantage est que vous pouvez utiliser un seul socket pour envoyer des paquets à différentes adresses de socket. Une fois que votre prise est configurée et peut-être même connectée, considérez-la comme un tuyau de communication bidirectionnel. Vous pouvez l'utiliser pour transmettre des données à une destination et une destination peut l'utiliser pour vous transmettre des données. Ce que vous écrivez sur un socket est envoyé et ce qui a été reçu est disponible pour lecture. Vous pouvez l'utiliser pour transmettre des données à une destination et une destination peut l'utiliser pour vous transmettre des données. Ce que vous écrivez sur un socket est envoyé et ce qui a été reçu est disponible pour lecture. Vous pouvez l'utiliser pour transmettre des données à une destination et une destination peut l'utiliser pour vous transmettre des données. Ce que vous écrivez sur un socket est envoyé et ce qui a été reçu est disponible pour lecture.

Les ports, d'autre part, sont quelque chose que seuls certains protocoles de la pile de protocoles TCP / IP ont. Les paquets TCP et UDP ont des ports. Un port n'est qu'un simple numéro. La combinaison du port source et du port de destination identifie un canal de communication entre deux hôtes. Par exemple, vous pouvez avoir un serveur qui doit être à la fois, un simple serveur HTTP et un simple serveur FTP. Si maintenant un paquet arrive pour l'adresse de ce serveur, comment pourrait-il savoir s'il s'agit d'un paquet pour le serveur HTTP ou FTP? Eh bien, il le saura car le serveur HTTP fonctionnera sur le port 80 et le serveur FTP sur le port 21, donc si le paquet arrive avec un port de destination 80, c'est pour le serveur HTTP et non pour le serveur FTP. Le paquet a également un port source car sans un tel port source, un serveur ne peut avoir qu'une seule connexion à une adresse IP à la fois. Le port source permet à un serveur de distinguer des connexions par ailleurs identiques: elles ont toutes le même port de destination, par exemple le port 80, la même IP de destination (l'IP du serveur) et la même IP source, car elles proviennent toutes de le même client, mais comme ils ont un port source différent, le serveur peut les distinguer les uns des autres. Et lorsque le serveur renvoie des réponses, il le fait vers le port d'où provient la demande, de cette façon, le client peut également distinguer les différentes réponses qu'il reçoit du même serveur.

Mecki
la source
2
Ceci est une erreur. Un socket n'est pas un point de terminaison. Un socket est défini par deux points de terminaison. Chaque point de terminaison est défini par une adresse réseau et un port. Le but des ports est de différencier plusieurs points de terminaison sur la même adresse réseau, afin que plusieurs sockets simultanés puissent être pris en charge.
Peter Wone
1
Je remarque que RFC793 (spécification TCP d'origine) fait référence à la combinaison d'une adresse réseau et d'un port en tant que socket, donc je peux voir où vous avez obtenu cela, mais c'est toujours incorrect dans la mesure où un socket est nécessairement défini par deux points de terminaison.
Peter Wone
2
À la réflexion, la littérature est contradictoire et je m'en excuse. À proprement parler, la communication ne se produit pas tant qu'une connexion TCP n'est pas établie entre deux points d'extrémité (alias sockets), chacun étant identifié par une adresse réseau et un port. J'abandonne.
Peter Wone
6

Le port était la partie la plus simple, c'est juste un identifiant unique pour une socket. Un socket est quelque chose que les processus peuvent utiliser pour établir des connexions et communiquer entre eux. Tall Jeff avait une excellente analogie téléphonique qui n'était pas parfaite, j'ai donc décidé de la corriger:

  • IP et port ~ numéro de téléphone
  • prise ~ appareil téléphonique
  • connexion ~ appel téléphonique
  • établir une connexion ~ appeler un numéro
  • processus, applications distantes ~ personnes
  • messages ~ discours
inf3rno
la source
Bonne clarification (surtout si vous considérez l'historique de commutation téléphonique qui fait partie des fondements de la terminologie de mise en réseau ..)
o
Jetez un oeil à un netstatécran un certain temps. Tous les sockets acceptés à partir d'un socket d'écoute partagent le même port. Ergo un port n'est pas un identifiant unique pour un socket.
Marquis de Lorne
6

Une application consiste en une paire de processus qui communiquent sur le réseau (paire client-serveur). Ces processus envoient et reçoivent des messages, vers et depuis le réseau via une interface logicielle appelée socket . Considérant l'analogie présentée dans le livre "Computer Networking: Top Down Approach". Il y a une maison qui veut communiquer avec une autre maison. Ici, la maison est analogue à un processus et la porte à une prise. Le processus d'envoi suppose qu'il existe une infrastructure de l'autre côté de la porte qui transportera les données vers la destination. Une fois que le message est arrivé de l'autre côté, il passe par la porte du récepteur (prise) dans la maison (processus). Cette illustration du même livre peut vous aider:
entrez la description de l'image ici
Les sockets font partie de la couche transport, qui fournit une communication logique aux applications. Cela signifie que du point de vue de l'application, les deux hôtes sont directement connectés l'un à l'autre, même s'il existe de nombreux routeurs et / ou commutateurs entre eux. Ainsi, une socket n'est pas une connexion elle-même, c'est le point final de la connexion. Les protocoles de couche transport sont implémentés uniquement sur les hôtes, et non sur les routeurs intermédiaires.
Portsfournir des moyens d'adressage interne à une machine. L'objectif principal est de permettre à plusieurs processus d'envoyer et de recevoir des données sur le réseau sans interférer avec d'autres processus (leurs données). Toutes les prises sont fournies avec un numéro de port. Lorsqu'un segment arrive sur un hôte, la couche de transport examine le numéro de port de destination du segment. Il transmet ensuite le segment à la prise correspondante. Ce travail de livraison des données dans un segment de couche de transport à la bonne prise est appelé démultiplexage . Les données du segment sont ensuite transmises au processus attaché au socket.

Ugnes
la source
5

Un socket est une structure dans votre logiciel. C'est plus ou moins un fichier; il a des opérations comme lire et écrire. Ce n'est pas une chose physique; c'est un moyen pour votre logiciel de se référer à des choses physiques.

Un port est une chose semblable à un périphérique. Chaque hôte possède un ou plusieurs réseaux (ceux-ci sont physiques); un hôte a une adresse sur chaque réseau. Chaque adresse peut avoir des milliers de ports.

Un seul socket peut utiliser un port à une adresse. Le socket alloue le port à peu près comme l'allocation d'un périphérique pour les E / S du système de fichiers. Une fois le port alloué, aucune autre socket ne peut se connecter à ce port. Le port sera libéré lorsque le socket sera fermé.

Jetez un œil à la terminologie TCP / IP .

S.Lott
la source
3
Cette description de socket est assez hors de la base. Un socket concerne la connexion entre une paire de tuples où un tuple fait référence à une paire IP ADDR & Port. De plus, de nombreuses sockets PEUVENT se connecter au même port. Comment pensez-vous qu'un serveur Web accepte plusieurs connexions sur le port 80? C'est une mauvaise réponse
Tall Jeff
1
Désolé. Plusieurs sockets ne sont pas connectés au port 80. Un socket est connecté et génère des sockets supplémentaires où le transfert réel se produit. Voir opengroup.org/onlinepubs/009695399/functions/listen.html .
S.Lott
1
En fait, la description sur opengroup.org/onlinepubs/009695399/functions/connect.html est meilleure. Le socket homologue renvoyé par une connexion n'est PAS sur le port 80.
S.Lott
1
Ce message est incorrect à plusieurs égards et trompeur à plusieurs égards.
Peter Wone
@Peter Wone: Quels détails? Quels aspects? En espérant apprendre de mes erreurs.
S.Lott
5

à partir d' Oracle Java Tutorial :

Un socket est un point d'extrémité d'une liaison de communication bidirectionnelle entre deux programmes exécutés sur le réseau. Un socket est lié à un numéro de port afin que la couche TCP puisse identifier l'application à laquelle les données sont destinées à être envoyées.

yondoo
la source
Ce n'est qu'un tutoriel, et certainement pas une référence normative.
Marquis de Lorne
"Un socket est un point d'extrémité d'une liaison de communication bidirectionnelle" N'est-ce pas une définition de socket, pas un tutoriel java ??
priagupd
@prayagupd Bien sûr, c'est une définition, mais c'est à partir d'un tutoriel, pas d'une spécification.
Marquis de Lorne
4

Le port et la prise peuvent être comparés à ceux de la succursale bancaire.

Le numéro de bâtiment de la "Banque" est analogue à l'adresse IP. Une banque a différentes sections comme:

  1. Département des comptes d'épargne
  2. Département des prêts personnels
  3. Département du crédit immobilier
  4. Service des griefs

Donc 1 (service des comptes d'épargne), 2 (service des prêts personnels), 3 (service des prêts immobiliers) et 4 (service des réclamations) sont des ports.

Maintenant, disons que vous allez ouvrir un compte d'épargne, vous allez à la banque (adresse IP), puis vous allez au "service des comptes d'épargne" (numéro de port 1), puis vous rencontrez l'un des employés travaillant dans le "service des comptes d'épargne" ". Appelons-le SAVINGACCOUNT_EMPLOYEE1 pour ouvrir un compte.

SAVINGACCOUNT_EMPLOYEE1 est votre descripteur de socket, il peut donc y avoir SAVINGACCOUNT_EMPLOYEE1 à SAVINGACCOUNT_EMPLOYEEN. Ce sont tous des descripteurs de socket.

De même, d'autres départements auront des employés travaillant sous eux et ils sont analogues à la prise.

Shridhar410
la source
3

Un socket est un mécanisme d'E / S de données. Un port est un concept contractuel d'un protocole de communication . Une socket peut exister sans port. Un port peut exister sans socket spécifique (par exemple si plusieurs sockets sont actifs sur le même port, ce qui peut être autorisé pour certains protocoles).

Un port est utilisé pour déterminer vers quel socket le récepteur doit acheminer le paquet, avec de nombreux protocoles, mais il n'est pas toujours requis et la sélection du socket de réception peut être effectuée par d'autres moyens - un port est entièrement un outil utilisé par le gestionnaire de protocole dans le sous-système réseau. Par exemple, si un protocole n'utilise pas de port, les paquets peuvent aller vers toutes les sockets d'écoute ou n'importe quelle socket.

Sander
la source
3

Terminologie TCP / IP relative qui est ce que je suppose est impliquée par la question. En termes simples:

Un PORT est comme le numéro de téléphone d'une maison particulière dans un code postal particulier. Le code postal de la ville peut être considéré comme l'adresse IP de la ville et de toutes les maisons de cette ville.

Un SOCKET, d'autre part, ressemble plus à un appel téléphonique établi entre les téléphones d'une paire de maisons qui se parlent. Ces appels peuvent être établis entre des maisons dans la même ville ou deux maisons dans des villes différentes. C'est cette voie temporaire établie entre la paire de téléphones qui se parlent qui est la SOCKET.

Grand Jeff
la source
2
Un socket est un point de terminaison. Il existe avant qu'une connexion soit établie (TCP) ou en l'absence de connexion (UDP). Ergo ce n'est pas lui-même la connexion.
Marquis de Lorne
2

Au sens large, Socket - est juste cela, une prise, tout comme votre prise électrique, de câble ou de téléphone. Un point où les "trucs nécessaires" (puissance, signal, information) peuvent sortir et venir. Il cache beaucoup de détails, ce qui n'est pas nécessaire pour l'utilisation des "éléments requis". Dans le langage logiciel, il fournit un moyen générique de définir un mécanisme de communication entre deux entités (ces entités peuvent être n'importe quoi - deux applications, deux appareils physiquement séparés, espace utilisateur et noyau dans un système d'exploitation, etc.)

Un port est un discriminateur de point final. Il différencie un point final d'un autre. Au niveau du réseau, il différencie une application d'une autre, afin que la pile de réseau puisse transmettre des informations à l'application appropriée.

Harty
la source
2

Des réponses théoriques ont déjà été apportées à cette question. Je voudrais donner un exemple pratique à cette question, qui clarifiera votre compréhension de Socket et Port.

Je l'ai trouvé ici

Cet exemple vous guidera à travers le processus de connexion à un site Web, tel que Wiley. Vous devez ouvrir votre navigateur Web (comme Mozilla Firefox) et taper www.wiley.com dans la barre d'adresse. Votre navigateur Web utilise un serveur DNS (Domain Name System) pour rechercher le nom www.wiley.com afin d'identifier son adresse IP. Pour cet exemple, l'adresse est 192.0.2.100.

Firefox établit une connexion à l'adresse 192.0.2.100 et au port sur lequel le serveur Web de la couche application fonctionne. Firefox sait à quel port s'attendre car il s'agit d'un port bien connu. Le port bien connu d'un serveur Web est le port TCP 80.

Le socket de destination que Firefox tente de connecter est écrit en tant que socket: port, ou dans cet exemple, 192.0.2.100:80. Il s'agit du côté serveur de la connexion, mais le serveur doit savoir où envoyer la page Web que vous souhaitez afficher dans Mozilla Firefox, vous disposez donc également d'un socket pour le côté client de la connexion.

La connexion côté client est composée de votre adresse IP, telle que 192.168.1.25, et d'un numéro de port dynamique choisi au hasard. La socket associée à Firefox ressemble à 192.168.1.25:49175. Étant donné que les serveurs Web fonctionnent sur le port TCP 80, ces deux sockets sont des sockets TCP, alors que si vous vous connectiez à un serveur fonctionnant sur un port UDP, les sockets serveur et client seraient des sockets UDP.

Omkar Ramtekkar
la source
Citation de très mauvaise qualité. Le troisième paragraphe abuse du mot «socket» comme s'il signifiait «adresse IP». Ce n'est pas le cas.
Marquis de Lorne
2

Socket est une abstraction fournie par le noyau aux applications utilisateur pour les E / S de données. Un type de socket est défini par le protocole, sa gestion, une communication IPC, etc. Donc, si quelqu'un crée une socket TCP, il peut effectuer des manipulations comme lire des données sur une socket et y écrire des données par des méthodes simples et la gestion de protocole de niveau inférieur comme les conversions TCP et le transfert de paquets vers des protocoles réseau de niveau inférieur est effectué par l'implémentation de socket particulière dans le noyau. L'avantage est que l'utilisateur n'a pas à se soucier de la gestion des nitigrités spécifiques au protocole et qu'il doit simplement lire et écrire des données sur le socket comme un tampon normal. Il en va de même dans le cas de l'IPC, l'utilisateur lit et écrit simplement les données dans le socket et le noyau gère tous les détails de niveau inférieur en fonction du type de socket créé.

Port avec IP est comme fournir une adresse au socket, bien que ce ne soit pas nécessaire, mais cela aide dans les communications réseau.

Navneet Singh
la source
2

Un port unique peut avoir une ou plusieurs prises connectées à différentes adresses IP externes comme une prise électrique multiple.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312
client
la source
2

Socket est l'abstraction SW du point de terminaison de réseau, utilisée comme interface vers l'application. En Java, C # il est représenté par objet, sous Linux, Unix c'est un fichier.

Le port n'est qu'une propriété d'une socket que vous avez spécifiée si vous souhaitez établir une communication. Pour recevoir le paquet d'une socket, vous devez le lier à un port local et une carte réseau spécifiques (avec une adresse IP locale) ou à toutes les cartes réseau (INADDR_ANY est spécifié dans l'appel de liaison). Pour envoyer un paquet, vous devez spécifier le port et l'IP du socket distant.

Dražen G.
la source
1

Un socket est essentiellement un point de terminaison pour la communication réseau, composé d'au moins une adresse IP et un port. En Java / C #, un socket est une implémentation de niveau supérieur d'un côté d'une connexion bidirectionnelle.

Aussi, une définition dans la documentation Java .

Erik van Brakel
la source
Dans le Java Turorial, vous voulez dire.
Marquis de Lorne
1

Port:

Un port peut faire référence à un point de connexion physique pour des périphériques tels que des ports série, parallèle et USB. Le terme port fait également référence à certains points de connexion Ethernet, tels que ceux d'un concentrateur, d'un commutateur ou d'un routeur.

Prise:

Un socket représente une connexion unique entre deux applications réseau. Ces deux applications s'exécutent nominalement sur des ordinateurs différents, mais les sockets peuvent également être utilisées pour la communication interprocessus sur un seul ordinateur. Les applications peuvent créer plusieurs sockets pour communiquer entre elles. Les sockets sont bidirectionnelles, ce qui signifie que chaque côté de la connexion est capable d'envoyer et de recevoir des données.

balaweblog
la source
Un port TCP ou UDP ne fait référence à rien de physique ni à des points de connexion Ethernet. Vous n'avez pas répondu à la question.
Marquis de Lorne
1

Un port indique un point de terminaison de communication dans les transports TCP et UDP pour le protocole de réseau IP. Un socket est une abstraction logicielle pour un point de terminaison de communication couramment utilisé dans les implémentations de ces protocoles (socket API). Une autre implémentation est l'API XTI / TLI.

Voir également:

Stevens, WR 1998, UNIX Network Programming: API de mise en réseau: Sockets et XTI; Volume 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Volume 1: The Protocols, Addison-Wesley.

VoidPointer
la source