首页
社区
课程
招聘
[求助]一个关于ipv4头部的问题
发表于: 2013-7-23 14:38 4625

[求助]一个关于ipv4头部的问题

2013-7-23 14:38
4625
最近学习网络编程,通过winpacp获取网络封包,在解析ipv4头部和tcp头部的时候遇到了一个问题,使我很迷惑.
        通过查阅RFC791标准,得知在ipv4第一个字节是版本号和ip头部长度字段,下面是RFC定义:
    0                   1                   2                   3   
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Version|  IHL  |Type of Service|          Total Length         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Identification        |Flags|      Fragment Offset    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Time to Live |    Protocol   |         Header Checksum       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Source Address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Destination Address                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    Options                    |    Padding    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        按照图上所述,版本号应为低4位,长度应为高4位,但我在实际获取封包过程中得到的却是版本号为高4位,长度为低4位,我在网上查找了一些资料,有的说需要视自己的计算机属于大端模式还是小端模式而定,这让我很迷惑,不知哪位高手能够解释一下,这是怎么一回事.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 508
活跃值: (89)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
在做网络传输或是在做跨平台的时候,我们会遵循一种约定,就是使用网络字节序。因为网络字节序是标准规定的,它永远都是大头存储的,当在本地接受到数据的时候,也是按照大头的约定来解析的,然后解析出来的数据在本机存储的时候,再按照本机的cpu字节寻来存储,在tcp的协议中,放置的数据是按照大头存储的。
2013-7-23 17:13
0
雪    币: 758
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
经过测试发现,小端机如果在一个byte里有多个bit变量,变量位置与实际相反,如果是word或者dword变量,需调换byte次序
2013-7-24 14:45
0
雪    币: 1501
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
摘自KSSD
大端、小端:
    大小端是指CPU存储数据的方式,比如一个0x01020304这个整数,在WIN、Linux下在内存中的布局如下
   [01][02][03][04] 注意左边是高地址,而右边是低地址
   在UNIX下则是
   [04][03][02][01] 注意左边是高地址,而右边是低地址
网络字节序:
   其实是指网络传输的字节序,这个字节序可能是大端序或者小端序,这取决于软件开始时通讯双方的协议规定。
   平时,如果有人说的网络字节序,那么大家就认为是大端序。

主机字节序:
   是指主机处理数据时采用的字节序,虽然主机字节序和网络字节序是相对的概念,但是我们说主机字节序的时候,并不默认是之大端或者小端,而是结合机型来确定大小端的。
2013-7-24 14:56
0
游客
登录 | 注册 方可回帖
返回
//