2012-07-11 84 views
4

我想從Windows XP上的UdpClient發送UDP數據報到設備,但它沒有響應。當我查看Wireshark中的流量時,發現我的出站數據包不好,因爲它們的IP頭校驗和都是0x0000。什麼會導致UDP數據報不能計算IP頭校驗和?

機器有兩塊網卡,所以我開始使用另一塊網卡並開始出現同樣的問題。

我可以用兩個網卡ping我的設備就好,所以我認爲必須有一些我的C#代碼做錯了,但我不知道是什麼。有沒有什麼事情可以在Windows XP中使用UdpClient在.NET 4中做錯?

回答

7

由於Windows正在執行校驗和計算的硬件卸載,因此您會看到空的校驗和。它將由網絡接口​​卡(NIC)處理器執行。使用數據包嗅探器捕獲數據包將在數據包被NIC處理之前顯示數據包。您可以關閉設備管理器下,從設備的屬性頁卸載:

enter image description here enter image description here

在任何情況下,UDP協議defines the checksum as optional,零是校驗和的有效值。這樣可以讓處理能力較低的設備跳過校驗和計算。校驗和通常由處理分組的第一網絡節點(例如路由器)填充。即使它仍然爲零,您的設備仍然應該接受數據包,因爲它是有效的。

編輯:我剛剛意識到你說的是IP頭,而不是UPD頭。這適用於兩者,但IP標頭校驗和不是可選的(並且將由您的NIC計算)。

+1

我想我會選擇有圖片的答案。 – John 2012-07-11 18:23:44

4

看起來像一個驅動程序問題。嘗試關閉驅動程序屬性中的校驗和卸載。

或者,如果您在同一臺計算機上運行wireshark,則可能是校驗和卸載工作正常,並且Wireshark不報告校驗和,因爲它在Wireshark看到該數據包之後正在計算。

確認在單獨的盒子上運行wireshark以確認校驗和爲零或不爲零。

如果校驗和畢竟是確定的,那很可能是防火牆問題。確保本地計算機上有防火牆規則,允許返回流量。

+0

感謝您的回答。 Upvoted爲正確。 – John 2012-07-11 18:24:15

+0

@john,謝謝,哪一個是正確的 - 防火牆還是驅動程序問題? – Ben 2012-07-13 19:50:20

+0

卸載校驗和 – John 2014-01-11 19:44:45