web-dev-qa-db-fra.com

Qu'est-ce qu'une prise?

Quelqu'un pourrait-il m'expliquer ce qu'est une prise? Je le vois dans de nombreux acronymes dans le contexte de SSL, etc.

Aussi, pourquoi est-il appelé socket? Est-ce uniquement parce que c'est ce nom qu'ils ont inventé? Ou était-ce le premier nom qu'ils ont trouvé?

57
chrisjlee

Un socket n'est qu'un point de terminaison logique pour la communication. Ils existent sur la couche transport. Vous pouvez envoyer et recevoir des choses sur un socket, vous pouvez lier et écouter un socket. Un socket est spécifique à un protocole, une machine et un port, et est adressé comme tel dans l'en-tête d'un paquet.

Les guides de Beej sur Programmation résea et Communication inter-processus contiennent tous deux de bonnes informations sur la façon d'utiliser les sockets, et même répondez à cette question exacte .

48
Shawn J. Goff

En termes simples, une socket est un pseudo-fichier qui représente une connexion réseau. Une fois qu'un socket a été créé (en utilisant les primitives appropriées et les paramètres appropriés pour identifier l'autre hôte), les écritures sur le socket sont transformées en paquets réseau qui sont envoyés et les données reçues du réseau peuvent être lues à partir du socket.

À certains égards, les sockets sont très similaires aux canaux: ils ressemblent à des fichiers aux programmes qui les utilisent, mais n'entraînent pas de lecture ou d'écriture sur un disque; ils permettent plutôt de communiquer avec un autre programme (local dans le cas des tuyaux, et éventuellement distant dans le cas des sockets). Ils offrent également, comme vous le mentionnez, une communication bidirectionnelle (un peu comme une paire de tuyaux correctement connectés).

Enfin, il est courant que des programmes sur une seule machine communiquent à l'aide de protocoles réseau standard, tels que TCP; ce serait du gaspillage d'aller jusqu'au matériel réseau (le cas échéant!), de calculer les sommes de contrôle, etc., juste pour revenir au même hôte: c'est là que les sockets des domaines Unix entrent en jeu. Ce sont des sockets ordinaires, sauf ils connectent des processus sur le même hôte plutôt que des processus distants et n'essaient pas du tout d'utiliser des ressources réseau. De cette façon, ils sont un moyen de communication inter-processus.

Comme tripleee l'a mentionné, au cours de l'histoire de BSD, les tuyaux ont été introduits plus tôt que les sockets et ont été réimplémentés à l'aide de sockets une fois qu'ils existaient. La même référence, The Design and Implementation of the FreeBSD Operating System, mentionne que les tuyaux ont ensuite été rétablis pour une implémentation non socket pour des raisons de performances: cela souligne certainement le fait que les tuyaux partagent des similitudes.

74
dhag

Maintenant, c'est quoi?

Un socket, ou "socket" peut être plusieurs choses:

Tout d'abord, c'est un modèle de pensée et une interface de programmation d'application (API) . Cela signifie que vous avez un ensemble de règles que vous devez suivre et un ensemble de fonctions que vous pouvez utiliser pour écrire des programmes qui font quelque chose, selon un contrat précisément spécifié. Dans ce cas particulier, quelque chose signifie l'échange de données avec un autre programme.

L'API sockets résume largement les détails de la "communication" en général. Il résume avec qui vous parlez et comment, tout au long d'une forme (presque) cohérente et identique de coupe-biscuits.
Vous pouvez créer des sockets dans différents "domaines" (comme par exemple une "socket unix" ou une "socket internet") et de différents types de communication (par exemple une socket "datagramme" ou une socket "stream") et parler à différents destinataires, et tout fonctionne exactement de la même manière (eh bien, 99%, il y a évidemment des différences infimes dont vous devrez tenir compte).

Vous n'avez pas besoin de savoir (et vous ne voulez même pas savoir!) Si vous parlez à un autre programme sur le même ordinateur ou sur un autre ordinateur, ou s'il existe un réseau IPv4 ou IPv6 entre ces ordinateurs, ou peut-être un autre protocole dont vous n'avez jamais entendu parler.

socket est aussi le nom de la fonction de bibliothèque (ou syscall) qui crée "le socket", qui est un type spécial de fichier (tout sous Unix est un fichier).

Comment cela se compare-t-il à ...

les prises appartiennent à la même catégorie que les tuyaux et les tuyaux de nom

Un canal est un moyen de communication à sens unique entre un lecteur et un écrivain (tous deux étant des programmes) sur le même ordinateur. Il simule un stream de données (comme par exemple TCP).
Autrement dit, aucun "message" ou "bloc de données" individuel n'existe du point de vue du canal. Vous pouvez copier n'importe quelle quantité de données dans "une extrémité", et quelqu'un d'autre peut lire n'importe quelle quantité de données (pas nécessairement la même, et pas nécessairement en une seule fois) à "l'autre extrémité" dans le même ordre d'octets que vous l'avez poussé.

Un nommé pipe est, eh bien, simplement un pipe qui possède un nom dans le système de fichiers. Autrement dit, c'est quelque chose qui ressemble et se comporte exactement comme un fichier, il apparaît dans la liste des répertoires et vous pouvez l'ouvrir, y écrire, etc. etc. Notez que vous pouvez également créer des fichiers spéciaux de socket (ce serait un socket nommé) .

Un socket, d'autre part, est un moyen de communication bidirectionnelle ("duplex"), ce qui signifie que vous pouvez écrire et lire sur le même et vous n'avez pas besoin de deux prises distinctes pour une communication bidirectionnelle.
En outre, une socket peut agir comme un flux (identique à un canal), ou elle peut envoyer des messages discrets et peu fiables, ou elle peut envoyer des messages discrets et ordonnés (les deux premiers fonctionnent sur n'importe quel domaine, le dernier sur "domaine unix"). Il peut envoyer des messages (ou simuler un flux) à quelqu'un sur un ordinateur entièrement différent. Un socket peut même faire une forme de communication un-à-plusieurs (multidiffusion) dans certaines conditions.

Dans cet esprit, il est clair que les sockets font quelque chose de beaucoup plus compliqué et généralement ont plus de surcharge que les tuyaux (qui ne sont fondamentalement pas plus qu'un simple memcpy vers et depuis un !), mais si vous créez des sockets locaux (c'est-à-dire sur le même ordinateur), le système d'exploitation applique généralement un chemin rapide fortement optimisé, donc il n'y a vraiment pas beaucoup de différence.

communication inter-processus parfois évoquée à propos des réseaux

Oui, les sockets sont un moyen possible de communication inter-processus (la mémoire partagée et les canaux étant des exemples d'alternatives). En même temps, ils sont utilisés pour le "réseautage", comme expliqué ci-dessus.

8
Damon

Une socket une abstraction. Il fournit une interface permettant aux applications d'utiliser une ressource système (dans ce cas, la connexion réseau) d'une manière qui permet au système d'exploitation d'intervenir et d'organiser l'utilisation d'une ressource limitée par un nombre illimité d'applications.

Si les données envoyées via le socket pouvaient être considérées comme des enveloppes de courrier, alors le socket serait votre boîte aux lettres. Vous attachez une boîte aux lettres (prise) à votre maison (programme) et y mettez votre courrier sortant (données). À une heure programmée, le facteur (système d'exploitation) arrive et ramasse votre courrier sortant et dépose tout courrier entrant dans la même boîte aux lettres. Votre courrier sortant est acheminé en votre nom au destinataire via le camion du facteur (connexion réseau) avec tout le courrier de vos voisins. Cela vous permet de correspondre avec des personnes éloignées sans avoir à dépenser du temps, à consacrer des difficultés, etc. à livrer la lettre vous-même.

Quant à savoir pourquoi ils sont bien appelés 'sockets', la notion selon laquelle les inventeurs peuvent l'appeler comme ils veulent y joue probablement un rôle important. Ce n'est pas un mauvais nom à mon avis :)

7
Andrew Lambert

Pour udp ou tcp sur IP,

Une adresse de socket est la combinaison d'une adresse IP et d'un numéro de port.

Une adresse IP est l'adresse d'une machine sur Internet, par ex. unix.stackexchange.com has address 198.252.206.140

Cependant, chaque machine doit pouvoir fournir plus d'un service, donc la plupart des machines fourniront http (pages Web) sur le port 80, et ssh sur le port 22, etc.

Donc unix.stackexchange.com:80 Port 80 de unix.stackexchange.com (un socket) est le point d'accès de ce site web.

Cependant, il existe d'autres types de socket, voir les commentaires ci-dessous.

2
ctrl-alt-delor

Je pense que vous avez posé des questions sur le réseautage. Ainsi, les services TCP utilisent des sockets comme point de communication et sont constitués d'une adresse IP, d'un protocole et d'un numéro de port.

0
Dragos Alexe