Выбор интерфейса при многоадресной рассылке в Linux - PullRequest
3 голосов
/ 24 апреля 2009

Я работаю с кластером из примерно 40 узлов, работающих под управлением Debian 4. Каждый узел запускает демон, который сидит и прослушивает многоадресный IP-адрес.

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

Это прекрасно работает, за исключением случаев, когда я запускаю клиентское программное обеспечение на компьютере с интерфейсами LAN и WAN. Если есть интерфейс WAN, многоадресная рассылка не работает. Очевидно, я полагаю, что многоадресная рассылка неправильно проходит через интерфейс WAN (eth0), а не LAN (eth1.) Итак, я использую опцию сокета SO_BINDTODEVICE, чтобы заставить сокет многоадресной рассылки использовать eth1, и все хорошо. *

Но я подумал, что таблица маршрутизации ядра должна определить, что LAN (eth1), очевидно, является более дешевым местом назначения для многоадресной рассылки. Есть ли какая-то причина, по которой я должен явно заставить сокет использовать eth1? И есть ли какой-то способ (возможно, вызов ioctl), чтобы приложение могло автоматически определять, является ли конкретный интерфейс локальной или глобальной сетью?

Ответы [ 2 ]

6 голосов
/ 06 февраля 2010

Если вы не привязаны явно к интерфейс, я считаю, что Linux использует интерфейс для одноадресной передачи по умолчанию маршрут для многоадресной отправки.

Linux нужен многоадресный маршрут, если его нет, вы получите ошибку EHOSTUNREACH или ENETUNREACH. Проект LCM описывает эту возможную проблему. Маршрутизация будет переопределена, если вы используете опцию сокета IP_MULTICAST_IF или IPV6_MULTICAST_IF. Предполагается, что вы сможете указать интерфейс через поле scope-id в адресах IPv6, но не все платформы должным образом поддерживают его. Как отмечает Деймис, книга Стивенса по сетевому программированию Unix охватывает эти детали, вы можете просмотреть большую часть главы о многоадресной рассылке через Google Книги.

4 голосов
/ 01 октября 2009

Если вы явно не привязываетесь к интерфейсу, я считаю, что Linux использует интерфейс для одноадресного маршрута по умолчанию для многоадресной отправки. Поэтому я предполагаю, что ваш маршрут по умолчанию через интерфейс WAN.

Ричард Стивенс "Сетевое программирование Unix, том 1", глава 17 (по крайней мере, в 3-м издании), содержит хорошую информацию и примеры перечисления сетевых интерфейсов.

...