最近用WireShark抓包時發現TCP數據包有報錯:IP Checksum Offload,經過查閱資料終於找到了原因
總結下來就是wireshark抓到的數據包提示Checksum錯誤,是因為它截獲到的是操作系統胡亂填充的checksum,而千兆網卡在開啟Checksum Offload之後,會把這些計算的工作交給網卡去做,網卡最後還是會計算出正確的checksum並且發出去的。
也就是以前校驗和是由系統協議棧來實現,現在交給網卡硬件去實現了,這樣可以節約不少CPU資源,微軟的測試表明它可以最多節約30%的CPU資源。IBM裡AIX的文檔則指出:對於PCI接口的千兆網卡來說還不如讓400Mhz以上的CPU來計算校驗和,而PCI-X的千兆網卡啟用此項後可以達到線路速度,從而節約CPU資源。
在windows系統下,我們可以打開設備管理器找到相應的網卡,在網卡的高級屬性裡將checksum offload屬性改為none。
linux下使用ethtool命令關閉checksum offload,具體命令如下:
#ethtool -K eth0 tx off rx off
這樣就修改為不由網卡硬件去完成檢驗和,而由系統來實現,也就不會報錯了。