客戶遇到一個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協議決定的。