我的 Ubuntu 发行版上的 ip.h 文件在下面复制了以下 struct iphdr。谁能解释为什么变量 ihl 和版本的顺序会根据字节顺序而变化。根据我的理解,如果有多个字节,“字节序”会很重要,但在这种情况下,这两个(ihl 和版本)结合起来形成一个字节。因此,小端或大端不应该影响字节内位的顺序。
struct iphdr
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif __BYTE_ORDER == __BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#else
# error "Please fix <bits/endian.h>"
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};