Я пытаюсь программно отправить эхо-запросы 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, или есть какие-то другие хитрости?
ping
заполнит контрольную сумму вручную после поиска маршрута. - person mpontillo   schedule 03.03.2011checksum offloading
, тогда - person Andrey   schedule 15.03.2011