2011-07-07 42 views
1

(使用Linux)如何使用TCP校驗和與RAW插槽

創建使用raw socketsTCP包卸載 - 事實證明,計算校驗是我的瓶頸,在高性能網絡。由於NIC將支持校驗和卸載,並且ethtool也表示它已啓用,所以我希望可以使用校驗和卸載。

但是,當我使用原始套接字時,似乎不計算校驗和。有沒有辦法使用原始套接字啓用tcp校驗和卸載?

編輯:

其實我的機器的行爲/ NIC(Thinkpad的X201)似乎並沒有太邏輯:發送含有正常的TCP套接字數據包時,所有的校驗和錯誤,環回接口上以及機器之間。有趣的是,另一臺機器悄悄地傳遞數據包呢?

編輯2:好吧,現在我只是看着在錯誤的機器上的數據包,卸載工程。但是當我離開tcp_checksum字段0時,它沒有被填入,它只是保持爲0.

回答

0

我在這裏有同樣的問題:在原始套接字中發送TCP或UDP數據包,但無法利用其檢查的NIC正在下載。希望有一個setsockopt()或ioctl()函數類型,可以在原始套接字上啓用校驗卸載。

爲什麼wireshark顯示數據包有校驗錯誤,但目的主機無論如何都接受所有數據包,原因是wireshark(通過winpcap等,如果在Windows上)在數據包從OS到達NIC之前捕獲數據包。數據包沒有由操作系統或應用程序正確填充校驗和字段---這是NIC上的校驗和卸載功能。

問題是,如何啓用NIC在原始套接字上執行校驗和卸載。