問題:發送端將3個大小爲1460的TCP報文用tcpreplay回放到捕包機,其ipid均不相同,但是捕包機只收到了一個爲4k+的大包。
原因:捕包機使用tcpdump捕包,需要經過網卡驅動,Linux2.6.29以上內核支持gro機制,網卡開啓了gro後,會將同一tcp流的順序報文合併爲一個大包以提高處理效率。
解決方法:使用命令 ethtool -K eth0 gro off 關閉該網卡的gro功能即可。
TSO和GRO是網卡分別對TCP發、收進行的優化,都會影響wrieshark、tcpdump之類的捕包軟件。參見我的前篇博文《winpcap/wireshark在win7 64位系統下IP頭部結構長度爲0的bug 》
參考: