O que é AF_INET e por que preciso dele?

201

Estou começando a programação de soquetes e continuo vendo isso AF_INET .

No entanto, nunca vi nada mais ser usado em seu lugar. Meus professores não são tão úteis e apenas dizem "Você só precisa".

Então, minhas perguntas:

  • Qual é o propósito AF_INET?
  • Alguma coisa já foi usada em vez disso?
    • Se não, por que está lá? Para possíveis mudanças no futuro?
    • Se sim, o quê e por quê?
Smashery
fonte

Respostas:

269

AF_INETé uma família de endereços usada para designar o tipo de endereço com o qual seu soquete pode se comunicar (nesse caso, endereços do Protocolo da Internet v4). Ao criar um soquete, é necessário especificar sua família de endereços e, em seguida, você só pode usar endereços desse tipo com o soquete. O kernel Linux, por exemplo, suporta 29 outras famílias de endereços, como AF_UNIXsoquetes UNIX ( ) e IPX ( AF_IPX), além de comunicações com IRDA e Bluetooth ( AF_IRDAe AF_BLUETOOTH, mas é duvidoso que você as use em um nível tão baixo).

Na maioria das vezes, manter AF_INETa programação de soquetes em uma rede é a opção mais segura. Também existe AF_INET6para endereços do Internet Protocol v6.

Espero que isto ajude,

George Shore
fonte
43

O objetivo principal do AF_INET era permitir outros protocolos de rede ou famílias de endereços possíveis (AF é para a família de endereços; PF_INET é para a família de protocolos da Internet (IPv4)). Por exemplo, provavelmente existem algumas redes Netware SPX / IPX ainda; havia outros sistemas de rede como DECNet, StarLAN e SNA, para não mencionar o ISO OSI (Open Systems Interconnection), e estes não usavam necessariamente o agora onipresente endereço IP para identificar o host de mesmo nível nas conexões de rede.

A alternativa onipresente para AF_INET (que, em retrospecto, deveria ter sido denominada AF_INET4) é AF_INET6, para a família de endereços IPv6. O IPv4 usa endereços de 32 bits; O IPv6 usa endereços de 128 bits.

Você pode ver alguns outros valores - mas eles são incomuns. Está lá para permitir alternativas e direções futuras. A interface de soquetes é realmente muito geral - que é uma das razões pelas quais prosperou onde outras interfaces de rede murcharam.

A vida (principalmente) ficou mais simples - seja grato.

Jonathan Leffler
fonte
Obrigado pela sua resposta. Estou deduzindo que sua resposta à minha primeira pergunta é que seu objetivo é definir qual protocolo de rede usar? Você poderia, por favor, ser mais específico em outras questões?
Smashery 20/10/2009
Bom ponto sobre AF_INET6; outras famílias de endereços são suportadas em alguns sistemas operacionais.
21420 MarkR
15

Você precisa de argumentos como AF_UNIX ou AF_INET para especificar qual tipo de endereçamento de soquete você usaria para implementar a comunicação de soquete IPC. AF significa Família de Endereços.

Como no padrão BSD, os endereços de soquete (adotados no módulo de soquete Python) são representados da seguinte maneira:

  1. Uma única sequência é usada para a família de endereços AF_UNIX / AF_LOCAL. Esta opção é usada para IPC em máquinas locais onde nenhum endereço IP é necessário.

  2. Um par (host, porta) é usado para a família de endereços AF_INET, em que host é uma string que representa um nome de host na notação de domínio da Internet como 'daring.cwi.nl' ou um endereço IPv4 como '100.50.200.5' e porta é um inteiro. Usado para se comunicar entre processos pela Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS são outra opção que pode ser usada em vez de AF_INET .

Este tópico sobre as diferenças entre AF_INET e PF_INET também pode ser útil.

Avi Mehenwal
fonte
14

O soquete é caracterizado por seu domínio, tipo e protocolo de transporte. Os domínios comuns são:

  1. AF_UNIX: o formato do endereço é o nome do caminho UNIX

  2. AF_INET: formato do endereço é host e número da porta

(na verdade, existem muitas outras opções que podem ser usadas aqui para fins especializados). geralmente usamos AF_INET para programação de soquetes

Referência: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html

Asish P Mathew
fonte