日期:2014-05-16  浏览次数:20644 次

关于IP包头的极度困惑,在线等。。。。
IP数据包头开始第一个byte分别为bit0 - bit3为4位版本号,bit4 - bit7为4位首部长度,一般情况都是版本好为4,首部长度为5,按照我的理解打印出来应该是0x54,但是抓包打印出来是0x45,而本人自己打印出来也是0x45,所以本人非常疑惑,也查了很多资料,其中涉及的问题就是大小端的问题,但是按照本人的理解大小端对于单个字节是没有影响的
struct ip
  {
#if __BYTE_ORDER == __LITTLE_ENDIAN
    unsigned int ip_hl:4; /* header length */
    unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
    unsigned int ip_v:4; /* version */
    unsigned int ip_hl:4; /* header length */
#endif
 ......
 ......
}本人对于这个定义的理解无论在大小端系统,都应该把ip_hl放在高四位,ip_v放在低四位,但是为什么直接在内存里打印出来却是0x45呢,求救,在线等.................................

------解决方案--------------------
位序的图,修改了一下(更改下顺序):

------解决方案--------------------
引用:
Plain Text code?1234567891011                 0 1 2 3 4 5 6 7    bit                +-+-+-+-+-+-+-+-+                
------解决方案--------------------
1
------解决方案--------------------
0
------解决方案--------------------
1
------解决方案--------------------
0
------解决方案--------------------
0
------解决方案--------------------
0
------解决方案--------------------
1
------解决方案--------------------
0
------解决方案--------------------