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.
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.
Réponses:
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 .
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:80
et 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.
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.
Une prise se compose de trois choses:
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:
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
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 :)
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:
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 sockaddr
structures, 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:
/var/run/database.sock
.Voila! Cela règle les choses. Donc, dans notre schéma,
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;)
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?)
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.
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_DGRAM
est UDP (envoie simplement un message) et SOCK_STREAM
TCP (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).
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.
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.
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.
Ainsi, une prise en réseau est un périphérique de communication virtuel lié à une paire (ip, port) = (adresse, service).
Remarque:
J'espère que cela efface vos doutes
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
...
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.
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.
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.
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:
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.
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:
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.
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 .
à 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.
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:
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.
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.
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.
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.
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.
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.
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
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.
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 .
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.
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.