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?

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,


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.


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.


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.