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é?
networking
history
terminology
socket
chrisjlee
la source
la source
Réponses:
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 .
la source
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.
la source
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 :)
la source
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.
socket
est é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 à ...
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
memcpy
tampon 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.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.
la source
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:80
port80
deunix.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.
la source
AF_INET
sockets IP ( ).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.
la source