¿Qué es AF_INET y por qué lo necesito?

201

Estoy comenzando con la programación de socket, y sigo viendo esto AF_INET.

Sin embargo, nunca he visto nada más usado en su lugar. Mis profesores no son tan útiles y solo dicen "Solo lo necesitas".

Entonces mis preguntas:

  • ¿Para qué sirve AF_INET?
  • ¿Se ha usado algo más en lugar de eso?
    • Si no, ¿por qué está ahí? ¿Para posibles cambios en el futuro?
    • ¿Si es asi, que y porque?
Smashery
fuente

Respuestas:

269

AF_INETes una familia de direcciones que se utiliza para designar el tipo de direcciones con las que su socket puede comunicarse (en este caso, direcciones de Protocolo de Internet v4). Cuando crea un socket, debe especificar su familia de direcciones, y luego solo puede usar direcciones de ese tipo con el socket. El kernel de Linux, por ejemplo, admite otras 29 familias de direcciones, como AF_UNIXsockets UNIX ( ) e IPX ( AF_IPX), y también comunicaciones con IRDA y Bluetooth ( AF_IRDAy AF_BLUETOOTH, pero es dudoso que las use a un nivel tan bajo).

En su mayor parte, apegarse AF_INETa la programación de sockets en una red es la opción más segura. También hay AF_INET6para direcciones de Protocolo de Internet v6.

Espero que esto ayude,

George Shore
fuente
43

El objetivo principal de AF_INET era permitir otros posibles protocolos de red o familias de direcciones (AF es para la familia de direcciones; PF_INET es para la familia de protocolos de Internet (IPv4)). Por ejemplo, probablemente todavía haya algunas redes Netware SPX / IPX; hubo otros sistemas de red como DECNet, StarLAN y SNA, sin mencionar el engendrado ISO OSI (Interconexión de sistemas abiertos), y estos no utilizaron necesariamente la dirección IP ahora omnipresente para identificar el host homólogo en las conexiones de red.

La alternativa ubicua a AF_INET (que, en retrospectiva, debería haberse llamado AF_INET4) es AF_INET6, para la familia de direcciones IPv6. IPv4 usa direcciones de 32 bits; IPv6 usa direcciones de 128 bits.

Puede ver algunos otros valores, pero son inusuales. Está ahí para permitir alternativas y direcciones futuras. La interfaz de sockets es realmente muy general, que es una de las razones por las que ha prosperado donde otras interfaces de red se han marchitado.

La vida se ha vuelto (en su mayoría) más simple: agradece

Jonathan Leffler
fuente
Gracias por su respuesta: deduzco que su respuesta a mi primera pregunta es que su propósito es definir qué protocolo de red utilizar. Sin embargo, ¿podría ser más específico sobre las otras preguntas?
Smashery
Buen punto sobre AF_INET6; otras familias de direcciones son compatibles con algunos sistemas operativos.
MarkR
15

Necesita argumentos como AF_UNIX o AF_INET para especificar qué tipo de direccionamiento de socket utilizaría para implementar la comunicación de socket IPC. AF significa Address Family.

Como en el estándar BSD Socket (adoptado en el módulo de socket Python), las direcciones se representan de la siguiente manera:

  1. Se utiliza una sola cadena para la familia de direcciones AF_UNIX / AF_LOCAL. Esta opción se utiliza para IPC en máquinas locales donde no se requiere una dirección IP.

  2. Se utiliza un par (host, puerto) para la familia de direcciones AF_INET, donde host es una cadena que representa un nombre de host en notación de dominio de Internet como 'daring.cwi.nl' o una dirección IPv4 como '100.50.200.5', y el puerto es un entero Se utiliza para comunicarse entre procesos a través de Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS son otra opción que podría usarse en lugar de AF_INET .

Este hilo sobre las diferencias entre AF_INET y PF_INET también podría ser útil.

Avi Mehenwal
fuente
14

El zócalo se caracteriza por su dominio, tipo y protocolo de transporte. Los dominios comunes son:

  1. AF_UNIX: el formato de dirección es la ruta UNIX

  2. AF_INET: el formato de dirección es el host y el número de puerto

(en realidad, hay muchas otras opciones que se pueden usar aquí para fines especializados). Generalmente usamos AF_INET para la programación de sockets

Referencia: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html

Asish P Mathew
fuente