查看: 42791|回复: 40

原创:偏移量详解!

[复制链接]
发表于 2006-8-11 15:32:36 | 显示全部楼层 |阅读模式
下载PDF完整版本  


关键字:偏移量 网络 分析 科来 CSNA 

在网络分析领域,偏移量是一个频繁出现的术语,如IP分段偏移量、TCP偏移量、位偏移,基于数据包偏移、基于协议偏移等等。那它们到底是什么含义,有什么区别呢?带着这些疑问,我查阅了一些TCP/IP书籍,并对其有了一定的了解。下面我就将我的个人理解与大家一起共同分享。欢迎拍砖啊! :)
1 IP分段偏移量
IP数据包在网络中进行传输,如果数据包的大小超过网络设备的MTU值,则需要进行分段传输。分段偏移量用来标识数据包在该数据流中的位置,也可以理解为使用同一个IP标识发送多个数据包时的顺序号。发送主机给第一个分段数据包的偏移量赋值为0,对于其后的分段,该偏移量的值是MTU值减去上一个IP报头的大小,所以我们也可以说IP分段偏移量是指数据包中某个分段相对与第一分段在数据包中的位置。
下面我们举一个实例。我在我的机器(192.168.0.90)的CMD窗口中执行“ping 192.168.0.1 -l 3000 -n 1”命令,同时在科来网络分析系统中设定一个过滤器,只捕获从192.168.0.90到192.168.0.1的单方向数据,由于3000远远大于了以太网的MTU值,所以它会被分段传输。这时我们来看捕获到的数据包,如图1所示。

  
(图1  IP分段偏移量)

从图1可知中,共捕获到了三个数据包,第一个协议是ICMP,后面两个是IP Fragment,前面两个数据包的大小是1518字节,第三个是86字节。第一个数据包的IP偏移量是0,第二个是185,第三个是370。
这三个数据包的详细情况如下表:
数据包编号        IP分段标志        IP偏移量        传输数据
1        更多分段置1        0  0字节        1518-14-20-8-4=1472
2        更多分段置1        185 1480字节        1518-14-20-4=1480
3        更多分段置0        370 2960字节         86-14-20-4=48
上表中,第1个数据包中,多了一个ICMP报头,所以在计算传输的数据时,多减了8个字节的ICMP报头,而后面的两个数据包由于存在ICMP的报头开销,所以不需要减去8字节的ICMP报头。将传输的数据加起来,1472+1480+48=3000,与测试的数据完全吻合。
注意:如果有更多的分段,按照此规则依次累加即可,同时所有分段数据包的IP标识都是相同的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2006-8-11 15:34:40 | 显示全部楼层
2 TCP偏移量
TCP偏移量出现在TCP报头里,它主要是指TCP报头的长度。TCP偏移量字段的长度是1字节,以32比特(4个字节)字长表示TCP报头的长度。不包含选项的TCP报头长为20个字节,用TCP偏移量来表示就是5(5X4=20个字节),如图2所示。如果TCP报头中有选项,TCP的报头长度则会按照4的倍数进行累加,如有一个选项时,TCP报头长度是24字节,这时TCP偏移量是6,有两个选项时,TCP报头长度是28字节,这时TCP偏移量是7。
  


(图2  无选项情况下的TCP偏移量)

3 位偏移量
有些报头的某些字段,每位都表示不同的含义,而一个数据包可同时有1位或多位置1,比如TCP标志字段。简单的说位偏移量是指字段中某一位在该字段中的位置。我们来看看TCP的标志字段。如图3所示。
  

(图3  TCP标志字段)

图3中高亮显示的是同步位置1时的情况,也就是说该数据包是一个TCP同步数据包。TCP同步数据包的值是TCP标志位的值是10(二进制)或02(16进制)或2(10进制,8进制)。同时我们从图中可知,该字段中的每一位都有不同的掩码,我们在特定分析需要设定位偏移的过滤器时,即可通过设定该掩码的值实现过滤。如只希望捕获网络中的同步数据包,我们只需设定如图4所示的过滤器并根据该过滤器捕获数据即可。
  

(图4 设定TCP同步数据包的过滤器)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2006-8-11 15:37:27 | 显示全部楼层
4 基于数据包偏移和基于协议偏移
偏移量的计算一般按两种类型:基于数据包类型和基于协议偏移。
4.1 基于数据包偏移
基于数据包偏移的偏移量算法,是从以太网报头作为基准点,向后开始计算特定字段的偏移量,这里我仍然以TCP标志字段为例,说明基于数据包偏移的偏移量计算方法。图5所示的是一个TCP确认数据包,我们借助图5查看TCP标志位的偏移量。


(图5  按数据包类型)

由于是以以太网报头作基准,所以这个数据包中的TCP标志位偏移量应该是以下报头的相加的总和:
Ethernet II报头14,IP报头20,TCP源端口2,TCP目标端口2,TCP序列号4,TCP确认号4,TCP偏移量1。
所以,在基于数据包偏移的情况下,该数据包的TCP标志字段偏移量是14+20+2+2+4+4+1=47。
4.2 基于协议偏移
基于协议偏移的偏移量算法,是以某种协议为基准点,向后开始计算特定字段的偏移量,而并非从以太网报头开始。我们还是以图5中TCP标志位偏移量来举例。
在这种情况下,这个数据包如果按照TCP协议进行偏移,那么TCP标志位的偏移量应该是以下字段的相加总和:
TCP源端口2,TCP目标端口2,TCP序列号4,TCP确认号4,TCP偏移量1。
所以,TCP标志字段在这个数据包的偏移量是2+2+4+4+1=13。
注意:
基于数据包的偏移,只匹配了偏移值,没有进行协议匹配,可能出现误差。所以,在精确度较高,且分析软件支持的情况下,应尽量使用基于协议偏移的偏移量计算方法,这样的分析结果可能更准确。




CSNA网络分析论坛
菜鸟人飞
2006-8-11

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

发表于 2006-8-11 22:28:51 | 显示全部楼层
感谢提供~~~!!!
回复

使用道具 举报

发表于 2006-8-14 21:08:35 | 显示全部楼层
好资料,不的不顶下!
回复

使用道具 举报

发表于 2006-12-21 07:42:20 | 显示全部楼层
有点小晕...太笨了..呜呜
回复

使用道具 举报

发表于 2006-12-21 15:34:53 | 显示全部楼层
天啊今天又看了一下受不了了有点晕但感觉里面又是协议里面的东东。。;..还是自己协议看的不够深
回复

使用道具 举报

发表于 2007-1-20 15:45:11 | 显示全部楼层
谢谢楼主!!!辛苦了!!!
回复

使用道具 举报

发表于 2007-1-20 20:24:47 | 显示全部楼层
  得拿个计算机来,对照着协议算 = =

不错不错
回复

使用道具 举报

发表于 2007-1-21 00:04:47 | 显示全部楼层
不顶不好意思啊~~~
回复

使用道具 举报

发表于 2007-1-21 01:46:30 | 显示全部楼层
学习了.大家多研究研究就明白了.这个说明能够帮助大家捕获精确的需要的包.
回复

使用道具 举报

发表于 2007-1-21 19:32:54 | 显示全部楼层
支持lz!在这里找到了很多实用的教程和思路!
回复

使用道具 举报

发表于 2007-10-28 21:10:22 | 显示全部楼层
我想问下1518-14-20-8-4=1472 中的 

20 ip报固定首部
8 icmp头
14 Ethernet V2帧 目的地址+源地址+长度
4     Ethernet  V2帧检验
是我想的这样吗,但是这个不是IP包是网间层的吗,怎么也包括网络接口层的帧呢,我不太懂,希望版主回复
回复

使用道具 举报

 楼主| 发表于 2007-10-30 10:17:24 | 显示全部楼层
原帖由 luke1013 于 2007-10-28 21:10 发表
我想问下1518-14-20-8-4=1472 中的 

20 ip报固定首部
8 icmp头
14 Ethernet V2帧 目的地址+源地址+长度
4     Ethernet  V2帧检验
是我想的这样吗,但是这个不是IP包是网间层的吗,怎么也包括网络接 ...

1.luke1013的理解完全正确。
2.数据包在发送之前,会自上而下添加报头,所以网络层的数据包,会添加数据链路层的报头,再经过物理层发送出去。建议查看TCP/IP详解。
回复

使用道具 举报

发表于 2007-11-22 10:07:33 | 显示全部楼层
学习了,呵呵
回复

使用道具 举报

发表于 2008-1-8 23:16:48 | 显示全部楼层

为何图1中的IP分段偏移量是185

http://blog.chinaunix.net/u1/45394/showart_435856.html看到:"段以8个字节为单位,8位字节数称为段块数(NFB)".第一个包传输了1472字节的数据,1472/8=184,即第一个包有184个BLOCK (我猜NFB中的B是BLOCK的意思),那第二个包的第一个段就是第185个BLOCK,这个185就是偏移量,同理第三个包的偏移量是184+1480/8+1=370.我的理解是否正确? 下午看了一个小时才好象明白了为什么是185,好几次都想算了不看了,学习真的很难.
回复

使用道具 举报

发表于 2008-1-9 09:59:50 | 显示全部楼层
学习了,呵呵
回复

使用道具 举报

发表于 2009-1-23 18:43:01 | 显示全部楼层
片偏移的计算在tcpip卷里看过,但是印象不深。今天亲自算了一下才理解了。

感谢菜鸟人飞和oldjiang
回复

使用道具 举报

发表于 2009-6-4 14:27:36 | 显示全部楼层
学习了,谢谢提供!!
回复

使用道具 举报

发表于 2009-6-12 09:46:08 | 显示全部楼层
太好了,又学习了不少东西,在网络分析中它们是太有用了
回复

使用道具 举报

发表于 2009-7-29 09:58:24 | 显示全部楼层
好资料,不的不顶下!
回复

使用道具 举报

发表于 2009-8-12 17:13:42 | 显示全部楼层
好文章啊!学习中!!!
回复

使用道具 举报

发表于 2009-10-31 17:31:47 | 显示全部楼层
学习中,一直也搞不懂这个概念,现在还要多看看
回复

使用道具 举报

发表于 2009-11-10 11:40:25 | 显示全部楼层
好帖子  不得不顶!!!!!!!!!!!!
回复

使用道具 举报

发表于 2009-11-11 00:06:06 | 显示全部楼层
支持lz!在这里找到了很多实用的教程和思路!
回复

使用道具 举报

发表于 2009-11-11 16:35:46 | 显示全部楼层
浅显易懂  一直没看明白的  偏移量  现在好像懂了
回复

使用道具 举报

发表于 2009-12-8 15:46:05 | 显示全部楼层
大家都说不错,我还没看,但是先谢谢了
回复

使用道具 举报

发表于 2009-12-11 09:34:25 | 显示全部楼层
非常感谢,学习中!!!!!!!!!!!!!!!!!!!!1
回复

使用道具 举报

发表于 2010-3-12 14:33:45 | 显示全部楼层
找这个东西找了很久了,呵呵!希望能看明白
回复

使用道具 举报

发表于 2010-3-12 14:35:23 | 显示全部楼层
不知道一般程序数据包的偏移量怎么分析
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表