Нужен ли мне порт при присоединении к группе многоадресной рассылки или только IP?


Я хотел бы узнать, что раз и навсегда. Какова процедура подключения многоадресного сокета? Я знаю, что вы должны привязаться к локальному интерфейсу (вам нужен IP и порт для этого?) тогда я знаю, что вы должны присоединиться к группе (вам нужен IP: порт для адреса, к которому вы хотите присоединиться, и сетевой интерфейс снова!!!??) и тогда, наконец, вы можете покинуть группу.

Может ли кто-нибудь с опытом прояснить, что такое все эти многочисленные адреса? Я перечислю ниже:

  • BindAddress (IP: ПОРТ)
  • NetworkAddress (IP: PORT)
  • многоадресный адрес (IP: порт)

Где и что такое многоадресная группа здесь?

2 7

2 ответа:

Группа многоадресной рассылки - это специальный IP-адрес. Вы присоединяетесь к нему через setsockopt(), используя опцию сокета IP_ADDMEMBERSHIP, или, например, в Java через MulticastSocket.joinGroup(). Здесь нет номера порта. Если вы хотите присоединиться через определенный локальный адрес, используйте перегрузку, которая задает локальный адрес, или сначала вызовите setNetworkInterface().

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

Это запутано тем фактом, что вы можете привязаться к многоадресному адресу в Linux, но это, похоже, недоразумение, которое теперь всегда будет с нами.

Вы отправляете в группу многоадресной рассылки, отправляя на адрес многоадресной рассылки.

Да, вы должны определить и адрес, и порт для отправки/получения многоадресных сообщений. Это пакеты UDP, поэтому они требуют как адреса, так и порта, чтобы сетевой стек мог правильно доставлять сообщения участвующим процессам. Таким образом, чтобы прослушивать определенный набор многоадресных сообщений, ваше приложение должно привязаться к определенной комбинации IP-адреса и порта многоадресной рассылки (и, очевидно, для набора или всех интерфейсов на машине). Группа определяется следующим образом: комбинация адрес / порт.

Хорошее быстрое объяснение

Некоторые примеры исходного кода на C и других языках