我使用原始套接字创建一些 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 地址,然后校验和将过时,在这些情况下,校验和如何工作?路由器会相应地修改校验和吗?或者目标机器可以智能地检测到这些并相应地计算校验和?