Заголовок UDP 16-битный, но на самом деле 24-битный

Я пытаюсь понять заголовок 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 байта. Я что-то упускаю ?

Спасибо!

Это не заголовок UDP.

user253751 21.03.2022 15:30

(unsigned) short это 2 байта, а не 4 байта. И in_addr это 4 байта, а не 8 байт. Общий размер sockaddr_in должен составлять 16 байт. Но похоже, что ваша система использует 8-байтовый long вместо 4-байтового long или использует дополнительное заполнение выравнивания, которое не следует использовать для этих структур.

Remy Lebeau 21.03.2022 19:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем вопросе есть структуры C для выражения адреса сокета.

Это другое животное, чем то, что на самом деле отправляется по сети для заголовка UDP.

В основном заголовок IPv4 составляет 20 байтов, а заголовок UDP поверх этого - 8 байтов, как также объясняется в ссылке Geeks for Geeks в вашем вопросе.

Я рекомендую взглянуть на https://en.wikipedia.org/wiki/User_Datagram_Protocol или установить Wireshark и перехватить UDP-пакет, чтобы посмотреть, как он выглядит.

Другие вопросы по теме