如何模拟IP分片到达主机的先后顺序

客户遇到一个IP分片被丢弃的问题,觉得如果IP分片的第二个分片先于第一个分
片到达,会被丢弃。 我认为不会出现这种情况。 我做了实验。 先在一台主机上建立了一个server,在一个固定端口上接收UDP数据。

在 Linux 上这样发送数据:

nping -c1 --udp -g 9 -p 6776 172.25.52.103 --data-length 1800

该命令发送一个长度为1800字节有UDP数据报,迫使IP层分片。 同时在wireshark里抓包,能看到两个IP分片。 wireshark默认会把IP组装起来,
如果想看得清楚些,可以关闭这个功能。(在wireshark 的 Edit 菜单里选择Preferences, 展开Protocols section, 选择 IP,然后把“Reassemble fragmented IP datagrams” 旁边的钩去掉。)

用wireshark 菜单的File|export|save selected , 把这两个IP分片分别保存成
两个文件u1.pcap 和 u2.pcap。 然后用 tcpreplay 重新发给UDP server目标机。

tcpreplay --loop=1 --intf1=eth0  u1.pcap
tcpreplay --loop=1 --intf1=eth0  u2.pcap

如果交换 u1.pcap 和 u2.pcap 的位置,就模拟了第二个分片先到,第一个分片后到:

tcpreplay --loop=1 --intf1=eth0  u2.pcap
tcpreplay --loop=1 --intf1=eth0  u1.pcap

当然,事实证明即使 IP 分片到达是乱序的,接收方也不会把 IP 分片丢弃,这是IP协议决定的。

你可能感兴趣的:(网络)