在网络层IP包分片的过程中,遇到了大麻烦!
- 主机A:
IP地址:192.168.0.10/24
MAC地址:02:00:00:00:00:10
- 主机B:
IP地址:192.168.0.20/24
MAC地址:02:00:00:00:00:20
MTU:1500
第一种情况:
主机A给主机B发送ICMPv4 Echo Request报文,ICMPv4 payload长度为1472,主机B回复了ICMPv Echo Response。通信过程见下图:
- ICMPv4 Echo Request
由于ICMPv4 Echo Request报文的payload(1472) + icmp header(8) + ip header(20),正好等于主机B的MTU(1500),所以主机B接收时不需要分片重组,回复ICMPv4 Echo Response时也不需要分片发送。
- ICMPv4 Echo Response
第二种情况:
如果现在主机A给主机B发送的ICMPv4 Echo Request报文的payload为1473呢?
由于报文的二层数据为1501,大于主机B的MTU,所以主机B接收时要分片后重组,然后回复Response时,也要分成两个IP包发送,前一个分片包的IP payload为1480,后一个分片包的IP payload为1。但事实是这样吗?
- ICMPv4 Echo Request
那主机B给主机A回复的报文呢?只有一条!
很明显,主机B只发送了第二个分片包给主机A!那第一个IP分片包去哪了呢?里面的1480个数据呢?
第三种情况:
如果我在第二种情况中,让主机A再发一次ICMPv4 Echo Request报文给主机B,消失的它回来了!
所以,它为什么会消失???