Я использовал raw socket для создания некоторых пакетов 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, сетевой адаптер может изменить его на правильное значение, если разгрузка контрольной суммы включена?
Наконец, пакеты могут модифицироваться, когда они находятся в передаче, например, TTL будет уменьшаться на количество прыжков. NAT может также изменять исходные IP-адреса, тогда контрольная сумма будет устаревшей, в этих случаях, как работает контрольная сумма? Маршрутизатор изменит контрольную сумму соответственно? Или конечный компьютер может их обнаружить и рассчитать контрольную сумму соответственно?