web-dev-qa-db-fra.com

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

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

780
Richard Dorman

Résumé

Une socket TCP est une instance de noeud final 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 noeud final de service (distinct d'un noeud final d'instance de service ). .

Un socket TCP est pas une connexion , il s'agit du noeud final d'une connexion spécifique. .

Il peut exister des connexions simultanées à un noeud final de service , car une connexion est identifiée par à la fois ses noeuds finaux local et distant . , permettant au trafic d’être routé vers une instance de service spécifique.

Il ne peut y avoir qu'un seul connecteur 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 connaître à fond. On pourrait penser qu’un nom comme "socket" s’expliquerait par lui-même: il a évidemment été choisi pour évoquer une image du point de terminaison dans lequel vous branchez un câble de réseau, les parallèles fonctionnels étant forts. Néanmoins, dans le jargon du réseau, le mot "socket" est si lourd qu’un réexamen approfondi est nécessaire.

Dans le sens le plus large possible, un port est un point d'entrée ou de sortie. Bien que non utilisé dans un contexte de réseau, le mot français porte signifie littéralement une porte ou une passerelle , soulignant encore le fait que les ports sont des terminaux de transport, que vous expédiez données ou grands conteneurs en acier.

Aux fins de la présente discussion, je limiterai notre étude au contexte des réseaux TCP-IP. Le modèle OSI fonctionne très bien mais n'a jamais été complètement mis en œuvre, 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 appelée point de terminaison et est parfois appelée socket. Cette utilisation provient de RFC793, la spécification originale TCP.

Une connexion TCP est définie par deux points de terminaison, également appelés sockets .

Un point d'extrémité (socket) est défini par la combinaison d'une adresse réseau et d'un identifiant de port . Notez que adresse/port n'identifie pas complètement un socket (nous en parlerons plus tard).

Le but des ports est de différencier plusieurs points de terminaison sur une adresse réseau donnée. Vous pouvez dire qu'un port est un noeud final virtualisé. Cette virtualisation permet plusieurs connexions simultanées sur une seule interface réseau.

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

Dans la plupart des langages dérivés du C, TCP connexions 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 sur 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 celle-ci est créée et manipulée à l'aide des méthodes de l'objet socket.

En C #, pour établir une connexion TCP (à un écouteur existant), vous devez d'abord créer un TcpClient . Si vous ne spécifiez pas de point final dans le constructeur TcpClient , il utilise les valeurs par défaut. D'une manière ou d'une autre, le point final 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 laisse à penser qu’une prise est une connexion, ce qui est déroutant. Je travaillais sous cette incompréhension jusqu'à ce que Richard Dorman pose la question.

Après avoir beaucoup lu et réfléchi, 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 pourriez probablement prendre en charge un seul argument RemoteEndpoint lorsque les valeurs par défaut sont acceptables pour le point de terminaison local. Ceci 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 le chemin le plus court vers le point d'extrémité distant.

La clarté serait améliorée à d'autres égards également. Un socket est non identifié par la combinaison adresse IP et port:

[...] TCP démultiplexe les segments entrants en utilisant les quatre valeurs comprenant les adresses locale et étrangère: 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. De plus, le seul des [divers] points de terminaison situés sur [un numéro de port donné] qui recevra les demandes de connexion entrantes est celui à l'état d'écoute. (p255, Volume 1 illustré par TCP-IP , W. Richard Stevens)

Comme vous pouvez le constater, il est non seulement possible, mais très probable, qu’un service réseau dispose de plusieurs sockets avec la même adresse/le même port, mais qu’un seul port 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. C'est extrêmement regrettable, car cela crée de la confusion et a entraîné une confusion généralisée des deux concepts.

Hagrawal ne me croit pas (voir les commentaires), alors voici un échantillon réel. J'ai connecté un navigateur Web à http://dilbert.com puis j'ai lancé netstat -an -p tcp. Les six dernières lignes de la sortie contiennent deux exemples du fait que l'adresse et le port ne suffisent pas pour identifier de manière unique un socket. Il existe deux connexions distinctes entre 192.168.1.3 (mon poste 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

Etant donné qu'une socket est le noeud final 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 provient de mon utilisation très prudente de la Parole "identifie". Je veux dire "identifie complètement, sans ambiguïté et de manière unique". Dans l'exemple ci-dessus, il existe deux points de terminaison avec la combinaison adresse/port 54.252.94.236:80. Si tout ce que vous avez est adresse et port, vous n’avez pas assez d’informations pour distinguer ces sockets. Ce n'est pas assez d'informations pour identifier un socket.

Addenda

Le paragraphe deux de la section 2.7 de la RFC793 dit

Une connexion est entièrement spécifiée par la paire de sockets aux extrémités. Une prise locale peut participer à de nombreuses connexions avec 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 identique à un objet socket , qui est le noeud final d’une connexion particulière. Pour un programmeur, et la plupart des téléspectateurs de cette question sont des programmeurs, il s'agit d'une différence fonctionnelle vitale.

Références

  1. TCP-IP Illustrated Volume 1 Les protocoles , W. Richard Stevens, 1994 Addison Wesley

  2. RFC79, Institut des sciences de l'information, Université de Californie du Sud pour DARPA

  3. RFC147, La définition d'une prise de courant, Joel M. Winett, Laboratoire Lincoln

900
Peter Wone

Une socket est composée 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 un socket.
164
RT_

Un socket représente une seule connexion entre deux applications réseau. Ces deux applications fonctionnent normalement 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 bidirectionnels, ce qui signifie que l’un ou l’autre des côtés de la connexion est capable d’envoyer et de recevoir des données . Par conséquent, une socket peut être créée théoriquement à n’importe quel niveau du modèle OSI à partir de 2. Les programmeurs utilisent souvent des sockets dans la programmation réseau, même indirectement. Les bibliothèques de programmation telles que Winsock masquent de nombreux détails de bas niveau de la programmation de sockets. Les prises de courant sont largement utilisées depuis le début des années 1980.

Un port représente un point de terminaison ou "canal" pour les communications réseau. Les numéros de port permettent à différentes applications d'un même ordinateur d'utiliser les ressources du 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 par socket. Parfois, cependant, les numéros de port sont rendus visibles par l'utilisateur occasionnel. Par exemple, certains sites Web fréquentés par une personne sur Internet utilisent une URL du type suivant:

http://www.mairie-metz.fr:8080/ Dans cet exemple, le numéro 8080 désigne le 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 ne doit pas nécessairement être inclus avec l'URL (bien que cela puisse être le cas).

En réseau IP, les numéros de port peuvent théoriquement aller de 0 à 65535. Cependant, les applications réseau les plus courantes utilisent des numéros de port bas de gamme (par exemple 80 pour HTTP).

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

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

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

89
Galwegian

Avec une analogie

Bien que de nombreuses informations techniques soient déjà fournies ci-dessus pour sockets ....__, j'aimerais 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 personne X, Y, Z besoin d’un service (par exemple, service de chat) à partir de ce serveur serveur S

puis 

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

ok, tu as "qui est le serveur"

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

puis

le port dit ---> qui? service you (X, Y, Z) nécessite i.e. un service de chat et non ce service de stockage

ok .. vous faites savoir au serveur que le 'service de discussion' est ce que vous voulez et pas le stockage

mais 

vous êtes trois et le serveur peut vouloir identifier les trois différemment

il vient la prise

maintenant socket indique ->lequel? connexion particulière

c'est-à-dire

socket 1 pour personne X

socket 2 pour la personne Y

et prise 3 pour personne Z

J'espère que cela aidera quelqu'un qui était encore confus :)

61
eRaisedToX

Premièrement, je pense que nous devrions commencer par comprendre un peu ce que signifie obtenir 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 un certain nombre de couches en fonction de l'objectif. Il y en a quelques unes importantes, que nous allons couvrir ici:

  • La couche de liaison data. Cette couche est chargée d’obtenir des paquets de données d’un périphérique réseau à un autre et se situe juste au-dessus de la couche qui effectue 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 network est la couche qui vous permet de transporter des données sur des machines et sur des limites physiques, telles que des périphériques physiques. La couche réseau doit essentiellement prendre en charge un mécanisme supplémentaire basé sur l'adresse, qui est en quelque sorte lié à l'adresse physique. entrez le protocole Internet (IPv4). Une adresse IP peut obtenir votre paquet de A à B sur Internet, mais ne sait pas comment traverser des Houblons individuels. Ceci est géré par la couche ci-dessus conformément aux informations de routage.
  • La couche transport. Cette couche est responsable de la définition de la manière dont les informations passent de A à B, ainsi que de toute restriction, vérification ou erreur liée à ce comportement. Par exemple, TCP ajoute des informations supplémentaires à un paquet de manière à pouvoir en déduire si des paquets ont été perdus.

TCP contient, entre autres, le concept de ports . Ce sont en réalité des points de terminaison de données différents sur la même adresse IP auxquels un Internet Socket (AF_INET) peut se lier. 

Il se trouve que UDP et d’autres protocoles de couche de transport font de même. Ils ne sont pas techniquement nécessaires pour disposer de ports, mais ces ports permettent à plusieurs applications des couches précédentes 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 source et une adresse, ainsi qu'un port cible et une adresse. Ceci afin que, dans une session donnée, l'application cible puisse répondre, ainsi que recevoir, de la source.

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

Nous devons maintenant examiner comment vous communiquez du point de vue des applications au monde extérieur. Pour ce faire, vous devez demander votre système d’exploitation et, comme la plupart des systèmes d’exploitation prennent en charge la méthode Berkeley Sockets, 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 structures sockaddr, nous spécifierons notre port et bam! Travail accompli! Enfin presque, sauf:

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

est également possible. Urgh, c'est une clé en main!

Ok, eh bien en fait ça ne l’a pas été. Tout ce que nous avons à faire est de proposer 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 lequel un service peut fournir des données. Donc, le port TCP 80, stackoverflow.com est une prise Internet. 
  • Un socket Unix est un noeud final 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 pouvoir lire et écrire des données sur un socket.

Voila! Cela range les choses. Donc, dans notre schéma alors, 

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

Un port est donc un sous-ensemble des exigences pour la création d’une prise Internet. Malheureusement, il se trouve que la signification du socket Word 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;)

41
user257111

Un socket = adresse IP + un port (adresse numérique)
Ensemble, ils identifient un point de terminaison pour une connexion réseau sur une machine. (Ai-je simplement supprimé le réseau 101?)

27
Gishu

Généralement, vous aurez beaucoup de théorie mais l’un des moyens les plus simples de différencier ces deux concepts est le suivant:

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

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

Désormais, 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 gérer son client.

25
kta

Réponse brève et brève.

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

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

24
Andy

Il semble y avoir beaucoup de réponses assimilant socket avec connexion entre 2 PC ... ce qui, à mon avis, est tout à fait incorrect. Un socket a toujours été le endpoint sur 1 PC, qu'il soit connecté ou non. Nous avons certainement tous utilisé des connecteurs d'écoute ou UDP * à un moment donné. La partie importante est qu’il est adressable et actif. L'envoi d'un message à 1.1.1.1:1234 ne fonctionnera probablement pas, car aucun socket n'est défini pour ce noeud final.

Les sockets sont spécifiques au protocole - ainsi, la mise en oeuvre de l'unicité que TCP / IP _ et UDP / IP utilise * (ipaddress: port), est différent de eg., IPX _ (réseau, noeud et ... ahem, socket - mais une socket différente de celle que l'on entend par "socket" général Les numéros de socket IPX sont équivalents aux ports IP). Mais, ils offrent tous un point de terminaison adressable unique.

Depuis que l'IP est devenu le protocole dominant, un port (en termes de réseau) est devenu synonyme d'un UDP ou TCP numéro de port - qui est une partie de l'adresse du 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 à sockets UDP en tant que point de terminaison. Les fonctions de l'API indiquent clairement que les deux types de sockets sont simplement différents: SOCK_DGRAM est UDP (envoie simplement un message) et SOCK_STREAM est TCP (création d'un circuit virtuel).

  • Techniquement, l'en-tête IP contient l'adresse IP et le protocole au-dessus d'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).

23
Mark Brackett

Ce sont des termes issus de deux domaines différents: "port" est un concept issu du réseau TCP/IP, "socket" est un outil de programmation (API). Une «socket» est créée (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.

15
Roel

Après avoir lu les excellentes réponses élogieuses, j’ai trouvé que le point suivant méritait une importance particulière pour moi, nouveau venu dans la programmation réseau:

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

> 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
...
12
Colin

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.

12
Zaz

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 correspond au triple: {Protocole, adresse locale, processus local} 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 représentant ainsi une association entre deux . Une association est le 5-Tuple qui spécifie complètement les deux processus qui constituent une connexion: {Protocole, adresse-locale, processus-local , adresse étrangère, procédure étrangère}

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. En d'autres termes, une socket est un point d'extrémité pour une communication pouvant être nommée et adressée dans un réseau . L'interface de socket est l'une des interfaces de programmation d'application (API) aux protocoles de communication. Conçu pour être une interface de programmation de communication générique, il a été introduit pour la première fois par le système UNIX 4.2BSD. Bien qu'il n'ait pas été normalisé, il est devenu un standard de facto de l'industrie.

10
Krishna

Le port était la partie la plus facile, c’est juste un identifiant unique pour un socket Un socket est un processus 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, alors j'ai décidé de la réparer:

  • 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
6
inf3rno

à partir de Oracle Java Tutorial :

Une socket est l'un des points finaux 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.

5
yondoo

Une 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 faire référence à des choses physiques.

Un port est une chose qui ressemble à un périphérique. Chaque hôte possède un ou plusieurs réseaux (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 un périphérique pour les E/S du système de fichiers. Une fois le port attribué, aucun autre socket ne peut se connecter à ce port. Le port sera libéré lorsque le socket sera fermé.

Jetez un coup d’œil à Terminologie TCP/IP .

5
S.Lott

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, depuis et vers 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, maison est analogue à un processus et porte à une prise de courant. 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 destinataire dans la maison (processus). Cette illustration du même livre peut vous aider:
 enter image description here
Les sockets font partie de la couche de 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 en elle-même, c'est le point de terminaison de la connexion. Les protocoles de la couche transport ne sont implémentés que sur les hôtes et non sur les routeurs intermédiaires.
Ports fournissent 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). Tous les sockets sont fournis avec un numéro de port. Lorsqu'un segment arrive à 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 consistant à transmettre les données d’un segment de la couche de transport au support approprié est appelé démultiplexage. Les données du segment sont ensuite transmises au processus attaché au socket.

5
Ugnes

Le port et le socket peuvent être comparés à la succursale bancaire.

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

  1. Compte d'épargne
  2. Service de prêt personnel
  3. Service de prêt immobilier
  4. Service des griefs

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

Maintenant, disons que vous allez ouvrir un compte d'épargne, que vous allez à la banque (adresse IP), que vous allez ensuite au "département du compte d'épargne" (numéro de port 1), puis que vous rencontrez l'un des employés travaillant sous "département du compte d'épargne ". Appelons-le SAVINGACCOUNT_EMPLOYEE1 pour l'ouverture du 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 qui travaillent sous eux et ils sont analogues à socket.

3
Shridhar410

Une socket est un noeud final 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 de socket C s'attend à ce que vous obteniez d'abord du système un objet socket que vous pouvez ensuite associer à 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 prise distante (quel que soit le type de protocole). Vous pouvez même faire les deux si vous voulez contrôler les deux, l'adresse de la prise locale à laquelle une prise est liée et l'adresse de la prise distante à laquelle une prise est connectée. Pour les protocoles sans connexion, la connexion d'un socket est même facultative, mais si vous ne le faites pas, vous devrez également indiquer l'adresse de destination à chaque paquet que vous souhaitez envoyer via le socket, sinon 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 socket est configuré et peut-être même connecté, considérez-le comme un tuyau de communication bidirectionnel. Vous pouvez l'utiliser pour transmettre des données à une destination et certaines destinations peuvent l'utiliser pour vous renvoyer des données. Ce que vous écrivez dans un socket est envoyé et ce qui a été reçu est disponible pour la lecture.

Les ports, d’autre part, ne concernent que certains protocoles de la pile de protocoles TCP/IP. TCP et les paquets 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 sera à 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, le serveur HTTP fonctionnera sur le port 80 et le serveur FTP sur le port 21. Si le paquet arrive avec le port de destination 80, il s’agit du serveur HTTP et non du serveur FTP. De plus, le paquet a un port source car sans ce port, un serveur ne pouvait 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 adresse IP de destination, toujours la même adresse de serveur et la même adresse IP source, car ils proviennent tous du même client, mais comme ils ont des ports sources différents, le serveur peut les distinguer les uns des autres. Et lorsque le serveur enverra des réponses, il le fera sur le port d'où provient la demande. Ainsi, le client peut également distinguer les différentes réponses qu'il reçoit.

3
Mecki

La terminologie relative TCP/IP, qui est ce que je suppose, est implicite dans 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.

Une SOCKET, par contre, 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 de la même ville ou deux maisons de villes différentes. C’est le SOCKET, c’est cette voie temporaire établie entre la paire de téléphones qui se parlent.

3
Tall Jeff

Au sens large, Prise - n’est en réalité qu’une prise, tout comme votre prise électrique, votre câble ou votre téléphone. Un point d'où "des éléments nécessaires" (puissance, signal, information) peuvent sortir et entrer. Cela cache beaucoup de choses détaillées, ce qui n'est pas nécessaire pour utiliser les "choses requises". En langage logiciel, cela 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 périphériques 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 de terminaison d'un autre. Au niveau de la mise en réseau, cela différencie une application d'une autre, de sorte que la pile de mise en réseau puisse transmettre des informations à l'application appropriée.

2
Harty

Un seul port peut avoir une ou plusieurs prises connectées avec 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
2
guest

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 qu'il gère, une communication IPC, etc. Ainsi, si quelqu'un crée un socket TCP, il peut effectuer des manipulations telles que la lecture de données dans un socket et l'écriture de données à l'aide de méthodes simples La gestion de protocole de niveau inférieur, telle que les conversions TCP et le transfert de paquets vers des protocoles réseau de niveau inférieur, est effectuée par l'implémentation de socket particulière dans le noyau. L'avantage est que l'utilisateur n'a pas à s'inquiéter de la gestion des nitigrités spécifiques au protocole et doit simplement lire et écrire les données sur le socket comme un tampon normal. Il en va de même dans le cas d'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éé.

Le port associé à IP revient à fournir une adresse à la prise, bien que cela ne soit pas nécessaire, mais cela facilite les communications réseau. 

2
Navneet Singh

Un socket est un mécanisme d'E/S de données. Un port est un concept contractuel d'un protocole de communication. Un socket peut exister sans port. Un port peut exister sans un 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 le socket vers lequel le destinataire doit acheminer le paquet, avec de nombreux protocoles, mais ce n’est pas toujours nécessaire et la sélection du socket de réception peut être effectuée par un autre moyen - un port est entièrement un outil utilisé par le le sous-système de réseau. par exemple. Si un protocole n'utilise pas de port, les paquets peuvent aller à tous les sockets d'écoute ou à n'importe quel sockets.

2
Sander

Déjà des réponses théoriques ont été apportées à cette question. J'aimerais donner un exemple concret à cette question, qui clarifiera votre compréhension de Socket and Port.

Je l'ai trouvé ici

Cet exemple vous guidera tout au long du processus de connexion à un site Web, tel que Wiley. Vous ouvriez votre navigateur Web (comme Mozilla Firefox) et tapez 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 où le serveur Web de couche d’application fonctionne. Firefox le sait à quel port s'attendre car c'est un port bien connu. Le bien-connu le port pour un serveur Web est TCP le port 80.

Le socket de destination que Firefox tente de connecter est écrit en socket: port ou, dans cet exemple, 192.0.2.100:80. C'est le serveur côté de la connexion, mais le serveur doit savoir où envoyer le fichier page Web que vous voulez voir dans Mozilla Firefox, vous avez donc un socket pour le côté client de la connexion également.

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

2
Omkar Ramtekkar

Je sais qu'il y a beaucoup d'explications. Mais, il existe un autre moyen facile de comprendre avec un exemple pratique. Nous pouvons tous nous connecter au port HTTP 80, mais cela signifie-t-il qu'un seul utilisateur peut se connecter à ce port à la fois ?. La réponse est évidemment non'. Plusieurs utilisateurs à des fins multiples peuvent accéder au port HTTP 80, mais ils obtiennent toujours la réponse adéquate qu'ils attendent du serveur, n'est-ce pas?. Maintenant, réfléchis-y une minute, comment? Oui, vous avez raison, son adresse IP qui identifie de manière unique différents utilisateurs qui contactent à des fins différentes. Si vous aviez lu les réponses précédentes avant d’arriver ici, vous sauriez que l’adresse IP fait partie des informations constituant ce socket. Pensez-y, est-il possible d'avoir une communication sans sockets? La réponse est «Oui», mais vous ne pouvez pas exécuter plus d’une application dans un port, mais nous savons que nous ne sommes pas un commutateur «Dump» fonctionnant uniquement avec du matériel.

1
Vishal S

Une socket est fondamentalement un noeud final pour la communication réseau, composée d'au moins une adresse IP et d'un port. En Java/C #, un socket est une implémentation de niveau supérieur d’un côté d’une connexion bidirectionnelle.

En outre, une définition dans la documentation Java .

1
Erik van Brakel

Port:

Un port peut faire référence à un point de connexion physique Pour les périphériques tels que les 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 seule connexion 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 bidirectionnels, ce qui signifie que l'un ou l'autre des côtés de la connexion est capable d'envoyer et de recevoir des données. 

1
balaweblog

Un port désigne un point de terminaison de communication dans les transports TCP et UDP pour le protocole de réseau IP. Une socket est une abstraction logicielle pour un noeud final 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, W. R. 1998, Programmation réseau UNIX: API de mise en réseau: Sockets et XTI; Volume 1, Prentice Hall.
Stevens, W. R., 1994, Illustré TCP/IP, Volume 1: Les protocoles, Addison-Wesley.

0
VoidPointer

Ce sont des concepts de base pour la mise en réseau, je vais donc les expliquer facilement:

  • Une prise est comme un téléphone (c’est-à-dire un appareil de bout en bout pour la communication)
  • 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 voulez commander à cette adresse)

La prise est donc (adresse + port), ce qui signifie que la personne avec laquelle vous voulez parler (port) peut être accessible à partir de nombreux numéros de téléphone (IP).

C'est une explication précise, simple et pourtant suffisante pour comprendre. J'espère que ça efface vos doutes

0
Mosab Shaheen

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

Le port est simplement la propriété d'un socket que vous avez spécifié si vous souhaitez établir une communication. Pour recevoir un paquet provenant d'une socket, vous devez le lier à un port local spécifique et à NIC (avec adresse IP locale) ou à toutes les NIC (INADDR_ANY est spécifié dans l'appel à la liaison). Pour envoyer un paquet, vous devez spécifier le port et l'adresse IP du socket distant.

0
Dražen G.