2

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

1 ответ1

3

Контрольная сумма UDP является необязательной для IPv4. Установка контрольной суммы в 0 означает, что она не используется. См. Статью Wikipedia для деталей.

Расчет контрольной суммы TCP, UDP и IP может быть выгружен на NIC. NIC рассчитает контрольную сумму в аппаратном обеспечении. Это намного быстрее, чем в программном обеспечении. Опять Википедия знает все.

Контрольная сумма пересчитывается маршрутизатором после того, как он уменьшает TTL или иным образом изменяет пакет (для всех протоколов, которые обновляют пакет). Это должно быть сделано на маршрутизаторе. Машина назначения не может использовать пакет с неверной контрольной суммой и каким-то образом определить, что он был правильным, когда он запускался в источнике. Адресат может отклонять только пакеты с неверной контрольной суммой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .