1

Я хочу написать программу для генерации контрольной суммы UDP.

чтобы проверить мою программу, мне нужны реальные данные. Я отправляю пакет udp с одной машины на другую, пакет может быть корректно принят сервером udp. Я захватил пакет, используя дамп tcp на обеих машинах

с клиентского компьютера udp байты пакета udp и псевдо-IPV4 заголовка (в формате HEX):

pseudo header
src dst ip:    8a60c948 8a60c96d
proto_num len: 0011 0016

UDP header:    83d87d000016 a79e 
      data:    49276d206e6f 742068657265210a

на машине сервера udp (получатель):

pseudo header
src dst ip:        8a60c948 8a60c96d
proto_num and len: 0011 0016

UDP header:        83d87d000016 c2c5 
      data:        49276d206e6f 742068657265210a

контрольная сумма должна быть рассчитана по

8a60c9488a60c96d0011001683d87d000016000049276d206e6f742068657265210a

где поле контрольной суммы заменяется на 0x0000

но мы видим, что контрольная сумма изменена с 0xa79e на клиенте до 0xc2c5 на стороне сервера. почему это изменение происходит? и какая правильная контрольная сумма заголовка udp? Спасибо!

3 ответа3

2

Некоторые сетевые интерфейсные карты (NIC) "помогут" вам, изменив для вас контрольную сумму. Это называется "Разгрузка контрольной суммы". Поиск по этому термину поможет.

0

Попробуйте использовать "tcpdump -K" или аналогичный для вашей man-страницы tcpdump:

-K            Don't attempt to verify IP, TCP, or UDP checksums.  This is use-
              ful for interfaces that perform some or all  of  those  checksum
              calculation  in  hardware; otherwise, all outgoing TCP checksums
              will be flagged as bad.
0

Я получаю контрольную сумму udp в машине отправителя и получателя с netfilter в layer3. В стороне отправителя контрольная сумма udp не включает данные полезной нагрузки. В боковом приемнике контрольная сумма udp включает данные полезной нагрузки. Это причина, почему несогласованность контрольной суммы UDP.

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