Qu'est-ce que AF_INET et pourquoi en ai-je besoin?


201

Je commence la programmation des sockets et je continue de voir ça AF_INET.

Pourtant, je n'ai jamais rien vu d'autre utilisé à sa place. Mes conférenciers ne sont pas très utiles et disent simplement "Vous en avez juste besoin".

Alors mes questions:

  • Quel est le but de AF_INET?
  • Y a-t-il autre chose jamais utilisé à sa place?
    • Sinon, pourquoi est-il là? Pour d'éventuels changements dans le futur?
    • Si oui, quoi et pourquoi?

Réponses:


269

AF_INETest une famille d'adresses utilisée pour désigner le type d'adresses avec lesquelles votre socket peut communiquer (dans ce cas, les adresses Internet Protocol v4). Lorsque vous créez un socket, vous devez spécifier sa famille d'adresses, puis vous ne pouvez utiliser que des adresses de ce type avec le socket. Le noyau Linux, par exemple, prend en charge 29 autres familles d'adresses telles que les AF_UNIXsockets UNIX ( ) et IPX ( AF_IPX), ainsi que les communications avec IRDA et Bluetooth ( AF_IRDAet AF_BLUETOOTH, mais il est peu probable que vous les utilisiez à un niveau aussi bas).

Pour la plupart, s'en tenir à la AF_INETprogrammation de socket sur un réseau est l'option la plus sûre. Il existe également AF_INET6des adresses Internet Protocol v6.

J'espère que cela t'aides,


43

L'objectif principal d'AF_INET était de permettre d'autres protocoles réseau ou familles d'adresses possibles (AF est pour la famille d'adresses; PF_INET est pour la famille de protocoles Internet (IPv4)). Par exemple, il existe probablement encore quelques réseaux Netware SPX / IPX; il y avait d'autres systèmes de réseau comme DECNet, StarLAN et SNA, sans parler de l'OSI (Open Systems Interconnection) mal engendré, et ceux-ci n'utilisaient pas nécessairement l'adresse IP désormais omniprésente pour identifier l'hôte homologue dans les connexions réseau.

L'alternative omniprésente à AF_INET (qui, rétrospectivement, aurait dû être nommé AF_INET4) est AF_INET6, pour la famille d'adresses IPv6. IPv4 utilise des adresses 32 bits; IPv6 utilise des adresses 128 bits.

Vous pouvez voir d'autres valeurs - mais elles sont inhabituelles. Il est là pour permettre des alternatives et des orientations futures. L'interface des sockets est en fait très générale, ce qui est l'une des raisons pour lesquelles elle a prospéré là où d'autres interfaces réseau ont flétri.

La vie est (surtout) devenue plus simple - soyez reconnaissant.


Merci pour votre réponse - je déduis que votre réponse à ma première question est que son but est de définir quel protocole réseau utiliser? Pourriez-vous, s'il vous plaît, être plus précis sur les autres questions?
Smashery

Bon point sur AF_INET6; d'autres familles d'adresses sont prises en charge sur certains systèmes d'exploitation.
MarkR

15

Vous avez besoin d'arguments comme AF_UNIX ou AF_INET pour spécifier le type d'adressage de socket que vous utiliseriez pour implémenter la communication de socket IPC. AF signifie Address Family.

Comme dans le socket standard BSD (adopté dans le module socket Python), les adresses sont représentées comme suit:

  1. Une seule chaîne est utilisée pour la famille d'adresses AF_UNIX / AF_LOCAL. Cette option est utilisée pour IPC sur les machines locales où aucune adresse IP n'est requise.

  2. Une paire (hôte, port) est utilisée pour la famille d'adresses AF_INET, où hôte est une chaîne représentant soit un nom d'hôte en notation de domaine Internet comme «daring.cwi.nl» ou une adresse IPv4 comme «100.50.200.5», et le port est un nombre entier. Utilisé pour communiquer entre les processus sur Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS sont une autre option qui pourrait être utilisée à la place d' AF_INET .

Ce fil sur les différences entre AF_INET et PF_INET pourrait également être utile.


14

Les sockets se caractérisent par leur domaine, leur type et leur protocole de transport. Les domaines communs sont:

  1. AF_UNIX: le format d'adresse est le nom de chemin UNIX

  2. AF_INET: le format d'adresse est l'hôte et le numéro de port

(il existe en fait de nombreuses autres options qui peuvent être utilisées ici à des fins spécialisées). Habituellement, nous utilisons AF_INET pour la programmation des sockets

Référence: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.