Понимание структуры sockaddr
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
В этой структуре, что именно означает семейство адресов, представленное sa_family
?
Означает ли это, что такие протоколы, как TCP/UDP, имеют "адреса"? Ну, протоколы могут быть идентификационными номерами, а не адресами, я думаю.
В любом случае, если да, то на каком основании их семьи были разделены?
Ответы
Ответ 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.