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


C'est de cette réponse:

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


81
2018-03-20 09:13


origine




Réponses:


UNE Prise 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.

Prises IP (en particulier les sockets TCP / IP) sont un mécanisme permettant la communication entre des 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 et peuvent ainsi é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: comme par 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.


144
2018-03-20 09:39



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
@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 question. Si vous avez besoin de plus de profondeur, merci de poster une nouvelle question. - Peter Green


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

netstat -a -p --unix

S'amuser!


21
2018-03-20 13:49



Les sockets Unix n'existent pas sous Windows. netstat fonctionne cependant sous Windows. - Mark Tomlin
@apache, chose similaire dans Windows appelée "Named Pipes". - expert
Les pipes nommés sont également présents sur Linux. - Sahil Singh
@expert, les canaux nommés sous Windows sont égaux aux canaux nommés sous Unix. Les sockets IPC sous Unix n’ont pas d’équivalence sous Windows - Pacerier
Notez qu'une différence est que les canaux nommés ne peuvent avoir qu'un seul client connecté à la fois (2 processus communiquant au total). Les sockets UNIX, comme les sockets IP, peuvent avoir plusieurs clients connectés en même temps, chacun obtenant des réponses distinctes. - peterflynn


Quelle est la différence entre le socket Unix et le 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. Une prise TCP à l'écoute est identifiée 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 au contraire 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'inclure une copie de celui-ci 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 ê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 é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é.

3
2017-09-13 17:32