247 votes

Quelle est la différence entre les sockets Unix et les sockets TCP/IP ?

C'est à partir de cette réponse :

https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424

Lorsque l'hôte est "localhost", les clients MySQL Unix utilisent un socket Unix, alias Unix Domain Socket, plutôt qu'un socket TCP/IP pour la connexion, donc le port TCP n'a pas d'importance.

359voto

pQd Points 29251

A socket UNIX AKA Unix Domain Socket, est un mécanisme de communication interprocessus qui permet l'échange bidirectionnel de données entre des processus fonctionnant sur la même machine.

Douilles IP (en particulier les sockets TCP/IP) sont un mécanisme permettant la communication entre les processus sur le réseau. Dans certains cas, vous pouvez utiliser les sockets TCP/IP pour parler avec des processus exécutés sur le même ordinateur (en utilisant l'interface de bouclage).

Les sockets de domaine UNIX savent qu'ils s'exécutent sur le même système, ils peuvent donc éviter certaines vérifications et opérations (comme le routage) ; ce qui les rend plus rapides et plus légers que les sockets IP. Ainsi, si vous prévoyez de communiquer avec des processus sur le même hôte, c'est une meilleure option que les sockets IP.

Edit : Comme pour Commentaire de Nils Toedtmann : Les sockets de domaine UNIX sont soumis aux autorisations du système de fichiers, tandis que les sockets TCP ne peuvent être contrôlés qu'au niveau du filtre de paquets.

41 votes

On peut ajouter que les sockets de domaine UNIX sont soumis aux permissions du système de fichiers, alors que les sockets TCP ne le sont pas. Par conséquent, il est beaucoup plus facile de réglementer les utilisateurs qui ont accès à un socket de domaine UNIX qu'à un socket TCP.

0 votes

@pQd, Dude peux-tu l'appeler Unix IPC au lieu d'Unix Sockets ?

9 votes

@Pacerier Les sockets Unix sont simplement une façon de réaliser l'IPC unix (mémoire interprocessus partagée entre autres), donc il ne serait pas correct d'appeler les sockets unix IPC unix.

51voto

Kirill Osenkov Points 3902

Vous pouvez lister les sockets unix locaux de votre propre machine avec la commande suivante :

Linux :

netstat -a -p --unix

MacOS : [commentaire de jbmeerkat].

netstat -a -f unix

Amusez-vous bien !

0 votes

Existe-t-il une commande similaire pour Windows ?

13 votes

Les sockets Unix n'existent pas sous Windows. netstat fonctionne toutefois sous Windows.

7 votes

@apache, une chose similaire sous Windows appelée "Named pipes".

36voto

Peter Green Points 3844

Quelle est la différence entre une socket Unix et une socket TCP/IP ?

Une socket TCP/IP est utilisée pour communiquer sur les réseaux TCP/IP. Un socket TCP connecté est identifié par la combinaison de l'IP locale, du port local, de l'IP distante et du port distant. Une socket TCP en écoute est identifiée par le port local et éventuellement l'IP locale. Si je comprends bien, au moins sous linux, les sockets TCP/IP entraînent toujours la génération et le décodage de paquets TCP/IP, même si le client et le serveur sont sur la même machine.

Un socket de domaine unix (parfois abrégé en socket unix), quant à lui, fonctionne sur une seule machine. Les sockets d'écoute vivent dans la hiérarchie du système de fichiers et leur accès peut être contrôlé par les permissions du système de fichiers.

De plus, un processus acceptant une connexion sur une socket Unix peut déterminer l'ID utilisateur du processus qui se connecte. Cela peut éviter la nécessité d'une étape d'authentification. Plutôt que de générer un mot de passe pour votre serveur de base de données et d'en inclure une copie dans le code de votre application Web, vous pouvez simplement indiquer au serveur de base de données que l'utilisateur qui exécute l'application Web a accès au compte utilisateur correspondant dans la base de données.


Les sockets TCP sont aussi gérés par Unix ?

Bien sûr.

Les sockets TCP font partie de la spécification du protocole TCP.

Les spécifications des protocoles Internet ont tendance à ne concerner que ce qui se passe sur le fil. La spécification TCP contient une définition de Socket mais cette définition n'est pas la même que celle utilisée par l'"API sockets".

L'"API sockets" telle que nous la connaissons a été introduite par BSD mais a ensuite été copiée un peu partout et fait partie du standard Posix. Les fonctionnalités de base des sockets TCP et UDP tendent à être les mêmes sur les différentes plateformes, mais les fonctionnalités plus avancées et celles qui interagissent avec d'autres parties du système d'exploitation varient. Par exemple, sur les systèmes de type Unix, un socket est identifié par un handle de fichier et peut être lu/écrit par les API de fichier, ce qui n'est pas le cas sous Windows.

Certaines extensions de l'API sockets ont été documentées dans des RFC mais ces RFC ne sont qu'"informatives".

ou n'importe quel protocole pourrait utiliser les sockets IP ?

Lorsqu'une application crée explicitement un socket à l'aide de la fonction "socket" (les sockets sont également créés par la fonction "accept"), elle passe trois paramètres, "domain", "type" et "protocol". Entre eux, ces trois paramètres peuvent être utilisés pour sélectionner de nombreux types de socket différents.

  • domain sélectionne la famille de protocoles/adresses utilisée, par exemple AF_INET pour ipv4, AF_INET6 pour ipv6, AF_Unix pour les chemins du système de fichiers unix, etc.
  • Le type sélectionne la sémantique de communication, les principaux étant le datagramme et le flux, mais il existe également d'autres types plus spécialisés.
  • protocole sélectionne le protocole à utiliser, s'il est défini à 0, un protocole par défaut pour la combinaison du domaine et du type sera utilisé.

0 votes

" Les sockets d'écoute vivent dans la hiérarchie du système de fichiers et leur accès peut être contrôlé par les permissions du système de fichiers. " Cela signifie-t-il que deux serveurs qui ont accès au même système de fichiers pourraient être en mesure de communiquer par le biais d'un socket ?

2 votes

AIUI malheureusement non. superuser.com/questions/352263/

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X