Многоадресные пакеты IPv6 на уровне канала вдруг перестали маршрутизироваться на MacBook Pro?

StackOverflow https://stackoverflow.com/questions/1264948

Вопрос

Это немного неясный вопрос, но я в тупике и подумал, может быть, кто-нибудь из присутствующих имеет больше информации по этому вопросу.

Мой коллега уже несколько месяцев успешно запускает собственное приложение, использующее многоадресную рассылку IPv6, на своем MacBook Pro, но сегодня Mac решил прекратить маршрутизацию многоадресных пакетов.В частности, программа выводит такую ​​ошибку:

SendDataUDP(ff02::bead:cede:deed:feed@4) не удалось на сетевом интерфейсе [Name=[en0] Описание=[] IP=[fe80::222:41ff:fe21:dfd4@4] Маска сети=[ffff: ffff:ffff:ffff::] Broadcast=[::]] (errno=65/Нет маршрута к хосту).

...который довольно хорошо описывает, что пошло не так...он попытался отправить() UDP-пакет на указанный IP-адрес, но send() завершился с ошибкой errno=EHOSTUNREACH.

Чего я не понимаю, так это того, что может привести к тому, что адрес многоадресной рассылки IPv6 станет «недоступным»?Если мое понимание многоадресной рассылки на уровне канала верно, пакет должен выйти только через локальный порт Ethernet (в данном случае en0, который включен и работает на этой машине).

Есть ли какой-то аспект многоадресной рассылки, который мне не хватает, или его машина просто сломалась?Он говорит, что ничего не менял, просто оно каким-то загадочным образом перестало работать.

Это было полезно?

Решение

Возможно, будет полезно взглянуть на исходный код ядра.(В частности, выходной путь исходящего пакета IPv6, ip6_output.c). Пока вы там, вы также можете просмотреть вызовы сокетов, ведущие к нему, и т. д.

Для многоадресной рассылки, предполагая, что вы добираетесь до ip6_output(), похоже, единственный возможный способ получить эту ошибку — не указать интерфейс для отправки.(что странно, поскольку в вашем сообщении об ошибке явно упоминается интерфейс)

Возможно ли, что беспроводной интерфейс на этом MacBook был включен, хотя раньше его не было, и теперь идея многоадресной рассылки по «локальному каналу» неоднозначна?Вы явно указываете интерфейс при использовании сокета?@4 в конце адреса мне кажется странным.(Это индекс интерфейса?) Обычно принято использовать % для идентификатора области интерфейса, но, как отмечалось в предыдущем ответе и комментариях к нему, он не поддерживается повсеместно.

Другие советы

Чтобы проверить, способен ли en0 передавать локальные многоадресные запросы, попробуйте

ping6 ff02::1%en0

Это связывается со всеми хостами, поэтому вы должны получить множество ответов (ради интереса попробуйте добавить -w).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top