Co to jest AF_INET i dlaczego go potrzebuję?

200

Zaczynam od programowania gniazd i ciągle to widzę AF_INET.

Jednak nigdy nie widziałem niczego innego używanego zamiast tego. Moi wykładowcy nie są aż tak pomocni i po prostu mówią „Po prostu potrzebujesz”.

Więc moje pytania:

  • Jaki jest cel AF_INET?
  • Czy zamiast tego użyto czegoś jeszcze?
    • Jeśli nie, to dlaczego? Dla możliwych zmian w przyszłości?
    • Jeśli tak, co i dlaczego?
Smashery
źródło

Odpowiedzi:

268

AF_INETto rodzina adresów, która służy do określania rodzaju adresów, z którymi może się komunikować gniazdo (w tym przypadku adresy protokołu internetowego v4). Kiedy tworzysz gniazdo, musisz określić jego rodzinę adresów, a następnie możesz używać adresów tego typu tylko z gniazdem. Jądro Linux, na przykład, obsługuje 29 innych rodzin adresów, takich jak Unix ( AF_UNIX) gniazd i IPX ( AF_IPX), a także komunikacji z IrDA i Bluetooth ( AF_IRDAa AF_BLUETOOTH, ale wątpliwe jest, będziesz z nich korzystać na tak niskim poziomie).

W większości przypadków pozostawanie przy AF_INETprogramowaniu gniazd przez sieć jest najbezpieczniejszą opcją. Dostępne są również AF_INET6adresy protokołu internetowego v6.

Mam nadzieję że to pomoże,

George Shore
źródło
43

Głównym celem AF_INET było dopuszczenie innych możliwych protokołów sieciowych lub rodzin adresów (AF jest dla rodziny adresów; PF_INET jest dla rodziny protokołów internetowych (IPv4)). Na przykład prawdopodobnie istnieje jeszcze kilka sieci Netware SPX / IPX; istniały inne systemy sieciowe, takie jak DECNet, StarLAN i SNA, nie wspominając o źle spreparowanym ISO OSI (Open Systems Interconnection), i te niekoniecznie wykorzystywały obecnie wszechobecny adres IP do identyfikacji hosta równorzędnego w połączeniach sieciowych.

Wszechobecną alternatywą dla AF_INET (która z perspektywy czasu powinna była nazywać AF_INET4) jest AF_INET6 dla rodziny adresów IPv6. IPv4 używa adresów 32-bitowych; IPv6 używa 128-bitowych adresów.

Możesz zobaczyć inne wartości - ale są one niezwykłe. Ma umożliwić alternatywne rozwiązania i przyszłe kierunki. Interfejs gniazd jest rzeczywiście bardzo ogólny - co jest jednym z powodów, dla których świetnie się rozwijał tam, gdzie inne interfejsy sieciowe zwiędły.

Życie (głównie) stało się prostsze - bądź wdzięczny.

Jonathan Leffler
źródło
Dziękuję za odpowiedź - dedukuję, że odpowiedź na moje pierwsze pytanie polega na tym, że jego celem jest określenie, jakiego protokołu sieciowego użyć? Czy mógłbyś jednak bardziej szczegółowo określić inne pytania?
Smashery,
Dobra uwaga na temat AF_INET6; inne rodziny adresów są obsługiwane w niektórych systemach operacyjnych.
MarkR
15

Potrzebujesz argumentów takich jak AF_UNIX lub AF_INET, aby określić, jakiego rodzaju adresowania gniazd użyjesz do wdrożenia komunikacji gniazd IPC. AF oznacza rodzinę adresów.

Podobnie jak w przypadku standardowego gniazda Socket (przyjętego w module gniazda Python), są one reprezentowane w następujący sposób:

  1. Pojedynczy ciąg znaków jest używany dla rodziny adresów AF_UNIX / AF_LOCAL. Ta opcja jest używana w przypadku IPC na komputerach lokalnych, gdzie nie jest wymagany adres IP.

  2. Para (host, port) jest używana dla rodziny adresów AF_INET, gdzie host jest łańcuchem reprezentującym nazwę hosta w notacji domeny internetowej, np. „Daring.cwi.nl” lub adres IPv4, np. „100.50.200.5”, a port to Liczba całkowita. Służy do komunikacji między procesami przez Internet.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS to inne opcje, których można użyć zamiast AF_INET .

Ten wątek na temat różnic między AF_INET i PF_INET może być również przydatny.

Avi Mehenwal
źródło
14

Gniazda charakteryzują się domeną, rodzajem i protokołem transportowym. Typowe domeny to:

  1. AF_UNIX: format adresu to nazwa ścieżki UNIX

  2. AF_INET: format adresu to host i numer portu

(w rzeczywistości istnieje wiele innych opcji, których można tu użyć do specjalnych celów). zwykle używamy AF_INET do programowania gniazd

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

Asish P. Mathew
źródło