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é.