Нужен ли мне порт при присоединении к группе многоадресной рассылки или только IP?
Я хотел бы узнать, что раз и навсегда. Какова процедура подключения многоадресного сокета? Я знаю, что вы должны привязаться к локальному интерфейсу (вам нужен IP и порт для этого?) тогда я знаю, что вы должны присоединиться к группе (вам нужен IP: порт для адреса, к которому вы хотите присоединиться, и сетевой интерфейс снова!!!??) и тогда, наконец, вы можете покинуть группу.
Может ли кто-нибудь с опытом прояснить, что такое все эти многочисленные адреса? Я перечислю ниже:
- BindAddress (IP: ПОРТ)
- NetworkAddress (IP: PORT)
- многоадресный адрес (IP: порт)
Где и что такое многоадресная группа здесь?
2 ответа:
Группа многоадресной рассылки - это специальный IP-адрес. Вы присоединяетесь к нему через
Привязка к локальному адресу-это отдельная операция, которая в первую очередь определяет, по каким локальным адресам сокет может отправлять и получать данные: по одному или по всем: либо по одному локальному адресу, определяющему какую из доступных подсетей вы слушаете и можете отправить через, или порт, или и то, и другое. Обычно лучше всего использовать INADDR_ANY в качестве адреса привязки, если ваше приложение волшебным образом не знает о топологии сети.setsockopt()
, используя опцию сокета IP_ADDMEMBERSHIP, или, например, в Java черезMulticastSocket.joinGroup()
. Здесь нет номера порта. Если вы хотите присоединиться через определенный локальный адрес, используйте перегрузку, которая задает локальный адрес, или сначала вызовитеsetNetworkInterface()
.Это запутано тем фактом, что вы можете привязаться к многоадресному адресу в Linux, но это, похоже, недоразумение, которое теперь всегда будет с нами.
Вы отправляете в группу многоадресной рассылки, отправляя на адрес многоадресной рассылки.
Да, вы должны определить и адрес, и порт для отправки/получения многоадресных сообщений. Это пакеты UDP, поэтому они требуют как адреса, так и порта, чтобы сетевой стек мог правильно доставлять сообщения участвующим процессам. Таким образом, чтобы прослушивать определенный набор многоадресных сообщений, ваше приложение должно привязаться к определенной комбинации IP-адреса и порта многоадресной рассылки (и, очевидно, для набора или всех интерфейсов на машине). Группа определяется следующим образом: комбинация адрес / порт.