WinSock2 в Windows XP и ICMPv6 - PullRequest
       77

WinSock2 в Windows XP и ICMPv6

1 голос
/ 02 марта 2011

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

1 Ответ

0 голосов
/ 10 марта 2011

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

...