我使用原始套接字创建了一些UDP数据包,然后将它们发送到UDP服务器
我注意到当我输入错误的UDP校验和数字时,UDP服务器不会接受它,但是如果我将全0放在校验和中,则UDP服务器会接受它吗?
为什么?
另外,我注意到了一个肺炎:校验和卸载我检查了我的机器:
[root@kit temp]# ethtool --show-offload eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on
看来我的机器上有校验和卸载。如果我随机设置了TCP校验和值,如果启用了校验和卸载,NIC可以将其修改为正确的值吗?
最后,例如,数据包在传输时可能会被修改,例如TTL会减少跳数NAT可能还会修改源IP地址,那么校验和就会过时,在这种情况下,校验和如何工作?路由器会相应地修改校验和吗?还是目标计算机可以智能地检测到这些并相应地计算校验和?
UDP校验和对于IPv4是可选的。将校验和设置为0表示未使用它。有关详细信息,请参见Wikipedia文章。
可以将TCP,UDP和IP校验和计算卸载到NIC。NIC将在硬件中计算校验和。这比用软件来做要快得多。维基百科再次知道一切。
路由器递减TTL或以其他方式更改数据包后(对于所有更新数据包的协议),路由器将重新计算校验和。这必须在路由器上完成。目标计算机无法使用具有无效校验和的数据包,并以某种方式确定它是在源计算机上启动时是正确的。目标只能拒绝校验和无效的数据包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句