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

Réponses:

191

Un socket UNIX est un mécanisme de communication interprocessus qui permet l'échange de données bidirectionnel entre des processus s'exécutant sur le même ordinateur.

Les sockets IP (en particulier les sockets TCP / IP) constituent un mécanisme permettant la communication entre les processus sur le réseau. Dans certains cas, vous pouvez utiliser des sockets TCP / IP pour parler avec des processus s'exécutant sur le même ordinateur (à l'aide de 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. Donc, si vous envisagez de communiquer avec des processus sur le même hôte, il s'agit d'une meilleure option que les sockets IP.

Edit: Selon le 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.

pQd
la source
12
Peut-être ajouter que les sockets de domaine UNIX sont soumis aux autorisations du système de fichiers, alors que les sockets TCP ne le sont pas. Par conséquent, il est beaucoup plus facile de définir les utilisateurs ayant accès à un socket de domaine UNIX plutôt qu’à un socket TCP.
Nils Toedtmann
@pQd, Mec pouvez-vous l'appeler Unix IPC au lieu de Unix Sockets?
Pacerier
4
@Pacerier Les sockets Unix sont simplement un moyen de réaliser unix IPC (mémoire interprocess partagée, entre autres), il ne serait donc pas correct d'appeler unix sockets unix IPC.
fyquah95
Les sockets TCP sont aussi gérés par Unix? Les sockets TCP font partie de la spécification du protocole TCP ou tout protocole peut-il utiliser des sockets IP?
Federico
@ Federico J'ai posté une réponse qui essaie de répondre à votre requête. Si vous avez besoin de plus de profondeur, merci de poster une nouvelle question.
Peter Green
28

Vous pouvez lister vos propres sockets unix locales sur la machine avec la commande suivante:

netstat -a -p --unix

S'amuser!

Le concierge d'Unix
la source
9
Les sockets Unix n'existent pas sous Windows. netstatfonctionne cependant sous Windows.
Mark Tomlin
4
@apache, chose similaire dans Windows appelée "Named Pipes".
expert
5
Les canaux nommés sont également présents sur Linux.
Sahil Singh
9
@expert, les canaux nommés dans Windows sont égaux aux canaux nommés dans Unix. Les sockets IPC sous Unix n'ont pas d'équivalence dans Windows
Pacerier
2
Windows 10 prend en charge les sockets Unix. Il existe certaines limitations, mais elles sont disponibles: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

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

Un socket TCP / IP est utilisé pour la communication sur des réseaux TCP / IP. Un socket TCP connecté est identifié par la combinaison d'une adresse IP locale, d'un port local, d'une adresse IP distante et d'un port distant. Un socket TCP à l'écoute est identifié par le port local et éventuellement par l'adresse IP locale. AIUI, du moins sur les sockets TCP / IP sous Linux, entraîne toujours la génération et le décodage des paquets TCP / IP, même si le client et le serveur se trouvent sur le même ordinateur.

Un socket de domaine Unix (parfois abrégé en socket Unix) fonctionne sur une seule machine. Les sockets d'écoute résident dans la hiérarchie du système de fichiers et leur accès peut être contrôlé par les autorisations du système de fichiers.

De plus, un processus acceptant une connexion sur un socket Unix peut déterminer l'ID utilisateur du processus qui se connecte. Cela peut éviter le besoin 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 d'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 du protocole Internet ne concernent généralement que ce qui se passe sur le réseau. La spécification TCP contient une définition de Socket, mais cette définition n’est pas la même que la façon dont le terme est utilisé par "l’API de sockets".

L '"API de sockets", telle que nous la connaissons, a été introduite par BSD mais a ensuite été copiée dans tous les sens et est incluse dans le standard posix. Les éléments de base pour les sockets TCP et UDP ont tendance à être sensiblement les mêmes d’une plate-forme à l’autre, mais des fonctions plus avancées et des fonctionnalités 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 descripteur de fichier et peut être lu / écrit par les fichiers API, ce n’est pas le cas sous Windows.

Certaines extensions de l'API sockets ont été documentées dans les rfcs mais ces RFC sont uniquement "informatives".

ou n'importe quel protocole pourrait utiliser IP Sockets?

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

  • domaine sélectionne la famille de protocoles / adresses utilisés, par exemple AF_INET pour ipv4, AF_INET6 pour ipv6, AF_Unix pour les chemins de système de fichiers unix, etc.
  • type sélectionne la sémantique de la communication, les principales étant le datagramme et le flux, mais il existe aussi d'autres types plus spécialisés.
  • protocole sélectionne le protocole à utiliser. S'il est défini sur 0, un protocole par défaut pour la combinaison du domaine et du type sera utilisé.
Peter Green
la source
"Les sockets d’écoute résident dans la hiérarchie du système de fichiers et leur accès peut être contrôlé par les autorisations du système de fichiers." Cela signifie-t-il que deux serveurs ayant accès au même système de fichiers peuvent éventuellement communiquer via un socket?
user5359531
AIUI malheureusement pas. superuser.com/questions/352263/…
Peter Green