Explication simple des sockets Unix

20

Je peux rechercher et j'ai déjà regardé l' entrée wikipedia et dans d'autres endroits, mais même si j'ai une certaine expérience en programmation, je ne comprends pas vraiment le concept. Pouvez-vous me traiter comme un enfant de 10 ans et me donner une explication claire sur la communication par socket?

Elzo Valugi
la source
Écrivez quelques petites applications de test en les utilisant. Vous n'avez même pas besoin de deux machines, seulement deux petites applications pour démarrer. Bingo.
Patrick Hughes
Le Guide de Beej pour la programmation réseau semble être un texte d'introduction très populaire pour les sockets Unix, bien que je ne puisse pas dire que je l'aime.
Nemanja Trifunovic
J'ai déjà voté pour @DanielPittman, si je devais écrire, j'aurais écrit la même réponse; Pourtant, si vous voulez plus d'aide, je voudrais prolonger. Veuillez modifier votre question, mettre en arrière-plan ce que vous savez et ce que vous ne savez pas et aussi, faites-moi savoir si vous cherchez de l'aide sur la façon d'utiliser, comment ils fonctionnent à l'intérieur, ou théorique (conception de protocole) ou si vous essayez évaluer dans un but?
Dipan Mehta
Voici un livre: Unix Network Programming . Quiconque sur terre répondrait à cette question aurait pu apprendre de cette mère. Lisez ce livre, votre question elle-même deviendra meilleure.
Dipan Mehta
Vous voulez dire les sockets BSD? Les sockets Unix ne fonctionnent que localement.
imel96

Réponses:

15

Permettez-moi de vous donner un exemple: dites que vous souhaitez communiquer / discuter avec votre ami, qui ne vit pas à votre adresse. Pour cela, vous devez établir un "canal de communication". Dites, vous voulez faire cette communication en utilisant des téléphones. Vous savez qu'il y a un réseau de lignes téléphoniques dans la ville qui s'étend à chaque maison.

Maintenant, il y a une prise téléphonique dans votre maison et une dans la maison de vos amis. Pour que la communication ait lieu, vous et votre ami devez vous connecter au réseau en branchant votre téléphone sur la prise, aux deux extrémités de la communication. Les prises de programmation sont les mêmes, conceptuellement, que les prises téléphoniques.

En programmation, vous avez deux processus (programmes en cours d'exécution) qui souhaitent communiquer entre eux. Pour cela, ils doivent établir un lien de communication entre eux. Encore une fois, il existe un réseau disponible, ils ont juste besoin de se connecter à ce réseau à l'aide d'une sorte de sockets. Les sockets Unix sont l'un de ces sockets qui fournit cette connectivité / connectabilité au réseau. Ainsi, dans chacun des deux programmes, vous aurez un morceau de code qui fait le travail de connexion au réseau via des sockets.

Le reste sont des détails.

Nazar Merza
la source
2
Je reverrais cela si j'avais assez de réputation. Votre texte n'explique pas le fonctionnement du socket. Juste le même texte général que dans Wikipedia. Comment la prise écoute- t-elle? Comment votre prise téléphonique peut-elle écouter la connexion?
Vert
21

Les sockets Unix sont des sockets bidirectionnelles - tout comme une socket basée sur IP, que vous connaissez probablement, et un peu similaire à un pipe, que vous connaissez probablement.

Ils ont un petit ensemble de propriétés intéressantes:

  • Ils appartiennent au domaine de "l'hôte local" uniquement - vous ne pouvez pas y accéder via le réseau, uniquement sur la machine locale.
  • Vous pouvez les créer en mode «flux», où ils transmettent simplement des données comme un canal sous forme de flux d'octets.
  • Vous pouvez les créer en mode "datagramme", où ils conservent des limites entre les opérations d'envoi. Cela vous permet de conserver le tramage sans créer votre propre protocole de tramage au-dessus d'un flux d'octets.
  • Ils utilisent le système de fichiers, ou sous Linux, un "espace de noms abstrait", comme "adresse"
  • Vous pouvez être en mesure d'usurper l'identité de l'autre extrémité, d'identifier en toute sécurité le logiciel de connexion ou de passer des descripteurs de fichiers sur le socket, selon votre système d'exploitation.

Essentiellement, ils sont l'équivalent de toute autre prise - ils ont des propriétés légèrement plus intéressantes que les tuyaux, mais ne sont pas radicalement différents autrement. Ils ont généralement une latence IPC plus élevée qu'un tube et souvent des tampons plus importants - bien que vous puissiez régler cela, et cela dépend de la plate-forme.

La dernière propriété intéressante à retenir est qu'ils utilisent le système de fichiers comme espace de noms - ils sont donc comme un canal nommé, plutôt que comme un canal anonyme, dans ce logiciel sans relation préalable pouvant communiquer. (Les sockets d'espace de noms abstraits sont les mêmes, mais le chemin "file" ne doit pas exister.)

Il n'y a rien de plus profond que cela - ils n'ont pas de propriété cachée super secrète qui les rend radicalement différents d'un canal typique ou d'une connexion TCP à localhost.

Daniel Pittman
la source
3
Merci mais je trouve ça compliqué et plein d'argot.
Elzo Valugi
2
Veuillez ne pas être offensé par cet essai sur une réponse d'une ligne, pour voir si cela aide mieux: "Vous savez comment fonctionnent les sockets TCP / IP et UDP / IP? Ce sont les mêmes, mais sans la partie IP."
Daniel Pittman
Je ne suis pas offensé, je veux juste comprendre. Merci. Je les étudierai plus en détail.
Elzo Valugi
4
Définir un terme en utilisant ce terme (c'est-à-dire: "Les sockets Unix sont un socket bidirectionnel") n'explique rien à quelqu'un qui ne sait pas ce qu'est un socket pour commencer.
Bryan Oakley