C# 什么会导致UDP数据报的IP报头校验和无法计算?

C# 什么会导致UDP数据报的IP报头校验和无法计算?,c#,.net,windows-xp,wireshark,udpclient,C#,.net,Windows Xp,Wireshark,Udpclient,我正在尝试将UDP数据报从Windows XP上的UdpClient发送到设备,但它没有响应。当我查看Wireshark中的流量时,我发现我的出站数据包是坏的,因为它们的所有IP头校验和都是0x0000 这台机器有两张网卡,所以我开始使用另一张网卡,并开始遇到同样的问题 我可以用两个网卡ping我的设备,所以我想一定是我的C#代码出错了,但我不确定是什么原因。在Windows XP上的.NET 4中使用UdpClient是否有可能导致此问题?看起来像是驱动程序问题。尝试在驱动程序属性中关闭校验和

我正在尝试将UDP数据报从Windows XP上的UdpClient发送到设备,但它没有响应。当我查看Wireshark中的流量时,我发现我的出站数据包是坏的,因为它们的所有IP头校验和都是0x0000

这台机器有两张网卡,所以我开始使用另一张网卡,并开始遇到同样的问题


我可以用两个网卡ping我的设备,所以我想一定是我的C#代码出错了,但我不确定是什么原因。在Windows XP上的.NET 4中使用UdpClient是否有可能导致此问题?

看起来像是驱动程序问题。尝试在驱动程序属性中关闭校验和卸载

或者,如果您在同一台机器上运行wireshark,可能是校验和卸载工作正常,wireshark没有报告校验和,因为它是在wireshark看到数据包后计算的

要确认,请在单独的框中运行wireshark以确认校验和为零或不为零


如果校验和毕竟是正常的,那么很可能是防火墙问题。确保本地计算机上有允许返回流量的防火墙规则。

因为Windows正在执行校验和计算的硬件卸载,所以您看到一个空校验和。它将由网络接口卡(NIC)处理器执行。使用数据包嗅探器捕获数据包将在NIC处理数据包之前显示该数据包。您可以从设备管理器下的设备属性页关闭卸载:

在任何情况下,UDP协议无效,零是校验和的有效值。这是为了允许处理能力低的设备跳过校验和计算。校验和通常由处理数据包的第一个网络节点(例如路由器)填写。即使它仍然为零,您的设备仍应接受该数据包,因为它是有效的


编辑:我刚刚意识到你说的是IP报头,而不是UPD报头。这两种情况都适用,但IP报头校验和不是可选的(将由您的NIC计算)。

我想我会选择有图片的答案。如果禁用
TCP校验和卸载
UDP校验和卸载
,Wireshark将显示校验和验证失败。在上图的
Advanced
选项卡中仅禁用了
IPv4校验和卸载后,它对我有效。我使用的是Windows 10 build 18363.1139。@约翰,谢谢,哪一个是正确的-防火墙还是驱动程序问题?