实验环境:GNS3 0.7.4+WireShark 1.4.6
实验拓扑及抓包下载: http://down.51cto.com/data/208832
R1配置:
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int s0/0
R1(config-if)#ip add 12.1.1.1 255.255.255.0
R1(config-if)#no shut
R1(config-if)#exit
R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
R1(config)#end
R2配置:
R2>en
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int s0/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#int s0/1
R2(config-if)#ip add 23.1.1.2 255.255.255.0
R2(config-if)#no shut
R2(config)#end
R2上修改默认MTU大小,注意是R1-->R3的出接口,即s0/1
R2(config)#int s0/1
R2(config-if)#ip mtu 200
R2(config-if)#end
R2#
R3配置:
R3>en
R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#int s0/1
R3(config-if)#ip add 23.1.1.3 255.255.255.0
R3(config-if)#no shut
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
R3(config)#end
在R2---->R3的线路上启动抓包
在R1上Ping 路由器R3的s0/1接口 23.1.1.3
命令如下:
R1#ping ip
Target IP address: 23.1.1.3
Repeat count [5]: 1
Datagram size [100]: 800
Timeout in seconds [2]:
Extended commands [n]:
Sweep range of sizes [n]:
Type escape sequence to abort.
Sending 1, 800-byte ICMP Echos to 23.1.1.3, timeout is 2 seconds:
!
Success rate is 100 percent (1/1), round-trip min/avg/max = 124/124/124 ms
R1#
使用wireshark软件捕获的分片包。。。
由捕获的包分析可知,数据包被分成了5片,而且可看到片偏移字段分别为:0,176,352,528;704这里要注意了,在路由器里设置的命令,ip mtu 200设定的分片大小应该是200byte,为何到了这里改变了呢!?原因在于,IP协议里规定,在分片时,除最后一片外,其他每一片的数据部分(除了IP首部的其它部分)必须是8字节的整数倍。如果是这样,最大的数据包长度就是(200-20)/8取整=22;这样,22*8=176这个就是片偏移。因此可得到每个数据包的偏移字段分别为:0 176 176+176 176+176+176 176+176+176+176.
可看到发送的总数据包是780byte(不包含IP首部).
由些能够得到一个结论,PING命令中的数据包大小,是包括IP首部在内的总长度。
(也可查看数据包中DF位的置位情况,请自行查看。)