Unix vs BSD contre TCP contre les sockets Internet?

Je lis l’interface de programmation Linux et décrit plusieurs types de socket utilisés sous Linux:

  • Domaine Unix
  • Berkeley
  • TCP
  • l’Internet

L’une des choses du livre est que si vous souhaitez communiquer entre des hôtes distants, vous ne pouvez pas utiliser les sockets de domaine Unix, car ils sont destinés à IPC sur le même hôte. Vous devez utiliser des sockets “Internet”.

Cependant, je suis encore un peu confus quant à la relation avec les sockets “TCP”, les sockets Berkeley et les 2 autres? Quelle est leur relation? Pourquoi auriez-vous une prise Internet ainsi qu’une prise TCP?

En bref, j’essaie de comprendre tout (ai-je raté quelque chose?) Les différents types de sockets Unix et dans quelles circonstances je les utiliserais?

Une socket est une abstraction. La définition de tag utilisée sur SO pour un socket est aussi bonne que:

Un point final d’un stream de communication inter-processus bidirectionnel. Cela fait souvent référence à un stream de processus sur une connexion réseau, mais ne se limite en aucun cas à ceux-ci.

Donc, à partir de là, une distinction majeure est les sockets qui (1) utilisent un réseau et (2) les sockets qui ne le font pas.

Les sockets de domaine Unix n’utilisent pas le réseau. Leur API fait en sorte qu’elle ressemble (principalement) au développeur en tant que socket réseau, mais toute la communication se fait via le kernel et les sockets se limitent à des discussions sur des processus sur la machine sur laquelle ils s’exécutent.

Les sockets Berkeley sont ce que nous appelons les sockets réseau sur les plates-formes POSIX. Dans le passé, il existait différentes lignes de développement Unix (par exemple Berkeley ou BSD, System V ou sysV, etc.). Les sockets Berkeley ont été largement conquises sur le marché et sont synonymes de sockets Unix aujourd’hui.

Ssortingctement parlant, il n’y a pas de socket TCP. Il existe des sockets réseau pouvant communiquer via le protocole TCP. C’est juste un raccourci de linguiste pour les désigner comme un socket TCP pour les distinguer d’un socket utilisant un autre protocole, par exemple UDP, un protocole de routage ou autre.

Une prise “Internet” est essentiellement une distinction dépourvue de sens. C’est un socket utilisant un protocole réseau. Cela élimine les sockets de domaine Unix, mais la plupart des protocoles réseau peuvent être utilisés pour communiquer sur un réseau local ou sur Internet, qui consiste simplement en une collection de réseaux. (Notez toutefois que certains protocoles sont spécifiques aux réseaux locaux et à ceux qui gèrent les collections de réseaux.)