IPv4报文格式
配置AR1和AR2
<Huawei>sys
[Huawei]sys AR1
[AR1]int gi 0/0/0
[AR1-GigabitEthernet0/0/0]ip add 192.168.1.1 24
[AR1-GigabitEthernet0/0/0]
<Huawei>sys
[Huawei]sys AR2
[AR2]int gi 0/0/0
[AR2-GigabitEthernet0/0/0]ip add 192.168.1.2 24
[AR2-GigabitEthernet0/0/0]
抓包看观察各个字段
MTU值的含义
MTU(Maximum Transmission Unit)是指数据链路层中的最大传输单元,RFC 标准定义以太网的默认 MTU 值为 1500
如果数据超过MTU大小且部分片报文就发不出去
2.1我们发送一个用户数据为1472字节【因为加上IP头部(20字节)和ICMP头部(8字节)正好1500字节】的数据包且不分片,观察下列结果是可以通信的
<AR1>ping -f -s 1472 192.168.1.2 //-f表示不分片,-s指定用户数据的大小
PING 192.168.1.2: 1472 data bytes, press CTRL_C to break
Reply from 192.168.1.2: bytes=1472 Sequence=1 ttl=255 time=50 ms
Reply from 192.168.1.2: bytes=1472 Sequence=2 ttl=255 time=30 ms
Reply from 192.168.1.2: bytes=1472 Sequence=3 ttl=255 time=20 ms
Reply from 192.168.1.2: bytes=1472 Sequence=4 ttl=255 time=10 ms
Reply from 192.168.1.2: bytes=1472 Sequence=5 ttl=255 time=10 ms
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 10/24/50 ms
当MTU<=1500,数据包可以顺利发出,且可以通信
2.2我们再发送一个用户数据为1473字节【因为加上IP头部(20字节)和ICMP头部(8字节)超过了1500字节】的数据包且不分片,观察下列结果是发送不出去的
<AR1>ping -f -s 1473 192.168.1.2
PING 192.168.1.2: 1473 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
Request time out
Request time out
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss
抓包后连报文都没有,而且超时了
当MTU<=1500时,数据包无法发出
分片机制
我们通过传递3500字节的报文,了解分片的机制
我们可以猜测一下,由于MTU限制,一个IP报文最大为1500字节,预估需要分3片
<AR1>ping -s 3500 192.168.1.2
PING 192.168.1.2: 3500 data bytes, press CTRL_C to break
Reply from 192.168.1.2: bytes=3500 Sequence=1 ttl=255 time=40 ms
Reply from 192.168.1.2: bytes=3500 Sequence=2 ttl=255 time=40 ms
Reply from 192.168.1.2: bytes=3500 Sequence=3 ttl=255 time=40 ms
Reply from 192.168.1.2: bytes=3500 Sequence=4 ttl=255 time=40 ms
Reply from 192.168.1.2: bytes=3500 Sequence=5 ttl=255 time=40 ms
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 40/40/40 ms
观察第一个数据包
观察第二个数据包
我们看到第二个数据包和第一个类似,只是偏移量有变化,看下图表示偏移量
这个小三角就表示1480,第一个数据包的数据刚好发到1480字节,第二个数据包从1480之后再发(第三个数据包的2960同理,只是又加上了第二个数据包的1480的长度)
观察第三个数据包
这就是整个分片机制与重组