Що таке AF_INET і навіщо він мені потрібен?


201

Я починаю програмувати сокети, і я продовжую це бачити AF_INET.

Однак я ніколи не бачив нічого іншого, що використовується на його місці. Мої викладачі не такі корисні і просто кажуть "Вам це просто потрібно".

Тож мої запитання:

  • Яка мета AF_INET?
  • Чи замість цього використовується що-небудь ще?
    • Якщо ні, то чому саме там? Для можливих змін у майбутньому?
    • Якщо так, то що і чому?

Відповіді:


269

AF_INET- це сімейство адрес, яке використовується для позначення типу адрес, з якими може спілкуватися ваш сокет (у цьому випадку адреси Internet Protocol v4). Коли ви створюєте сокет, вам потрібно вказати його сімейство адрес, і тоді ви можете використовувати адреси такого типу лише з сокетом. Наприклад, ядро ​​Linux підтримує 29 інших сімей адрес, таких як AF_UNIXсокети UNIX ( ) та IPX ( AF_IPX), а також зв'язок з IRDA та Bluetooth ( AF_IRDAі AF_BLUETOOTH, однак, сумнівно, ви будете використовувати їх на такому низькому рівні).

Здебільшого, дотримуватися AF_INETпрограмування сокетів по мережі - це найбезпечніший варіант. Також є AF_INET6адреси v6 для протоколу Internet Protocol.

Сподіваюся, це допомагає,


43

Основна мета AF_INET полягала у наданні інших можливих мережевих протоколів або сімей адрес (AF - це сімейство адрес; PF_INET - сімейство протоколів (IPv4) Інтернет). Наприклад, напевно є ще кілька мереж Netware SPX / IPX; існували й інші мережеві системи, такі як DECNet, StarLAN та SNA, не кажучи вже про недоброякісний ISO OSI (Open System Interconnection), і вони не обов'язково використовували тепер всюдисущий IP-адресу для ідентифікації хост-однорангових мережевих з'єднань.

Повсюдна альтернатива AF_INET (яка в ретроспективі повинна була бути названа AF_INET4) - AF_INET6, для сімейства адрес IPv6. IPv4 використовує 32-бітні адреси; IPv6 використовує 128-бітні адреси.

Можливо, ви побачите деякі інші значення - але вони незвичайні. Саме там, щоб дозволити альтернативи та майбутні напрямки. Інтерфейс сокетів насправді дуже загальний - це одна з причин того, що він процвітав там, де інші мережеві інтерфейси вимерли.

Життя стало (в основному) спрощеним - будьте вдячні.


Дякую за Вашу відповідь. Я вважаю, що Ваша відповідь на моє перше запитання полягає в тому, що її мета - визначити, який мережевий протокол використовувати? Не могли б ви бути більш конкретними щодо інших питань?
Smashery

Хороший момент про AF_INET6; інші родини адрес підтримуються на деяких ОС.
MarkR

15

Вам потрібні такі аргументи, як AF_UNIX або AF_INET, щоб вказати, який тип адрес адреси в сокеті ви б використовували для реалізації зв'язку IPC-сокета. AF означає «Сімейство адрес».

Як і в стандартному сокеті BSD (прийнятий в модулі сокета Python), адреси представлені таким чином:

  1. Один рядок використовується для сімейства адрес AF_UNIX / AF_LOCAL. Ця опція використовується для IPC на локальних машинах, де не потрібна IP-адреса.

  2. Пара (хост, порт) використовується для сімейства адрес AF_INET, де хост - це рядок, що представляє або ім'я хоста в нотації Інтернет-домену, наприклад 'daring.cwi.nl', або адресу IPv4, наприклад '100.50.200.5', а порт - ціле число. Використовується для зв'язку між процесами через Інтернет.

AF_UNIX, AF_INET6, AF_NETLINK, AF_TIPC, AF_CAN, AF_BLUETOOTH, AF_PACKET, AF_RDS - це інший варіант, який може використовуватися замість AF_INET .

Ця нитка про відмінності між AF_INET та PF_INET також може бути корисною.


14

Сокет характеризується своїм доменом, типом і транспортним протоколом. Поширені домени:

  1. AF_UNIX: формат адреси - це шлях шляху UNIX

  2. AF_INET: формат адреси - номер хосту та порту

(насправді існує багато інших варіантів, які можна використовувати тут для спеціалізованих цілей). Зазвичай ми використовуємо AF_INET для програмування сокетів

Довідка: http://www.cs.uic.edu/~troy/fall99/eecs471/sockets.html


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.