当前位置: 技术问答>linux和unix
关于IP包头的极度困惑,在线等。。。。
来源: 互联网 发布时间:2017-03-23
本文导语: IP数据包头开始第一个byte分别为bit0 - bit3为4位版本号,bit4 - bit7为4位首部长度,一般情况都是版本好为4,首部长度为5,按照我的理解打印出来应该是0x54,但是抓包打印出来是0x45,而本人自己打印出来也是0x45,所...
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呢,求救,在线等.................................
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呢,求救,在线等.................................
|
位序的图,修改了一下(更改下顺序):
|
从头到尾都是0x45 ,注意左右0~7的顺序
这里的0~7是什么顺序?0是对应字节的最高位第7位,而7对应最低位吗
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。