Я пытаюсь понять заголовок UDP и вижу, что на самом деле это 24 бита, которые рассматриваются как
struct sockaddr_in {
short sin_family; // e.g. AF_INET //4 bytes
unsigned short sin_port; // e.g. htons(3490) //4 bytes
struct in_addr sin_addr; // see struct in_addr, below //8 bytes
char sin_zero[8]; // zero this if you want to //8 bytes
};
struct in_addr {
unsigned long s_addr; // load with inet_aton()
};
Согласно это объяснение это 16 байт. Поскольку sin_zero[8] нигде не используется, это 16 байт? ЗАГОЛОВОК UDP Размер структуры по-прежнему составляет 24 байта. Я что-то упускаю ?
Спасибо!
(unsigned) short
это 2 байта, а не 4 байта. И in_addr
это 4 байта, а не 8 байт. Общий размер sockaddr_in
должен составлять 16 байт. Но похоже, что ваша система использует 8-байтовый long
вместо 4-байтового long
или использует дополнительное заполнение выравнивания, которое не следует использовать для этих структур.
В вашем вопросе есть структуры C для выражения адреса сокета.
Это другое животное, чем то, что на самом деле отправляется по сети для заголовка UDP.
В основном заголовок IPv4 составляет 20 байтов, а заголовок UDP поверх этого - 8 байтов, как также объясняется в ссылке Geeks for Geeks в вашем вопросе.
Я рекомендую взглянуть на https://en.wikipedia.org/wiki/User_Datagram_Protocol или установить Wireshark и перехватить UDP-пакет, чтобы посмотреть, как он выглядит.
Это не заголовок UDP.