Я учусь о сырым программировании сокетов в Linux и во время урока я заметил совпадение с этим кодом:Непонятная цель кода?
struct ipheader {
unsigned char iph_ihl:5, iph_ver:4; //<--------------These
unsigned char iph_tos;
unsigned short int iph_len;
unsigned short int iph_ident;
unsigned char iph_flag;
unsigned short int iph_offset;
unsigned char iph_ttl;
unsigned char iph_protocol;
unsigned short int iph_chksum;
unsigned int iph_sourceip;
unsigned int iph_destip;
};
iph_ver
держит версию IP, которая будет 4, а iph_ihl
имеет длину заголовка, который будет установлен 5. Поскольку длина заголовка описана в 4 байтовых словах, фактическая длина заголовка составляет 5 × 4 = 20 байт. Минимальная длина - 20 байт. С учетом сказанного мне любопытно, будут ли битовые поля в этой структуре, заданные для iph_ver
и iph_ihl
, конкретно 4 и 5, потому что это будет IPv4, а IP-заголовок будет 20 байтов в длину. Однако я не уверен, как их битовые поля будут иметь какой-либо эффект или корреляцию их стоимости. Любые объяснения были бы весьма признательны.
Ссылка на код: http://www.tenouk.com/Module43a.html
Это бит поля. –
@ VladfromMoscow Но не битовые поля определяют размер в битах и только в битах? Они не определяют фактическую ценность этих данных, сколько у нее комнаты. Или мне не хватает чего-то фундаментального в битполах и/или как работа с версией и заголовком работает в заголовках ip? –
Это странно, хотя IHL должен быть 4-битным полем. – harold