web-dev-qa-db-fra.com

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

136
apache

Un socket UNIX est un mécanisme de communication inter-processus qui permet l'échange de données bidirectionnel entre les processus exécutés sur la même machine.

sockets 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 des sockets TCP/IP pour communiquer 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, ce qui leur permet d’é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 prévoyez de communiquer avec des processus sur le même hôte, c'est une meilleure option que les sockets IP.

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

218
pQd

Vous pouvez répertorier vos propres sockets Unix locaux avec la commande suivante:

netstat -a -p --unix

S'amuser!

31
The Unix Janitor

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

Un socket TCP/IP est utilisé pour la communication sur les réseaux TCP/IP. Un socket TCP TCP connecté est identifié par la combinaison IP local, port local, IP distant et port distant. Un socket TCP TCP écoute est identifié par le port local et éventuellement IP locale. AIUI au moins sur les sockets linux TCP/IP entraîne toujours la génération et le décodage des 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) d'autre part 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 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 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 dire au serveur de base de données que l'utilisateur exécutant l'application Web a accès au compte d'utilisateur correspondant dans la base de données.


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

Bien sûr

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

Les spécifications du protocole 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 la façon dont le terme est utilisé par "l'API sockets".

L '"API sockets" telle que nous la connaissons a été introduite par BSD mais a ensuite été copiée partout et est incluse dans le cadre de la norme posix. Les trucs de base pour TCP et les sockets UDP ont tendance à être sensiblement les mêmes sur différentes plates-formes, mais les trucs plus avancés et les trucs qui interagissent avec d'autres parties du système d'exploitation varient, par exemple sur les systèmes de type Unix a socket est identifié par un descripteur de fichier et peut être lu/écrit par les API de fichier, ce n'est pas le cas sous Windows.

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

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

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

  • le 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 communication, les principales é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 sur 0, un protocole par défaut pour la combinaison de domaine et de type sera utilisé.
15
Peter Green