Подтвердить что ты не робот

Понимание структуры sockaddr

struct sockaddr {
    unsigned short sa_family;   // address family, AF_xxx
    char           sa_data[14]; // 14 bytes of protocol address
};

В этой структуре, что именно означает семейство адресов, представленное sa_family?

Означает ли это, что такие протоколы, как TCP/UDP, имеют "адреса"? Ну, протоколы могут быть идентификационными номерами, а не адресами, я думаю.

В любом случае, если да, то на каком основании их семьи были разделены?

4b9b3361

Ответ 1

Формат и размер адреса обычно зависят от протокола.

sockaddr используется в качестве базы набора структур адресов, которые действуют как дискриминируемый союз, см. https://beej.us/guide/bgnet/html/multi/sockaddr_inman.html. Вы обычно смотрите на sa_family и затем sa_family к соответствующей структуре адресов, sa_family к семейству адресов.

TCP и UDP не имеют адресов, специфичных для них как таковых, скорее, уровень IP имеет разные размеры адресов для IPv4 и IPv6.

Смотрите также:

Ответ 2

Я нашел это при попытке дублирования метода getHardwareAddress() jnetpcap() в C/С++. MAC-адрес содержится, когда sa_family равен 17 (0x11, AF_PACKET), в байтах 10-15.