Настройка мультикастинга на коммутаторах D-Link
Передача в сети мультимедийного трафика — такого как IPTV — сейчас уже не редкость. Сформированный медиа-сервером поток телевизионных каналов представляет собой поток IP-пакетов, передаваемых в сети по отдельному групповому (мультикаст, multicast) IP-адресу, соответствующему данному телеканалу. Таким образом, вещание нескольких каналов представляет собой несколько потоков мультикаст-трафика, когда каждый из каналов однозначно определяется уникальным адресом групповой рассылки.
Теперь вспомним принцип работы коммутатора. Коммутатор хранит в памяти динамически обновляемую таблицу коммутации, в которой указывается соответствие MAC-адреса узла порту коммутатора. Когда на один из портов коммутатора поступит кадр, предназначенный для хоста, MAC-адрес которого есть в этой таблице, то этот кадр будет передан только через порт, указанный в таблице. Если MAC-адрес хоста-получателя не ассоциирован с каким-либо портом коммутатора, то кадр будет отправлен на все порты, за исключением того порта, с которого он был получен. Аналогичным образом — на все порты, кроме порта, с которого он был получен — будет перед кадр с широковещательным и групповым адресом назначения. К чему приведёт передача потока каналов IPTV на все порты — вы, наверное догадываетесь.
Протокол IGMP используется для динамической регистрации отдельных узлов в многоадресной группе локальной сети. Узлы сети обозначают принадлежность к группе, посылая IGMP-сообщения на свой локальный многоадресный маршрутизатор. По протоколу IGMP маршрутизаторы (коммутаторы L3) получают IGMP-сообщения и периодически посылают запросы, чтобы определить, какие группы активны или не активны в данной сети.
В общем случае протокол IGMP определяет следующие типы сообщений:
- запрос о принадлежности к группе (Membership Query);
- ответ о принадлежности к группе (Membership Report);
- сообщение о выходе из группы (Leave Group Message).
В настоящее время существуют три версии протокола IGMP:
- IGMP версии 1 (IGMP vl, описан в RFC 1112);
- IGMP версии 2 (IGMP v2, описан в RFC 2236);
- IGMP версии 3 (IGMP v3, описан в RFC 337б).
IGMP snooping — процесс отслеживания сетевого трафика IGMP, который позволяет сетевым устройствам канального уровня (коммутаторам) отслеживать IGMP-обмен между потребителями и поставщиками (маршрутизаторами) многоадресного IP-трафика, который формально происходит на более высоком (сетевом) уровне. Эта функциональность доступна в управляемых коммутаторах D-Link, но требует настройки.
После включения IGMP snooping коммутатор начинает анализировать все IGMP-пакеты между подключенными к нему компьютерами-потребителями и маршрутизаторами-поставщиками multicast трафика. Обнаружив IGMP-запрос потребителя на подключение к multicast группе, коммутатор включает порт, к которому тот подключён, в список её членов (для ретрансляции группового трафика). И наоборот: услышав запрос 'IGMP Leave' (покинуть), удаляет соответствующий порт из списка группы. Включается IGMP Snooping на коммутаторе командой enable igmp_snooping.
Согласно реализации стандарта IGMP v2, клиент IGMP может покинуть группу, отослав сообщение «Leave». Когда IGMP snooping querier получает сообщение об отключении от группы, то он рассылает специальный запрос всем клиентам. Если в течении 2 секунд нет ответа, то этот клиент удаляется из группы. Но получается задержка при удалении из группы во время выполнения этих операций.
При использовании функции IGMP Fast Leave, порт коммутатора может быть удален из группы немедленно при получении сообщения IGMP v2 Leave. Т.е. конечное устройство быстро отключается от групповой рассылки, уменьшая тем самым количество ненужного трафика в сети.
Преимущества данной функции в том, что при внедрении услуг MoD (Media on Demand), клиенты подписанные на услугу, например, IPTV, могут переключаться между каналами достаточно быстро, в привычном режиме и без задержек. Кроме того, при использовании функции IGMP Fast Leave полоса пропускания выделяется более эффективно.
IGMP Snooping Querier используется для поддержки мультикаст-домена на 2-м уровне в отсутствие многоадресного маршрутизатора. Задача IGMP Querier — собирать и поддерживать актуальной информацию о всех получателях группового трафика в сети. Периодически Querier отправляет в сеть сообщения IGMP Query. Коммутатор рассылает его через все порты. Получив это сообщение, мультикаст-клиенты отвечают сообщением IGMP Report. Получив от всех мультикаст-клиентов IGMP Report, коммутатор обновляет свои записи. И отправляет сторону Querier IGMP Report. Если IGMP snooping querier получает сообщение об отключении от группы, то он также рассылает запрос для всех клиентов группы. Если ответов нет в течении 2 секунд, тогда передача мультикаст-трафика этой группе останавливается.
В этом примере настраиваем IGMP Snooping для VLAN client_vlan:
enable igmp_snooping
config igmp_snooping vlan_name client_vlan state enable fast_leave enable
config multicast vlan_filtering_mode all filter_unregistered_groups
Команда config multicast vlan_filtering_mode all filter_unregistered_groups используется для настройки фильтрации многоадресных пакетов незарегистрированных групп для всех VLAN.
Иногда бывает нужно запретить получение определенных мультикаст-поток на порту. Например, IPTV-каналы каналы с 1 по 20 бесплатные, а каналы 21-30 являются платными. Соответственно, нужен механизм контроля доступа, чтобы при получении запроса IGMP join на каналы 21-30 от пользователей, которые не платят за услугу, такие сообщения коммутатором отбрасывались. Для решения этой задачи можно настроить фильтрацию мультикаст-адресов на порту: указать какие Report пакеты к каким мультикаст-группам запрещены на данном порту коммутатора. Т.е. данная функция ограничивает количество пакетов IGMP Report и количество мультикаст-групп на порту коммутатора.
Настройка диапазона для бесплатных IPTV-каналов:
create mcast_filter_profile profile_id 1 profile_name free_channel
config mcast_filter_profile profile_id 1 add 235.1.1.1-235.1.1.20
config limited_multicast_addr ports 1-24 add profile_id 1 access permit
Настройка диапазона платных IPTV-каналов для клиента, подключенного к порту 21 коммутатора:
create mcast_filter_profile profile_id 2 profile_name pay_channel
config mcast_filter_profile profile_id 2 add 235.1.1.21-235.1.1.30
config limited_multicast_addr ports 21 add profile_id 2 access permit
Настройка мультикаст-фильтрации в VLAN:
config multicast vlan_filtering_mode all filter_unregistered_groups
При развертывании сервисов многоадресной рассылки может произойти так, что различные пользователи, находящиеся в разных VLAN подключатся к одному каналу, что приведет к появлению множества копий одного многоадресного потока в uplink-канале. Чтобы избежать такого дублирования потоков можно использоваться функцию ISM VLAN. ISM VLAN создается на конечном коммутаторе, который будет прослушивать все сообщения о вступлении в многоадресную группу из различных VLAN. Функция D-Link ISM VLAN будет накапливать все IGMP-сообщения о вступлении в группу на этом коммутаторе и от его лица отправлять отчеты опрашивающему устройству IGMP (IGMP querier). Таким образом, для каждого канала только одна копия многоадресного потока будет передаваться через uplink. Затем ISM VLAN будет перенаправлять Multicast поток соответствующим зарегистрированным подписчикам в разных VLAN.
- Порядок настройки D-Link ISM VLAN такой:
- Включить IGMP Snooping глобально на коммутаторе
- Включить ISM VLAN глобально
- Создать ISM VLAN <номер>
- Включить ISM VLAN локально и настроить “replace_source_ip” <ip> для проксирования клиентских запросов.
- Настроить клиентские порты в ISM VLAN
- Настроить порты источники в ISM VLAN
- Включить Fast Leave в ISM VLAN
- Настроить Multicast фильтрацию.
В качестве параметра replace_source_ip должен быть указан IP-адрес в подсети, в которой находится IP-интерфейс L3 коммутатора в VLAN, соответсвующем ISM VLAN на L2 коммутаторе.
- L2-коммутатор:
enable igmp_snooping
enable igmp_snooping multicast_vlan
create igmp_snooping multicast_vlan vlan102 102
config igmp_snooping multicast_vlan vlan102 state enable replace_source_ip 192.168.102.5
config igmp_snooping multicast_vlan vlan102 add member_port 1-24
config igmp_snooping multicast_vlan vlan102 add source_port 25-26
config igmp_snooping vlan_name vlan102 fast_leave enable
config multicast vlan _filtering_mode all filter unregistered_groups
- L3-коммутатор
create vlan v102 tag 102
config vlan v102 add untagged 1-8
config vlan v102 add tagged 23-24
create ipif v102 192.168.102.1/24 state enable
enable igmp_snooping
config igmp_snooping all state enable
config igmp_snooping querier all state enable