2009-10-20 6 views
130

Donc je commence à programmer des sockets, et je continue à voir ça AF_INET. Pourtant, je n'ai jamais rien vu d'autre à sa place. Mes conférenciers ne sont pas d'une grande aide et disent simplement: «Vous en avez juste besoin». Donc, mes questions:Qu'est-ce que AF_INET, et pourquoi en ai-je besoin?

  • Quel est le but de AF_INET?
  • Est-ce que quelque chose d'autre a déjà été utilisé à la place?
    • Si non, pourquoi est-ce là? Pour d'éventuels changements dans le futur?
    • Si oui, quoi et pourquoi?

Répondre

163

AF_INET est une famille d'adresses utilisée pour désigner le type d'adresse avec lequel 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, et vous ne pouvez utiliser que des adresses de ce type avec le socket. Le noyau Linux, par exemple, supporte 29 autres familles d'adresses telles que les sockets UNIX (AF_UNIX) et IPX (AF_IPX), ainsi que les communications avec IRDA et Bluetooth (AF_IRDA et AF_BLUETOOTH, mais il est douteux que vous les utilisiez à un niveau aussi bas niveau). Pour la plupart, coller avec AF_INET pour la programmation de sockets sur un réseau est l'option la plus sûre. Il existe également AF_INET6 pour les adresses Internet Protocol v6.

Hope this helps,

35

L'objectif principal de AF_INET était de permettre à d'autres protocoles réseau possible ou les familles d'adresse (AF est pour la famille d'adresse, PF_INET est pour le protocole Internet (IPv4) famille). 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'ISO OSI (Open Systems Interconnection) mal conçue, 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û s'appeler 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 vraiment très générale, ce qui est l'une des raisons pour lesquelles elle a prospéré là où d'autres interfaces de réseau ont flétri.

La vie est (la plupart du temps) devenue plus simple - soyez reconnaissants.

+0

Merci pour votre réponse - je déduisant que votre réponse à ma première question est que son but est de définir ce protocole réseau à utiliser? Pourriez-vous être plus précis sur les autres questions? – Smashery

+0

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

11

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

  1. AF_UNIX: format d'adresse est chemin d'accès UNIX

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

(il y a effectivement beaucoup d'autres options qui peuvent être utilisées ici à des fins spécialisées).En général, nous utilisons AF_INET pour la programmation socket

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

13

Vous avez besoin d'arguments comme AF_UNIX ou AF_INET pour spécifier quel type de socket vous adressant utiliseriez pour mettre en œuvre la communication socket IPC. AF signifie Address Family.

Comme dans les adresses standard BSD Socket (adoptées dans le module de prise python) sont représentés comme suit:

  1. Une chaîne unique 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. Une paire (hôte, port) est utilisée pour la famille d'adresses AF_INET, où hôte est une chaîne représentant un nom d'hôte dans la notation de domaine Internet comme 'daring.cwi.nl' ou une adresse IPv4 du type '100.50.200.5'. ', et 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 d'autre option qui pourrait être utilisé au lieu de AF_INET. Ce code thread about the differences between AF_INET and PF_INET peut également être utile.

Questions connexes