在网络分析领域,偏移 量是一个频繁出现的术语,如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所示。

IP分段偏移量.gif (19.82 KB)

2006-8-11 15:32

(图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标识都是相同的。

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。

TCP偏移量.gif (15.68 KB)

2006-8-11 15:34

(图2 无选项情况下的TCP

偏移 量)

3 位

偏移 量

有些报头的某些字段,每位都表示不同的含义,而一个数据包可同时有1位或多位置1,比如TCP标志字段。简单的说位

偏移 量是指字段中某一位在该字段中的位置。我们来看看TCP的标志字段。如图3所示。

tcp-同步位.gif (4.54 KB)

2006-8-11 15:34

(图3 TCP标志字段)

图3中高亮显示的是同步位置1时的情况,也就是说该数据包是一个TCP同步数据包。TCP同步数据包的值是TCP标志位的值是10(二进制)或02(16进制)或2(10进制,8进制)。同时我们从图中可知,该字段中的每一位都有不同的掩码,我们在特定分析需要设定位

偏移 的过滤器时,即可通过设定该掩码的值实现过滤。如只希望捕获网络中的同步数据包,我们只需设定如图4所示的过滤器并根据该过滤器捕获数据即可。

位偏移2.gif (9.29 KB)

2006-8-11 15:34

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

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

TCP偏移量.gif (15.68 KB)

2006-8-11 15:37

(图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。 注意: 基于数据包的偏移 ,只匹配了偏移 值,没有进行协议匹配,可能出现误差。所以,在精确度较高,且分析软件支持的情况下,应尽量使用基于协议偏移 的偏移 量计算方法,这样的分析结果可能更准确。