Настройка IGMP в локальной сети для контроля широковещательных IPTV потоков

Основным механизмом доставки телевизионных программ до абонентов в локальных сетях является вещание в виде широковещательных 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.

Общая схема сети для вещания IPTV (тестовый стенд). Настройка IGMP. Исползуется абонентская приставка Amino AmiNET110.
Рис. 1. Тестовый стенд — общая схема сети.

Абонентское устройство IP STB

В качестве IP STB была использована модель AmiNET 110 (Рис. 2).

Абонентское устройство IP STB Amino AmiNET 110
Рис. 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

Добавить комментарий

Войти с помощью: