Che cos'è AF_INET e perché ne ho bisogno?


201

Sto iniziando con la programmazione dei socket e continuo a vederlo AF_INET.

Eppure, non ho mai visto nient'altro usato al suo posto. I miei docenti non sono così utili e dicono solo "Ne hai solo bisogno".

Quindi le mie domande:

  • Qual è lo scopo di AF_INET?
  • Qualcos'altro è mai stato usato al posto di esso?
    • In caso contrario, perché è lì? Per possibili cambiamenti in futuro?
    • In tal caso, cosa e perché?

Risposte:


269

AF_INETè una famiglia di indirizzi utilizzata per designare il tipo di indirizzi con cui il socket può comunicare (in questo caso, indirizzi Internet Protocol v4). Quando si crea un socket, è necessario specificare la sua famiglia di indirizzi, quindi è possibile utilizzare solo indirizzi di quel tipo con il socket. Il kernel Linux, ad esempio, supporta altre 29 famiglie di indirizzi come AF_UNIXsocket UNIX ( ) e IPX ( AF_IPX), e anche comunicazioni con IRDA e Bluetooth ( AF_IRDAe AF_BLUETOOTH, ma è dubbio che le userete a un livello così basso).

Per la maggior parte, attenersi alla AF_INETprogrammazione dei socket su una rete è l'opzione più sicura. C'è anche AF_INET6per gli indirizzi Internet Protocol v6.

Spero che questo ti aiuti,


43

Lo scopo principale di AF_INET era consentire altri possibili protocolli di rete o famiglie di indirizzi (AF è per la famiglia di indirizzi; PF_INET è per la famiglia di protocolli Internet (IPv4)). Ad esempio, probabilmente ci sono ancora alcune reti Netware SPX / IPX in circolazione; c'erano altri sistemi di rete come DECNet, StarLAN e SNA, per non parlare dell'irresistibile ISO OSI (Open Systems Interconnection), e questi non utilizzavano necessariamente l'indirizzo IP ormai onnipresente per identificare l'host peer nelle connessioni di rete.

L'alternativa onnipresente ad AF_INET (che, a posteriori, avrebbe dovuto essere chiamata AF_INET4) è AF_INET6, per la famiglia di indirizzi IPv6. IPv4 utilizza indirizzi a 32 bit; IPv6 utilizza indirizzi a 128 bit.

Potresti vedere alcuni altri valori, ma sono insoliti. È lì per consentire alternative e direzioni future. L'interfaccia dei socket è in realtà molto generica, il che è uno dei motivi per cui ha prosperato laddove altre interfacce di rete sono appassite.

La vita è (per lo più) più semplice - sii grato.


Grazie per la tua risposta - Sto deducendo che la tua risposta alla mia prima domanda è che il suo scopo è definire quale protocollo di rete usare? Per favore, potresti essere più specifico sulle altre domande?
Smashery,

Un buon punto su AF_INET6; altre famiglie di indirizzi sono supportate su alcuni sistemi operativi.
Mark R

15

Sono necessari argomenti come AF_UNIX o AF_INET per specificare quale tipo di indirizzo socket si utilizzerà per implementare la comunicazione socket IPC. AF è l'acronimo di Address Family.

Come negli standard Socket BSD (adottati nel modulo socket Python) gli indirizzi sono rappresentati come segue:

  1. Una singola stringa viene utilizzata per la famiglia di indirizzi AF_UNIX / AF_LOCAL. Questa opzione viene utilizzata per IPC su macchine locali in cui non è richiesto alcun indirizzo IP.

  2. Una coppia (host, porta) viene utilizzata per la famiglia di indirizzi AF_INET, dove host è una stringa che rappresenta un nome host nella notazione del dominio Internet come 'daring.cwi.nl' o un indirizzo IPv4 come '100.50.200.5', e port è un numero intero. Utilizzato per comunicare tra i processi su Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS sono altre opzioni che potrebbero essere utilizzate al posto di AF_INET .

Questa discussione sulle differenze tra AF_INET e PF_INET potrebbe anche essere utile.


14

I socket sono caratterizzati dal loro dominio, tipo e protocollo di trasporto. I domini comuni sono:

  1. AF_UNIX: il formato dell'indirizzo è il percorso UNIX

  2. AF_INET: il formato dell'indirizzo è l'host e il numero di porta

(in realtà ci sono molte altre opzioni che possono essere utilizzate qui per scopi specializzati). Di solito usiamo AF_INET per la programmazione dei socket

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.