Qu'est-ce qu'une prise de courant?

49

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 s'appelle-t-il un socket? Est-ce purement parce que c'est quel nom ils ont inventé? Ou était-ce le premier nom qu'ils ont trouvé?

chrisjlee
la source
9
En termes simples: une prise est un téléphone. C'est ce que vous tenez dans la main qui vous permet d'avoir une conversation avec un autre téléphone. L'analogie s'effondre un peu: la plupart des conversations téléphoniques se font entre homologues. Les connexions de socket sont client à serveur. Le client (tel que, entre autres, les logiciels de station de travail tels que les navigateurs) se connecte à un serveur (tel qu'un serveur Web, un serveur de fichiers, un serveur d'authentification ou autre). Un autre défaut de l'analogie: lorsque vous fermez une connexion de socket, le socket est détruit et vous devez créer un nouveau socket avant de pouvoir établir une nouvelle connexion.
G-Man dit 'Réintégrez Monica'
Ce n'est pas si mal pour une analogie. Un serveur est juste un centre d'appels et peut avoir plusieurs centaines d'appels actifs en même temps.
MSalters

Réponses:

42

Une socket est juste un terminal logique pour la communication. Ils existent sur la couche de 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é en tant que tel dans l'en-tête d'un paquet.

Les guides de Beej sur la programmation réseau et la communication inter-processus fournissent des informations utiles sur l'utilisation des sockets et répondent même à cette question précise .

Shawn J. Goff
la source
65

En termes simples, un 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 converties en paquets réseau qui sont envoyés et les données reçues du réseau peuvent être lues à partir du socket.

À un égard, les sockets ressemblent beaucoup aux pipes: ils ressemblent aux fichiers des programmes qui les utilisent, mais ne donnent ni lecture ni écriture sur un disque; ils permettent plutôt de communiquer avec un autre programme (local dans le cas de tuyaux et éventuellement distant dans le cas de sockets). Comme vous le mentionnez, ils offrent également une communication bidirectionnelle (un peu comme une paire de tuyaux correctement connectés).

Enfin, il est courant que les programmes d’une même machine communiquent à l’aide de protocoles réseau standard, tels que TCP; il serait inutile de se rendre jusqu'au matériel réseau (le cas échéant!), aux sommes de contrôle, etc., pour revenir au même hôte: c’est là que les sockets de domaines Unix entrent en jeu. Celles-ci ressemblent beaucoup aux sockets classiques, sauf ils connectent des processus sur le même hôte plutôt que des processus distants et ne tentent pas d'utiliser les ressources du réseau. De cette manière, ils constituent un moyen de communication inter-processus.

Comme l'a mentionné Tripleee, au cours de l'histoire de BSD, les pipes ont été introduites plus tôt que les sockets et ont été réimplémentées à l'aide de sockets une fois que celles-ci existaient. La même référence, La conception et la mise en œuvre du système d’exploitation FreeBSD , mentionne que les pipes ont ensuite été rétablies en une implémentation sans socket pour des raisons de performances: cela souligne certainement le fait que les pipes partagent des similitudes.

Dhag
la source
3
Peut-être aussi mentionner que les pipes sont antérieures aux sockets, mais une fois que l'interface de socket a été ajoutée à Unix, il était logique de réimplémenter les pipes à l'aide de sockets locaux.
triplee
@tripleee: C'est un excellent point historique. Envie de fournir une référence?
Dhag
La recherche rapide apparaît à la page 40 de la section «Conception et mise en œuvre du système d’exploitation FreeBSD» . le texte mentionne cette modification dans la version 4.2BSD mais précise également que ce n'est plus comme cela que l'on procède, pour des raisons de performances.
triplee
Excellent, je vais ajouter ceci à ma réponse.
Dhag
La meilleure réponse techno de tous
chaosguru
7

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

Si les données envoyées par le socket peuvent être considérées comme des enveloppes de courrier, le socket sera alors votre boîte aux lettres. Vous attachez une boîte aux lettres (socket) à votre maison (programme) et y placez votre courrier sortant (données). À une heure programmée, mailman (système d'exploitation) arrive, récupère 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 vers le destinataire via le camion du facteur (connexion réseau) avec le courrier de tous vos voisins. Cela vous permet de correspondre avec des personnes lointaines sans avoir besoin de la dépense, du temps, des difficultés, etc. de livrer la lettre vous-même.

Pour ce qui est de la raison pour laquelle ils sont appelés "sockets", la notion selon laquelle les inventeurs peuvent l'appeler comme ils veulent joue probablement un rôle important à cet égard. Bien que ce ne soit pas une mauvaise réputation à mon avis :)

Andrew Lambert
la source
7

Maintenant qu'est-ce que c'est?

Une socket, ou "socket" peut avoir plusieurs choses:

Tout d’abord, il s’agit d’un modèle théorique et d’une interface de programmation (API) . Cela signifie que vous devez suivre un ensemble de règles et un ensemble de fonctions que vous pouvez utiliser pour écrire des programmes qui font quelque chose, selon un contrat spécifié avec précision. Dans ce cas particulier, quelque chose signifie échanger des données avec un autre programme.

L'API de sockets abstraite largement les détails de la "communication" en général. Il résume avec qui vous parlez et comment, dans une seule forme (presque) homogène et identique.
Vous pouvez créer des sockets dans différents "domaines" (tels que, par exemple, un "socket unix" ou un "socket internet") et différents types de communication (par exemple, un socket "datagramme" ou un "stream") et parler à différents destinataires. et tout fonctionne exactement de la même manière (enfin, 99%, il y aura évidemment des différences minimes 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.

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

Comment ça se compare à ...

les sockets tombent dans la même catégorie que les pipes et nomment les pipes

Un tuyau est un moyen de communication à sens unique entre un lecteur et un rédacteur (tous deux des programmes) sur le même ordinateur. Il simule un flux de données (comme par exemple TCP).
C'est-à-dire qu'il n'existe aucun "message" ou "bloc de données" individuel du point de vue du canal. Vous pouvez copier toute 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 les mêmes, et pas nécessairement en une fois) à "l'autre extrémité" dans le même ordre d'octet que vous avez poussé dedans.

Un tube nommé est, bien, simplement un tube qui possède un nom dans le système de fichiers . C'est-à-dire que c'est quelque chose qui ressemble et se comporte comme un fichier, il apparaît dans la liste des répertoires et vous pouvez l'ouvrir, l'écrire, etc. etc. Notez que vous pouvez également créer des fichiers spéciaux de socket (qui seraient des sockets nommés). .

En revanche, une prise est un moyen de communication bidirectionnelle ("duplex"), ce qui signifie que vous pouvez écrire et lire à partir de la même prise et que vous n’avez pas besoin de deux prises distinctes pour une communication bidirectionnelle.
En outre, une socket peut agir comme un flux (identique à un tuyau), ou envoyer des messages discrets, non fiables, ou des messages ordonnés discrets (les deux premiers fonctionnent sur n’importe quel domaine, le dernier uniquement sur "domaine unix" ) Il peut envoyer des messages (ou simuler un flux) à quelqu'un sur un ordinateur totalement différent. Une socket peut même créer une forme de communication un-à-plusieurs (multidiffusion) dans certaines conditions.

En gardant cela à l’esprit, il est clair que les sockets font quelque chose de beaucoup plus compliqué et ont généralement plus de frais généraux que les pipes (qui ne sont fondamentalement rien de plus qu’un simple memcpytampon vers / depuis un tampon!), Mais si vous créez des sockets locaux ordinateur), le système d’exploitation applique généralement un raccourci fortement optimisé, de sorte qu’il n’ya vraiment pas beaucoup de différence.

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

Oui, les sockets sont un moyen possible de communication inter-processus (mémoire partagée et canaux étant des exemples de solutions de rechange). Tous en même temps, ils sont utilisés pour "réseauter", comme expliqué ci-dessus.

Damon
la source
1

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 exemple unix.stackexchange.com has address 198.252.206.140

Cependant, chaque machine doit pouvoir fournir plusieurs services. La plupart des machines fournissent donc http (pages Web) sur le port 80 et ssh sur le port 22, etc.

Donc, le unix.stackexchange.com:80port 80de unix.stackexchange.com(une socket) est le point d’accès de ce site Web.

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

ctrl-alt-delor
la source
5
tcp / ip n'est qu'un type de socket. Il y en a d'autres qui n'ont rien à voir avec TCP / IP.
psusi
combien y a-t-il de sortes de prises différentes?
Abdul Al Hazred
1
@AbdulAlHazred, je connais quatre types courants utilisés avec le réseau ip, le même avec ip6, deux avec unix et deux avec IPX. Je n'ai pas regardé ax25, atm ou appletalk. D'autres protocoles sont pris en charge sur Linux, et il n'y a pas de protocoles que Linux ne prend pas en charge. Dans la plupart des cas, chaque protocole a des sockets stream (tcp) et datagramme (udp). Les sockets bruts sont également courants et imcp peut également avoir une interface de socket.
hildred
Le fait est que cette réponse est incomplète en ce sens qu'elle ne couvre qu'un type de socket et qu'elle est trompeuse en ce sens qu'elle représente des sockets en général comme si elles étaient toujours des sockets réseau, et plus précisément des AF_INETsockets IP ( ).
triplee
0

Je crois que vous avez posé des questions sur le réseautage. Les services TCP utilisent donc des sockets comme point de communication et se composent d’une adresse IP, d’un protocole et d’un numéro de port.

Dragos Alexe
la source