是什么原因导致无法为UDP数据报计算IP头校验和?

Joh*_*ohn 4 .net c# windows-xp udpclient wireshark

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

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

我可以用两个网卡ping我的设备,所以我认为必须有一些我的C#代码做错了,但我不确定是什么.在Windows XP上使用UdpClient导致这种情况有什么问题吗?

All*_*nek 7

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

在此输入图像描述 在此输入图像描述

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

编辑:我刚刚意识到你在谈论IP头,而不是UPD头.这适用于两者,除了IP头校验和不是可选的(并且将由您的NIC计算).