Основным механизмом доставки телевизионных программ до абонентов в локальных сетях является вещание в виде широковещательных IP-пакетов (иногда такой поток называют “мультикаст” от английского “multicast”). Особенностью данной технологии является то, что все мультимедийные потоки всегда направляются в сеть, вне зависимости от количества активных подписчиков в настоящий момент времени. Например, для передачи 20 телевизионных каналов со средним битрейтом 4 Мбит/сек на канал потребует порядка 4*20 = 80 Мбит/сек пропускной способности. Эти 80 Мбит/сек будут направляться в сеть, даже если ни один абонент в данный момент не подключен к сети, а также в случае, если количество активных абонентов гораздо более 1000.
Вещание мультимедийного контента в локальную сеть в виде широковещательных пакетов сопряжено с необходимостью четко контролировать какие пакеты и к какому получателю должны доставляться. Необходимо избегать ситуации, когда все пакеты доставляются всем абонентам. В этом случае абонентские устройства будут тратить ресурсы на обработку “непрошенных” пакетов и в итоге не смогут выполнять свои функции. Абоненту необходимо доставлять пакеты только того потока, который он запросил. Для этого абонентское оборудование сообщает о желании вступить в определенную группу по протоколу IGMP. Далее этот запрос регистрируется на маршрутизаторе, в терминах IGMP это устройство называется “Querier”. После успешной регистрации, Ethernet коммутатор приступает к копированию широковещательных пакетов, предназначенных для данной группы, в порт, к которому подключен абонент.
Благодаря протоколу IGMP, Ethernet-коммутаторы могут определить какие широковещательные пакеты копировать в абонентский порт, а какие нет.
В настоящей статье описывается настройка протокола IGMP в локальной сети, построенной на Ethernet-коммутаторе Cisco Catalyst 2950T и DVB-IP стримере производства компании НетАП на базе ОС Linux. В качестве абонентских устройств выступают IP STB AmiNET 110 и персональный компьютер на базе ОС Windows либо Linux с мультимедиа проигрывателем VLC [1].
Описание протокола IGMP
В настоящий момент существует три версии этого протокола – IGMP v1 [2], IGMP v2 [3], IGMP v3 [4]. Наиболее распространена версия 2.
формат IGMPv2 пакета:
Адрес группы представляет собой широковещательный IP-адрес, на который осуществляется рассылка контента. Например, 224.200.200.205.
В IGMPv2 существуют следующие типы сообщений:
- Запрос о составе группы.
- Отчет о составе группы.
- Сообщение о выходе из группы.
Рассмотрим назначение этих сообщений более детально.
При подключении к IGMP-группе абонентское устройство посылает в сеть IGMP пакет с типом “Отчет о составе группы”, тем самым давая понять, что желает получать пакеты для данной группы.
При выходе из группы абонентское устройство посылает в сеть IGMP пакет с типом “Сообщение о выходе из группы”.
Маршрутизатор (querier) периодически посылает в сеть IGMP запрос с типом “Запрос о составе группы” для выяснения состава группы на текущий момент времени. Если ответа от абонентских устройств не последовало, то маршрутизатор отключает эту группу и более не пересылает пакеты для данной группы.
Общая схема сети
Рассмотрим работу протокола IGMP на тестовом стенде в компании НетАП. Общая схема сети представлена на рисунке 1.
Рис. 1. Тестовый стенд – общая схема сети.
Абонентское устройство IP STB
В качестве IP STB была использована модель AmiNET 110 (Рис. 2).
Рис. 2. Абонентское устройство IP STB
По умолчанию IP STB после загрузки отображает стартовую страницу WEB-браузера и предлагает ввести URL. Для просмотра медиаконтента передаваемого в широковещательной группе 224.200.200.205 (на тестовом стенде это телевизионный канал “Россия”) необходимо ввести следующий адрес:
igmp://224.200.200.205:1234
При этом IP STB отправит в сеть IGMP -запрос о вступлении в группу 224.200.200.205. Если IGMP корректно функционирует в сети, то абонентское устройство сможет “увидеть” этот поток. При нажатии клавиши “Esc” IP STB прекратит отображать поток. При этом в сеть будет отправлен IGMP-запрос о выходе из группы.
Персональный компьютер абонента с установленным медиапроигрывателем VLC
С точки зрения протокола IGMP медиапроигрыватель VLC функционирует аналогично IP STB AmiNET 110.
Ethernet коммутатор Cisco Catalyst 2950T
Поддерживает перехват и анализ IGMP пакетов. Этот функционал называется “igmp snooping”. Именно благодаря анализу проходящих IGMP пакетов, коммутатор узнает к каким портам подключены абоненты и в каких группах они состоят.
Для включения этой функции необходимо в настройках коммутатора ввести следующие команды:
catalyst2950#configure terminal catalyst2950(config)#ip igmp snooping
Для анализа работы “igmp snooping” на коммутаторе можно ввести следующие команды:
catalyst2950#debug ip igmp snooping catalyst2950#terminal monitor
При этом коммутатор будет выводить на консоль информацию о перехваченных IGMP пакетах, а так же информацию о том какие действия были предприняты. Например, прием IGMP-пакета от клиента о вступлении в группу 224.200.200.205 будет выглядеть следующим образом:
9w3d: IGMPSN: group: Received V2 report for group 224.200.200.205 received on Vlan 1, port Fa0/2 9w3d: IGMPSN: group: Adding client ip 10.1.2.16, port_id Fa0/2, on vlan 1 for proxy reporting 9w3d: IGMPSN: group: Created group 224.200.200.205 9w3d: IGMPSN: group: Added port Fa0/2 to group 224.200.200.205
Как видно из этих отладочных сообщений коммутатор зафиксировал вступление абонента 10.1.2.16, подключенного к порту Fa0/2 в группу 224.200.200.205. Согласно этой информации в порт Fa0/2 теперь будут поступать пакеты для 224.200.200.205.
При выходе абонента из группы на консоли появятся следующие сообщения:
9w3d: IGMPSN: group: Leave for group 224.200.200.205 received on Vlan 1, port Fa0/2 9w3d: IGMPSN: group: Adding client ip 10.1.2.16, port_id Fa0/2, on vlan 1 for proxy reporting 9w3d: IGMPSN: group: Created leave port on port Fa0/22, for group 224.200.200.205 on Vlan 1 9w3d: IGMPSN: timer: Vlan 1, group 224.200.200.205, port Fa0/2 leave port timer expired 9w3d: IGMPSN: group: Deleting leave port on port Fa0/2, for 224.200.200.205 on Vlan 1 9w3d: IGMPSN: group: Deleting port Fa0/2 from group 224.200.200.205 on Vlan 1 9w3d: IGMPSN: group: Deleting group 224.200.200.205
Как видно из этих сообщений, коммутатор произвел отключение абонента из группы 224.200.200.205, а так же удалил группу т.к. в данной группе больше не осталось активных абонентов.
Стоит отметить, что коммутатор только анализирует проходящие IGMP пакеты. При этом он не выполняет функции маршрутизатора (Querier). Для этих целей необходимо устанавливать маршрутизатор Cisco либо запускать пакет mrouted на сервере с ОС Linux.
Еще одной немаловажной деталью является то, что если не настроен “igmp snooping” коммутатор рассылает все широковещательные пакеты во все порты. При существенном количестве потоков это может вызвать перегрузки абонентских устройств подключенных к этому коммутатору. По наблюдениям специалистов компании НетАП, широковещательный поток порядка 20 Мбит/сек способен “подвесить” некоторые беспроводные точки доступа, что конечно же недопустимо. В связи с этим необходимо опасаться ситуации, когда по каким либо причинам отключается IGMP в сети.
NetUP DVB-IP стример, RCA-in
Данное устройство производится компанией НетАП и представляет собой высокопроизводительный IP-стример. В качестве источника мультимедийных данных могут выступать спутниковые каналы (DVB-S), аналоговые видео-входы (RCA-in) с видео-камер, транспортные потоки (ASI-in) и др. На выходе стример имеет два Gigabit Ethernet порта для отправки сформированных транспортных потоков в IP-cеть. Пакеты отправляются в режиме широковещания.
Стример построен на базе ОС Linux. В связи с этим имеется возможность установить дополнительно необходимые сервисы. Как упоминалось выше, коммутатор не выполняет функции маршрутизатора широковещательных пакетов (Querier), поэтому данный функционал возложим на стример. Для этого необходимо установить пакет mrouted и запустить его. Конфигурационный файл /etc/mrouted.conf можно оставить со значениями по умолчанию. Стоит отметить, что в системе должны быть активированы два сетевых интерфейса, в противном случае процесс mrouted не запустится.
Проконтролировать текущее состояние процесса можно, послав сигнал USR1. Для этого выполните команду:
kill -USR1 `cat /var/run/mrouted.pid `
В результате процесс mrouted сбросит текущее состояние в файл /var/tmp/mrouted.dump. Пример содержимого этого файла:
mrouted version 3.9-beta3 up 0:08:30 Sat Jul 7 14:44:07 2007 vifs_with_neighbors = 0 Virtual Interface Table Vif Name Local-Address M Thr Rate Flags 0 eth2 10.1.11.10 subnet: 10.1/16 1 1 0 querier leaf group host (time left): 224.200.200.205 10.1.2.16 ( 0:04:15) 224.200.200.150 10.1.4.233 ( 0:03:40) 224.0.0.4 10.1.11.10 ( 0:03:39) 224.0.0.2 10.1.11.10 ( 0:03:39) IGMP querier: 10.1.11.10 (this system) Nbr bitmaps: 0x0000000000000000 pkts/bytes in : 2773302/3593651956 pkts/bytes out: 0/0 1 eth3 172.16.16.16 subnet: 172.16.16/24 1 1 0 querier leaf group host (time left): 224.0.0.4 172.16.16.16 ( 0:03:44) 224.0.0.2 172.16.16.16 ( 0:03:44) IGMP querier: 172.16.16.16 (this system) Nbr bitmaps: 0x0000000000000000 pkts/bytes in : 0/0 pkts/bytes out: 0/0 Multicast Routing Table (2 entries) Origin-Subnet From-Gateway Metric Tmr Fl In-Vif Out-Vifs 172.16.16/24 1 110 .. 1 0* 10.1/16 1 110 .. 0 1*
Как видно из этого файла, на интерфейсе eth2 у нас присутствует широковещательная группа 224.200.200.205, в которую подключен абонент 10.1.2.16.
В случае если в сети находятся два или более IGMP querier, то функции на себя берет тот, у которого меньше IP-адрес. Благодаря такой логике возможно дублирование функций между двумя и более широковещательными маршрутизаторами для большей отказоустойчивости.
Корректность работы IGMP можно проверить на Ethernet коммутаторе Cisco Catalyst. Для этого необходимо выполнить команды:
catalyst2950#show ip igmp snooping querier Vlan IP Address IGMP Version Port --------------------------------------------------- 1 10.1.11.10 v2 Fa0/1 catalyst2950#show ip igmp snooping group Vlan Group Version Port List --------------------------------------------------------- 1 224.200.200.205v2 Fa0/2
Согласно выводу этих команд, коммутатор корректно определил маршрутизатор (Querier) и присутствие в сети группы 224.200.200.205. При этом так же указан абонент, подключенный к этой группе и порт, на котором этот абонент находится. Соответственно только в этот порт направляются пакеты для группы 224.200.200.205. При этом пакеты для других широковещательных групп удаляются на коммутаторе и не направляются ни в один из портов т.к. у нас нет больше активных абонентов.
При этом стоит отметить, что стример посылает в сеть все каналы, независимо от количества активных абонентов. Проконтролировать наличие потоков можно, выполнив на стримере команду:
/usr/bin/trafshow -ni eth2 port 1234
Вывод будет содержать таблицу текущих широковещательных потоков, с указанием битрейта и переданных байт:
From Address To Address Proto Bytes CPS ====================================================================== 10.1.11.10..32795 224.200.200.202..1234 udp 8537028 375494 10.1.11.10..32788 224.200.200.212..1234 udp 7952044 407992 10.1.11.10..32790 224.200.200.209..1234 udp 7094228 279341 10.1.11.10..32787 224.200.200.213..1234 udp 7043440 351231 10.1.11.10..32784 224.200.200.210..1234 udp 7008084 280157 10.1.11.10..32782 224.200.200.215..1234 udp 6508896 314706 10.1.11.10..32785 224.200.200.207..1234 udp 5925792 231584 10.1.11.10..32794 224.200.200.200..1234 udp 5906572 200676 10.1.11.10..32793 224.200.200.211..1234 udp 6047448 326328 10.1.11.10..32796 224.200.200.205..1234 udp 5881424 306071 10.1.11.10..32783 224.200.200.216..1234 udp 5758480 393428 10.1.11.10..32798 224.200.200.201..1234 udp 5570160 321016 10.1.11.10..32797 224.200.200.204..1234 udp 5365592 284411 10.1.11.10..32791 224.200.200.217..1234 udp 5195216 207687 10.1.11.10..32786 224.200.200.206..1234 udp 5297696 296824 10.1.11.10..32799 224.200.200.203..1234 udp 4779076 203542 10.1.11.10..32792 224.200.200.214..1234 udp 3279980 161183 10.1.11.10..32789 224.200.200.208..1234 udp 3144896 131500 10.1.11.10..32800 224.200.200.250..1234 udp 512616 22896 10.1.11.10..32801 224.200.200.251..1234 udp 364532 28590 (eth2) 100217 kb/total 4057 pkts/sec 5250733 bytes/sec Page 1/1
Как видно из этой распечатки, стример постоянно передает в сеть 20 потоков (18 телевизионных каналов и 2 радио станции). При этом, как уже отмечалось выше, количество реально работающих абонентов может сильно варьироваться с течением времени. Благодаря работе протокола IGMP каждый абонент получает именно тот поток, который он запросил.
В случае использования маршрутизатора Cisco (на стенде компании НетАП используется модель Cisco 7140-2FE, IOS 12.3), поддержка маршрутизации широковещательных пакетов включается следующими командами:
c7140(config)#ip multicast-routing c7140(config)#interface FastEthernet0/0 c7140(config-if)#ip pim sparse-mode c7140(config-if)#ip igmp version 2
Проконтролировать широковещательные группы при этом можно командой:
c7140#show ip igmp groups IGMP Connected Group Membership Group Address Interface Uptime Expires Last Reporter 224.200.200.150 FastEthernet0/0 00:02:40 00:02:59 10.1.2.37 224.200.200.205 FastEthernet0/0 00:02:41 00:01:53 10.1.4.233