基于Ping命令的IP分片数据分析 (IP4)

基于Ping命令的IP分片数据分析 (IP4)

 

概述: 为了让分片的数据变的清晰,本次测试只使用了ICMP的Request和reply,也即通过Ping命令对路由发送数据包。


Ping 192.168.1.1
说明:Ping默认以32bit字节的数据包发送请求,所以一般是不分片的,这里首先大概熟悉一下ip数据包和相关环境。

 

分析:

1    默认ping是4次请求的,所以通过上图可以看到请求、回复成对出现的8个数据包
2    首先看第一个数据包的数据如下图所示,可以看到Flags标志的“More fragments”位为0表示这是最后一个分片了,也就是说没有分片,所以Fragment offset自然也是0.
 
3    再来看看长度关系:
3.1    Total Length=60表示整个IP数据包长度是60字节
3.2    Header length=20表示IP头长度是20字节(也即IHL的值为5的通用ip头长度)
3.3    ICMP的数据长度是32字节
3.4    ICMP头的长度固定为8字节
3.5    60=20+32+8刚好成立


Ping 192.168.1.1 –l 2000
说明:一般来说MTU为1500,所以要让ip进行分片传送,数据包的长度必须 > 1500-20,这里的20是ip头的最小长度。使用长度超过1480的数据包来Ping都是会拒绝的,至于原因,本人也不清楚,有兴趣的可以自己研究一下,知道的也可以顺道告知一声,不胜感激。

分析:


1    可以看到现在的数据包和刚才不一样了,每个ICMP请求之前都先有一个IP包。
2    首先来看看第一个数据包(IP包),MF标志=1说明后面还有分片,offset=0表明这是第一个分片,分片id为0x2e6b。ip包长度为1500,ip头长度是20
 
3    再来看看第二个数据包(ICMP包),offset=1480表示这个数据包在分片之前的偏移,MF=0说明这是最后一个分片,id同样=0x2e6b表明和第一个数据包在分片之前属于同一个数据包。Ip包长度为548,ip头长度为20 (wireshark的Data部分在ip的最后一个分片中会重组所有IP分片,然后显示所有数据长度,所以在这里不以这个数字来分析)
 
4    好了,现在来看看各个长度和偏移
4.1    第一个数据包的IP->Total Length为1500
4.2    第一个数据包的IP->Header length为20
4.3    第二个数据包的IP->Total Length为548
4.4    第二个数据包的IP->Header length为20
4.5    第二个数据包的ICMP头长度为8
4.6    我们发送的数据包长度为2000
4.7    2000=1500-20+548-20-8正好成立


Ping 192.168.1.1 –l 4000
说明:增加一点数据包的长度,主要是和Ping 2000的时候作比较,了解ICMP协议头出现的位置。
分析:可以看到是2个IP然后一个ICMP
 
1    我们来看看第三个数据包(也即第一个ICMP包)
 
2    可以看到偏移是2960,MF=0,这是最后一个分片。也就是说IP分片的最后一个数据包才包含ip上层协议的协议头信息。

你可能感兴趣的:(Tcp/IP)