Network programming intranet与internet应用程序中的校验和验证

Network programming intranet与internet应用程序中的校验和验证,network-programming,tcp,Network Programming,Tcp,在Wireshark中查看消息时,我注意到校验和验证始终处于禁用状态。这是一个过时的要求,还是只适用于公司网络防火墙之外的互联网流量 此外,是否有人可以建议如何设置它(例如,是否从应用程序或网卡设置等) 附言:这个问题可能没有实际意义。我这样做是为了填补我糟糕的网络编程技能中缺失的空白。我听说校验和验证是tcp通信的一个主要瓶颈,但我很惊讶,我看到的所有消息都禁用了校验和验证 结果是校验和通常由网卡计算,Wireshark通常在数据包到达进行实际计算的硬件之前拦截数据包。为这些数据包启用验证会导

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

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


附言:这个问题可能没有实际意义。我这样做是为了填补我糟糕的网络编程技能中缺失的空白。我听说校验和验证是tcp通信的一个主要瓶颈,但我很惊讶,我看到的所有消息都禁用了校验和验证

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

编辑:为了解决下面fruit的评论,我截屏了几个TCP数据包进行比较。第一个是未经验证的TCP数据包:

你可以看到那里有一个非零校验和,所以看起来Wireshark(或其他一些预硬件应用程序)已经为你做了校验和。但是,当我们打开同一数据包的验证时

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


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

据我现在了解,wireshark中显示的校验和验证是由wireshark应用程序完成的验证。tcp通信的网卡硬件上可能仍在进行校验和验证。如果我的理解不正确,请给出建议当您发送时,如果您的NIC支持校验和卸载,您的TCP/IP堆栈可能会决定不执行NIC以后可以执行的工作。@这是正确的。校验和总是会发生在TCP数据包上,但因为它是在硬件上完成的,Wireshark并不总是能够看到它。