转载自 http://www.csna.cn/network-analyst-887-1-2.html作者菜鸟飞人。
用了一个半小时,好好的研究了这篇文章,感触很深。对ip分段以及tcp偏移量有些掌握,但如何在科来网络分析系统中实现对包偏移以及协议偏移,仍有疑问 。自以为tcp/ip详解卷一读了n遍了,觉得对tcp/ip有了很深的了解了。一到了实战中,就一片迷茫,故有必要继续深入研读tcp/ip详解。觉得此文不错,值得一读,故把其转到51cto共享,希望原作者不要介意,嘻嘻!一下是原文:
       在网络分析领域,偏移量是一个频繁出现的术语,如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所示。

attachimg.gif 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。
attachimg.gif TCP偏移量.gif
下载 (15.68 KB)
2006-8-11 15:34



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

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


(图3  TCP标志字段)

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


(图4 设定TCP同步数据包的过滤器)
基于数据包偏移和基于协议偏移
偏移量的计算一般按两种类型:基于数据包类型和基于协议偏移。
4.1 基于数据包偏移
基于数据包偏移的偏移量算法,是从以太网报头作为基准点,向后开始计算特定字段的偏移量,这里我仍然以TCP标志字段为例,说明基于数据包偏移的偏移量计算方法。图5所示的是一个TCP确认数据包,我们借助图5查看TCP标志位的偏移量。
attachimg.gif 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。
注意:
基于数据包的偏移,只匹配了偏移值,没有进行协议匹配,可能出现误差。所以,在精确度较高,且分析软件支持的情况下,应尽量使用基于协议偏移的偏移量计算方法,这样的分析结果可能更准确。




CSNA网络分析论坛
菜鸟人飞