Intranet与Internet应用程序中的校验和验证

时间:2011-03-30 17:35:59

标签: network-programming tcp

在查看Wireshark中的消息时,我注意到Checksum验证始终处于禁用状态。它是一个过时的要求,还是仅适用于公司网络防火墙之外的互联网流量?

此外,有人可以建议如何设置(例如,无论是从应用程序或网卡设置等)。

PS:这个问题可能没有实际意义。我要求这填补我糟糕的网络编程技能中的巨大漏洞。我听说校验和验证是tcp通信的一个主要瓶颈,但是对于我看到的所有消息都禁用它会感到惊讶

1 个答案:

答案 0 :(得分:2)

Wireshark FAQ已回答了这个问题。

结果是校验和通常由网卡计算,Wireshark经常在数据包到达实际计算的硬件之前拦截数据包。对这些数据包启用验证会导致大量错误,因此默认情况下它们会禁用验证。可通过链接获取更多信息。

编辑:为了解决下面的水果评论,我截了几个TCP数据包进行比较。第一个是没有验证的TCP数据包:

Validation disabled

您可以看到那里存在非零校验和,因此可能看起来Wireshark(或其他一些预硬件应用程序)已经为您完成了校验和。但是,当我们为同一个数据包启用验证时..

enter image description here

现在我们可以看到这个校验和首先是无效的。我找不到这个信息的来源,但我认为有力的证据表明Wireshark并没有为我们填充这个领域;这样做无论如何都会违背Wireshark的本性。相反,我希望这只是数据包中的一个未初始化的字段 - 将字段设置为零需要做更多的工作而不是省略设置它。

值得注意的是,随着时间的推移,越来越多的网络堆栈会将校验和卸载到硬件上,因此来自本地计算机的有效校验和的情况会越来越少。