WinSock2 в Windows XP и ICMPv6

Я пытаюсь программно отправить эхо-запросы ICMPv6 (ping6) с помощью WinSock2. контрольная сумма ICMPv6рассчитывается на основе всего пакета IPv6, который будет отправлен. По этой причине, насколько я понимаю, ОС (ядро?) должна вычислить его и записать в заголовок ICMPv6 при отправке пакета.

Это очень хорошо работает на SUSE Linux Enterprise Server 11, однако Windows XP, похоже, этого не делает. Он оставляет контрольную сумму той, которую я установил по умолчанию (ноль, я проанализировал это с помощью Wireshark), поэтому принимающая сторона отбросит ее и не ответит.

IPv6 правильно настроен на этом компьютере с WinXP. С помощью Wireshark я даже выяснил, что он корректно отвечает на пинги ICMPv6 с сервера SUSE Linux, отправленные с использованием того же самого кода. Так что не может быть, чтобы Windows XP не поддерживала ICMPv6. Однако интересно, работает ли WinSock2 под Windows XP.

WinSock2 API предоставляет протокол IPPROTO_ICMPV6, для которого я создаю необработанный сокет. Есть ли какой-либо специальный параметр сокета, который мне нужно установить для автоматического расчета контрольной суммы ICMPv6, или есть какие-то другие хитрости?


person pdinklag    schedule 02.03.2011    source источник


Ответы (1)


Наиболее вероятной причиной описываемого вами поведения является checksum offloading. Это означает, что вычисление контрольной суммы может быть делегировано сетевому оборудованию, поэтому перехваченный пакет не содержит правильного значения контрольной суммы. См. http://www.wireshark.org/docs/wsug_html_chunked/ChAdvChecksums.html или на http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_offload

person Andrey    schedule 10.03.2011
comment
Я без проблем могу ping6 тот же хост через командную строку. Я не понимаю, почему WinSock API должен использовать разгрузку контрольной суммы в Windows XP, а все остальное — нет. Это все еще возможно, потому что я сомневаюсь, что мое сетевое оборудование уже поддерживает вычисление контрольной суммы ICMPv6. Есть ли способ узнать, используется ли разгрузка контрольной суммы? - person pdinklag; 14.03.2011
comment
Вы можете проверить дополнительные настройки вашего сетевого адаптера (в диспетчере устройств). Или взгляните на следующую ссылку (если вы дружите с реестром) hefetz.net/blog/2009/11/25/ - person Andrey; 15.03.2011