Que sont les sockets Unix et comment fonctionnent-ils?

Contenu

Connexions de câbles à fibres optiques.

Les sockets Unix sont une forme de communication entre deux processus qui apparaît sous forme de fichier sur le disque. Ce fichier peut être utilisé par d'autres programmes pour déterminer des connexions très rapides entre deux ou plusieurs processus sans aucune surcharge réseau..

Que sont les bouchons?

Les sockets sont une connexion directe entre deux processus. Imaginez si vous vouliez appeler votre ami à l'avenir; pourrais-je passer un appel, faites-le router via votre compagnie de téléphone et rentrez chez vous, Ou vous pouvez faire passer un câble directement chez vous et couper l'intermédiaire. Ce dernier est apparemment peu pratique dans la vraie vie., mais dans le monde Unix il est très courant de déterminer ces connexions directes entre programmes.

Le nom correct des sockets Unix est Sockets de dominio Unix, car ils résident tous dans un seul ordinateur. En quelque sorte, les sockets sont un réseau entièrement contenu dans le noyau; au lieu d'utiliser des interfaces réseau pour envoyer des données, ces mêmes données peuvent être envoyées directement entre les programmes.

Malgré la création de fichiers sur le disque, Les sockets Unix n'écrivent pas réellement les données qu'ils envoient sur le disque, car ce serait trop lent. En échange, toutes les données sont conservées dans la mémoire du noyau; le seul point du fichier socket est de contenir une référence à la socket et de lui donner les autorisations du système de fichiers pour contrôler l'accès. Par exemple, Le socket MySQL est généralement dans:

/var/lib/mysql/mysql.sock

Ce fichier ne contient rien et vous ne devez pas le modifier directement, sauf autorisations le cas échéant. C'est juste un nom.

Comment fonctionnent les prises?

Les sockets fournissent simplement le matériel réel pour déplacer les données. Les sockets basés sur TCP sont appelés sockets de flux, où toutes les données arriveront dans l'ordre. Les sockets basés sur UDP sont des sockets de datagramme, où la commande (ou même livraison) il n'est pas garanti. Il y a aussi des sockets bruts, qui n'ont aucune restriction, et sont utilisés pour implémenter différents protocoles et utilitaires qui doivent inspecter le trafic réseau de bas niveau, como Wireshark.

Les sockets utilisent généralement toujours TCP ou UDP, car ils ne sont rien de spécial autre qu'un tuyau de fantaisie à l'intérieur du noyau. TCP et UDP sont des protocoles de transport qui définissent comment les données se déplacent d'un endroit à un autre, mais ils ne se soucient pas vraiment de ce que sont les données. TCP et UDP fournissent la plate-forme pour la plupart des autres protocoles comme FTP, SMTP et RDP, opérant à des niveaux supérieurs.

Il est possible pour une application d'utiliser une implémentation TCP légèrement différente; les points de vente utilisent le SOCK_STREAM protocole, c'est ce que TCP utilise également pour le transport presque tout le temps, et même s'ils sont simplement interchangeables, techniquement, ils sont légèrement différents. Même si c'est une chose de bas niveau et pas vraiment quelque chose dont vous devez vous soucier, sache juste que la majorité le trafic envoyé via les sockets de domaine UNIX est basé sur TCP ou UDP, ou du moins assez similaire, et TCP envoyé via les sockets de domaine UNIX est plus rapide que TCP via les interfaces réseau en tant que ports.

Utilisation de la prise en pratique

Les sockets Unix sont généralement utilisées comme alternative aux connexions TCP prises en charge par le réseau lorsque les processus s'exécutent sur la même machine.. En général, les données sont toujours envoyées via les mêmes protocoles; il reste simplement dans la même machine et sait qu'il s'exécute sur le même domaine (d'où le nom de sockets de domaine UNIX), vous n'avez donc jamais à perturber une interface réseau de bouclage pour vous connecter à elle-même.

Le plus grand exemple de ceci est Redis, un stockage clé-valeur extrêmement rapide qui fonctionne entièrement en mémoire. Redis est utilisé plusieurs fois sur le même serveur qui y accède, pour que vous puissiez utiliser régulièrement des sockets. À des niveaux aussi bas et à quelle vitesse Redis est, les prises fournissent un Augmentation des performances de 25% dans certains benchmarks synthétiques.

Si vous vous connectez à une base de données MySQL, tu peux aussi utiliser une prise. Vous vous connectez régulièrement à host:port à partir d'un système distant, mais si vous vous connectez à une base de données sur le même serveur (par exemple, une API REST qui accède à une base de données), vous pouvez utiliser des sockets pour accélérer. Cela n'affectera pas l'utilisation normale, mais c'est très visible sous charge, plus que 20% au 24 noyaux haut de gamme avec 128 utilisateurs simultanés et un million de requêtes par seconde. Que vous voyiez ou non un avantage des sockets est une autre histoire., mais à ce stade, vous voudrez probablement vous pencher sur la réplication et l'équilibrage de charge de toute façon.

Si vous voulez travailler avec les sockets manuellement, vous pouvez utiliser le socat utilitaire pour les exposer via les ports réseau:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var / lib / socket.sock

Techniquement, cela va à l'encontre du but des sockets de domaine Unix, mais peut être utilisé pour le débogage au niveau de la couche de transport.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.