Глава 3: IPTV MULTICAST трансляция как услуга
В предыдущих двух статьях мы построили головную станцию (стример) и научились транслировать услугу IPTV Unicast-ом при помощи relaying. По большому счету, многим небольшим провайдерам этого достаточно, особенно если представить, что услуга IPTV носит некоммерческий, а маркетинговый характер. Однако для того, чтобы предложить своим клиентам качественный, легко управляемый, коммерческий продукт, с большим выбором пакетов телепрограмм, изложенный ранее метод не подходит. На помощь таким провайдерам приходит трансляция IPTV при помощи multicast рассылок.
Multicast
На вопрос, что же такое Multicast легко найти ответ, так, например, Википедия считает, что это специальная форма широковещания, при которой сетевой пакет одновременно направляется определённому подмножеству адресатов — не одному (unicast), и не всем (broadcast). С данной формулировкой трудно не согласиться. Технология IP Multicast очень выгодна в использовании, когда один и тот же набор данных должны получать сотни и тысячи подписчиков на эти данные, без увеличения нагрузки на сеть. Довольно трудно себе представить сервер, способный выдать хотя бы пятимегабитный поток данных тысячам потребителей. Так как обслуживание двухсторонних соединений процесс довольно ресурсоемкий, да еще и дублирование одних и тех же данных явное свидетельство нерациональной расточительности.
IP Multicast - это диапазон IP адресов с 224.0.0.0 до 239.255.255.255. Для того, чтоб использовать Multicast рассылки в Вашей сети необходимо выполнить ряд условий:
- сегмент сети, в котором планируется использование Multicast, должен быть построен на управляемых коммутаторах;
- управляемые коммутаторы должны поддерживать протокол IGMP, при помощи которого определяется членство в Multicast группе порта.
Подходы к реализации Multicast вещания
На сегодняшний день существует несколько технологий доставки Multicast трафика подписчикам, основные из них это:
- PIM-DM в связке с IGMP-snooping;
- PIM-SM в связке с IGMP-snooping;
- MVR.
Попробуем коротко разобраться с этими подходами. Для маршрутизации multicast трафика существует специальный протокол — PIM. В свою очередь PIM имеет два режима работы:
- PIM-DM (dense mode) или режим рассылки и отсечения;
- PIM-SM (sparse mode) или режим, при котором рассылка начинается только тогда, когда появляется запрос на членство в группе.
Разница в этих режимах работы заключается в том, что при использовании режима PIM-DM multicast роутер рассылает все зарегистрированные на нем multicast группы и только потом отсекает те, в которые никто не подписался. Напротив, режим PIM-SM рассылает multicast потоки только после того, когда на него придет IGMP запрос на членство в группе multicast рассылки. Также существует еще одно существенное отличие между режимами PIM-DM и PIM-SM, заключается оно в том, что для режима PIM-SM необходима так называемая точка рандеву — RENDEZVOUS POINT (RP). Точка рандеву — это место, где регистрируются все источники Multicast потоков. Таким образом, все Multicast потоки собираются в этой точке и из нее выдаются членам группы. В итоге, потребители Multicast потоков абсолютно ничего не знают об источнике потока.
Также существует еще один способ доставки IPTV потребителям — это MVR или, если перевести аббревиатуру, Регистрация Мультикастовых VLAN’ов. Суть данного способа заключается в том, что multicast трафик бежит по сети в отдельном VLAN, а вот уже MVR подмешивает этот трафик в порты, запросивших определенную Multicast группу клиентов.
Поскольку в рамки статьи не входит рассмотрение каждого из описанных выше подходов, то остановимся только на одном из них.
Реализация трансляции с использованием PIM-SM.
Для данной реализации использовался коммутатор BD-COM S3928GX, который вполне сгодиться для ядра довольно таки не маленькой сети, так как это полноценный L3 свитч на борту которого можно установить 4*10G порта XFP, а при условии, что цена очень гуманна, альтернатив сегодня не так уж и много.
На рисунке представлена примерная схема реализации:
Настройка коммутатора сводиться к следующим шагам:
1. Создадим VLAN 111 и включим в него наш стример порт 23.
2. Включим потребителя IPTV в уже существующий дефолтный VLAN 1 порт 21
3. Определим в каком режиме будет работать маршрутизация Multicast
router pim-sm
4. Включим в VLAN 1 поддержку IGMP
ip igmp enable
5. На VLAN 111 настроим поддержку PIM
ip pim-sm
Собственно, на этом настройка коммутатора заканчивается, а ниже я приведу полный конфиг свитча.
Switch#show conf
!version 2.1.0B build 7185
service timestamps log date
service timestamps debug date
!
no spanning-tree
!
aaa authentication login default local
aaa authentication enable default none
!
username XXXX password 0 XXXX
!
ip multicast-routing
!
interface Null0
!
interface GigaEthernet0/1
!
.
.
.
interface GigaEthernet0/20
!
interface GigaEthernet0/21
!
interface GigaEthernet0/22
!
interface GigaEthernet0/23
switchport pvid 111
!
interface GigaEthernet0/24
!
interface TGigaEthernet1/1
!
interface TGigaEthernet1/2
!
interface TGigaEthernet2/1
!
interface TGigaEthernet2/2
!
interface VLAN1
ip address 192.168.2.168 255.255.255.0
no ip directed-broadcast
ip pim-sm
ip igmp enable
!
interface VLAN111
ip address 10.10.10.1 255.255.255.0
no ip directed-broadcast
ip pim-sm
ip igmp enable
!
!
!
vlan 1,111
!
!
ip igmp-snooping
no ip igmp-proxy enable
!
ip route default 192.168.2.10
ip exf
!
router pim-sm
reg-rate-limit 1
!
Switch#
Теперь пришло время проверить, а все ли работает так, как нам хотелось. Потребителем IPTV будет выступать компьютер с установленным Linux и программой VLC Player (www.videolan.org). Для удобства просмотра я подготовил маленький плэйлист с двумя ранее настроенными каналами:
#EXTM3U
#EXTINF:5, Первый
udp://@239.255.1.90:1234
#EXTINF:5, Euronews
udp://@239.255.1.91:1234
Загрузив плэйлись в плэйер, на экране появился «Первый» канал. Теперь осталось убедиться в том, что мы все правильно настроили и в наш порт прилетает единственная multicast группа. Для это запустим tcpdump и посмотрим, а что же твориться на нашем сетевом интерфейсе.
# tcpdump -ni eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:43:24.413102 IP 10.10.10.2.39109 > 239.255.1.90.1234: UDP, length 1316
17:43:24.413147 IP 10.10.10.2.39109 > 239.255.1.90.1234: UDP, length 1316
17:43:24.418339 IP 10.10.10.2.39109 > 239.255.1.90.1234: UDP, length 1316
17:43:24.418384 IP 10.10.10.2.39109 > 239.255.1.90.1234: UDP, length 1316
Теперь переключим канал и опять глянем в tcpdump
# tcpdump -ni eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:42:46.130451 IP 10.10.10.2.47782 > 239.255.1.91.1234: UDP, length 1316
17:42:46.130495 IP 10.10.10.2.47782 > 239.255.1.91.1234: UDP, length 1316
17:42:46.135728 IP 10.10.10.2.47782 > 239.255.1.91.1234: UDP, length 1316
17:42:46.135782 IP 10.10.10.2.47782 > 239.255.1.91.1234: UDP, length 1316
Как видим, при переключении телеканала IGMP отключается от одной группы и подключается к другой.