如何模擬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協議決定的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章