Сети для самых маленьких. часть 9.2. мультикаст. протокол igmp
Содержание:
URI Syntax
{scheme}://{netloc}/
-
scheme
-
Currently supported scheme: http, socks, ss, ssl, secure. You can use + to link multiple protocols together.
http
http protocol (CONNECT)
httponly
http protocol (GET/POST)
socks4
socks4 protocol
socks5
socks5 protocol
ss
shadowsocks protocol
ssr
shadowsocksr (SSR) protocol
ssh
ssh client tunnel
redir
redirect (iptables nat)
pf
pfctl (macos pf nat)
ssl
unsecured ssl/tls (no cert)
secure
secured ssl/tls (cert)
tunnel
raw connection
ws
websocket connection
echo
echo-back service
direct
direct connection
-
Invalid schemes: ssl://, secure://
-
-
cipher
-
Cipher’s format: «cipher_name:cipher_key». Cipher can be base64-encoded. So cipher string with «YWVzLTEyOC1nY206dGVzdA==» is equal to «aes-128-gcm:test».
-
Full cipher support list:
Cipher
Key Length
IV Length
Score (0-5)
table-py
any
0 (lowest)
rc4
16
0 (lowest)
rc4-md5
16
16
0.5
chacha20
32
8
5 (highest)
chacha20-ietf
32
12
5
chacha20-ietf-
poly1305-py32
32
AEAD
salsa20
32
8
4.5
aes-128-cfb
aes-128-cfb8
aes-128-cfb1-py
16
16
3
slow
aes-192-cfb
aes-192-cfb8
aes-192-cfb1-py
24
16
3.5
slow
aes-256-cfb
aes-256-ctr
aes-256-ofb
aes-256-cfb8
aes-256-cfb1-py
32
16
4.5
slow
aes-256-gcm
aes-192-gcm
aes-128-gcm
32
24
16
32
24
16
AEAD
AEAD
AEAD
camellia-256-cfb
camellia-192-cfb
camellia-128-cfb
32
24
16
16
16
16
4
4
4
bf-cfb
16
8
1
cast5-cfb
16
8
2.5
des-cfb
8
8
1.5
rc2-cfb-py
16
8
2
idea-cfb-py
16
8
2.5
seed-cfb-py
16
16
2
-
To enable OTA encryption with shadowsocks, add ‘!’ immediately after cipher name.
-
-
netloc
- It can be «hostname:port» or «/unix_domain_socket». If the hostname is empty, server will listen on all interfaces.
- Valid netloc: localhost:8080, 0.0.0.0:8123, /tmp/domain_socket, :8123
-
localbind
- It can be «@in» or @ipv4_address or @ipv6_address
- Valid localbind: @in, @192.168.1.15, @::1
-
plugins
- It can be multiple plugins joined by «,». Supported plugins: plain, origin, http_simple, tls1.2_ticket_auth, verify_simple, verify_deflate
- Valid plugins: /,tls1.2_ticket_auth,verify_simple
-
rules
The filename that contains regex rules
-
auth
The username, colon ‘:’, and the password
Описание протокола IGMP
В настоящий момент существует три версии этого протокола — IGMP v1 , IGMP v2 , IGMP v3 . Наиболее распространена версия 2.
формат IGMPv2 пакета:
Адрес группы представляет собой широковещательный IP-адрес, на который осуществляется рассылка контента. Например, 224.200.200.205.
В IGMPv2 существуют следующие типы сообщений:
- Запрос о составе группы.
- Отчет о составе группы.
- Сообщение о выходе из группы.
Рассмотрим назначение этих сообщений более детально.
При подключении к IGMP-группе абонентское устройство посылает в сеть IGMP пакет с типом «Отчет о составе группы», тем самым давая понять, что желает получать пакеты для данной группы.
При выходе из группы абонентское устройство посылает в сеть IGMP пакет с типом «Сообщение о выходе из группы».
Маршрутизатор (querier) периодически посылает в сеть IGMP запрос с типом «Запрос о составе группы» для выяснения состава группы на текущий момент времени. Если ответа от абонентских устройств не последовало, то маршрутизатор отключает эту группу и более не пересылает пакеты для данной группы.
Основные положения
Когда хост хочет начать получать широковещательный UDP трафик, то он должен принадлежать к группе «UDP multicast group». Контроль для широковещательных групп базируется на протоколе IGMP. Как только хост подписан, весь трафик для этой группы посылается ей используя
Это важно, потому как многие роутеры направляют весь широковещательный трафик на все порты. В домашних сетях вы обычно используете Linux для управления проводными и беспроводными сетями, и если вы получаете широковещательный трафик по проводному каналу, то вы будете забивать им и беспроводные каналы тоже
К счастью в версии ядра Linux 2.6.34 есть возможность «IMGP snooping», которая отслеживает подобные ситуации и по умолчанию присутствует в OpenWrt. Таким образом у вас не будет нежелательного трафика на портах, который не были вами заданы для получения.
Ещё одним важным фактором является так же то, что из-за использования низкого уровня скорости (чтобы все клиенты могли «слушать»), а так же хитрых режимов энергосбережения – широковещание в беспроводных сетях работает не так, как этого от него ожидаешь. Зачастую широковещание бесполезно для IPTV.
Зачем отслеживать сетевой трафик
Multicast-трафик может передаваться в том числе и к компьютерам, не заинтересованным в нем. Это называется широковещательной ретрансляцией. Для ее предотвращения, с целью снижения нагрузки на сеть, используется IGMP snooping. В то же время такого рода фильтрация требует дополнительных затрат памяти и повышает нагрузку на коммуникатор. Однако она оправдана.
Второй используется для обозначения размера, используемого в необязательном поле. Он используется в следующих сообщениях: «Соседний запрос», «Запрос на маршрутизатор» и «Маршрутизатор». Его функция заключается в предоставлении запрашивающему узлу сетевого префикса, который может использоваться как для автоконфигурации, так и для определения того, принадлежит ли целевой адрес в пакете. Перенаправление заголовка. Его функция заключается в отправке части или всего исходного сообщения, которое должно быть перенаправлено исходным узлом на другой узел.
- Он используется в следующих сообщениях: «Соседняя реклама и переадресация».
- Префиксная информация.
Вчера во время класса меня спрашивали о типах одноадресных и широковещательных фреймов.
Если коммуникатор начинает транслировать групповой трафик по всем своим портам, то:
- этот процесс является бесполезным;
- могут возникнуть проблемы в работе самого конечного получателя (сетевого устройства), вынужденного обрабатывать большой поток ненужных данных.
Для исключения подобных ситуаций и существует функция IGMP snooping, значительно улучшающая работу всей сети. Она учитывает потребности на сетевом (третьем) уровне и таким образом оптимизирует канальный (второй) уровень передачи данных.
Связь, в которой кадр отправляется с хоста, адресованного конкретному получателю, то есть известному адресату. В однонаправленной передаче есть только один отправитель и один приемник. Одноадресная передача является преобладающей формой передачи в локальных сетях и в Интернете.
Примеры протоколов, использующих одноадресные передачи. Все в аэропорту получают сообщение, но только те, кто заинтересован в сообщении, каким-то образом отреагируют, а другие, которые не из этого рейса, также получат, но они просто проигнорируют сообщение. И компьютерная сеть ничем не отличается.
Events
server.on( , function ( args ) { });
-
, details
-
details is an object with two objects:
- target address
- server address
-
details is an object with two objects:
-
, details
-
details is an object with two objects:
- route address
- peer address
-
details is an object with two objects:
-
, message, sender
- message is the payload from user using the proxy
- sender is the user address
-
, message, sender, peer
- message is the answer to the message from the user
- sender is the answerer address
- peer is the requesting address
-
, err
in case of an error err has the error-messages
-
, err
if the message could not be proxied err has the error-messages
-
, peer
- when a socket is closed after no new messages in set timeout
- peer is the address of the disconnected client
address object contains:
- : string ip-address
- : string IPv6 or IPv4
- : number udp-port
Что такое UDP-прокси?
UDP-прокси создавался для трансформации udp-мультикаст трафика IPTV в tcp-юникаст. Представленная опция полезна, если вы желаете с комфортом смотреть IPTV с помощью WiFi, NAT, на смартфонах, планшетах, телевизорах со смарт-тв и даже на игровых приставках.
У утилиты есть два назначения:
- для передачи IPTV внутрь маленькой локальной сети на основе не серверной версии ОС Windows;
- для постоянной передачи IPTV по WiFi в виде http-трафика.
Udp прокси для IPTV появился только в V2.02 (XXX.1)B2, именно там добавили новую функцию, позволяющую просматривать IPTV на домашних устройствах и проигрывателях, у которых нет поддержки мультикастовых многоадресных рассылок, которые передаются строго по UDP. Если обычный проигрыватель будет включать IPTV-канал, то пользователь сможет его просмотреть, но трансляция будет производиться через HTTP-связь. Потому и появился прокси сервер udp, позволяющий сейчас просматривать IPTV на смартфонах, телевизорах со Smart TV, а также на игровых приставках.
Как происходит настройка UDP-прокси? Для того, чтобы начать настройку данной опции потребуется зайти в веб-конфигуратор, найти там его меню, далее перейти в «Настройки», отыскать пункт «Файлы» (бывает, что название другое, к примеру, «Компоненты»). Именно там и требуется выполнять установку UDP-HTTP прокси.
Важное замечание: в программе может уже функционировать IGMP Proxy, которое потребуется отключить для нормальной работы UDP Proxy. Как только завершится установка компонента, его можно будет настроить в «Домашняя сеть» и во вкладке «Сервер udpxy»
Вам сразу предоставляться стандартные настройки и ими можно отлично, но знайте, что функционировать тогда опция будет по порту 4022
Как только завершится установка компонента, его можно будет настроить в «Домашняя сеть» и во вкладке «Сервер udpxy». Вам сразу предоставляться стандартные настройки и ими можно отлично, но знайте, что функционировать тогда опция будет по порту 4022.
Usage
var proxy =require('udp-proxy'), options ={ address'2001:4860:4860::8888', port53, ipv6true, localaddress'0.0.0.0', localport53535, localipv6false, proxyaddress'::0', timeOutTime10000};var server =proxy.createServer(options);server.on('listening',function(details){console.log('DNS - IPv4 to IPv6 proxy }>=<{ by: ok 2012');console.log('udp-proxy-server ready on '+details.server.family+''+details.server.address+''+details.server.port);console.log('traffic is forwarded to '+details.target.family+''+details.target.address+''+details.target.port);});server.on('bound',function(details){console.log('proxy is bound to '+details.route.address+''+details.route.port);console.log('peer is bound to '+details.peer.address+''+details.peer.port);});server.on('message',function(message,sender){console.log('message from '+sender.address+''+sender.port);});server.on('proxyMsg',function(message,sender,peer){console.log('answer from '+sender.address+''+sender.port);});server.on('proxyClose',function(peer){console.log('disconnecting socket from '+peer.address);});server.on('proxyError',function(err){console.log('ProxyError! '+ err);});server.on('error',function(err){console.log('Error! '+ err);});
Включение функции прослушки
Для того чтобы отслеживать multicast-трафик, требуется сначала включить IGMP snooping и настроить его самостоятельно. Рассмотрим, как это сделать на коммуникаторах D-Link при реализации схемы многоадресной передачи данных. Команды для активизации сетевой прослушки:
Передача широковещательной передачи необходима при отправке одного и того же сообщения всем устройствам локальной сети. Связь, в которой кадр отправляется в определенную группу устройств или клиентов. Клиенты передачи многоадресной рассылки должны быть членами логической многоадресной группы для получения информации. Примером многоадресной передачи является передача видео и голоса, связанная с сетевым совместным бизнес-совещанием, в котором должны размещаться не все хосты в сети, а пункт назначения — не только хост, но и определенной группы хостов.
Для того чтобы исключить порт из сетевой группы, когда коммуникатор получил запрос Leave от клиента, используется функция IGMP Snooping Fast Leave. Она позволяет прекращать передачу ненужных потоков данных по сети с целью ее более эффективной работы. Для активизации этой функции используется следующая команда:
Например, видеосервер, вы хотите отправить видеоконтент нескольким адресатам. Желтые точки — это слишком много хостов, другие компьютеры, подключенные в той же локальной сети, которые не будут получать видео трафик. Для этого необходимо, чтобы видеосервер создал логическую группу многоадресной передачи, например, многоадресный адрес 3, и адресатов, которые должны получать контент, если они регистрируются в той же группе 3, что и приемники. Это гарантирует, что контент отправляется только тем клиентам, которых вы хотите.
Мой ответ: не бойтесь, не сдавайтесь, не торопитесь, чтобы все учиться, делайте это легко и по частям. Моя миссия — облегчить учебу и дать вам направление. Следующий рисунок, это довольно просто, и это точно, хорошо? До следующей статьи или следующего класса.
Применяется в том случае, если необходимо включить фильтрацию многоадресной рассылки коммутатора с подключенным к нему узлом, участвующем в передаче данных.
Настройка IPTV + VLC
Все нижеописанные действия по настройке продемонстрированы на примере приложения IPTV от разработчика Александра Софронова и плеера VLC для Android, но вышеперечисленные приложения имеют схожий функционал, и если вы захотите использовать другой клиент для просмотра потокового ТВ, разобраться в нем по аналогии не составит труда. Также, если будут проблемы с воспроизведением видео, полезно ознакомиться с инструкцией Воспроизведение IPTV на Android без поддержки аппаратного ускорения.
Установите приложение IPTV:
Price: Free
Установите плеер VLC:
Price: Free
Запустите приложение IPTV. Программа предложит добавить плейлист с каналами. Плейлист – это текстовый файл с расширением «.m3u» или «.xspf», содержащий список адресов потоков на ТВ каналы. Обычно поставщик интернета предоставляет ссылку на него. Плейлисты можно достаточно легко найти в интернете и скачать. После добавления плейлиста программа отобразит все содержащиеся в нем каналы.
Нажмите на желаемый канал и приложение IPTV запустит VLC плеер с выбранным каналом.
На этом можно было бы закончить, если бы не одно «но»!
Много провайдеров предпочитают вещать поток по multicast протоколу (ссылки типа udp://), так как он по сравнению с unicast’ом (обычно http:// протокол) позволяет существенно оптимизировать занимаемую ширину канала, вещая поток всем, а не создавать отдельные сессии для каждого телезрителя.
К сожалению, много устройств на Android не поддерживают UDP-multicast потоки, кроме нескольких моделей, у которых udpxy вшит в прошивку.
Для передачи IPTV на Android устройства нужна система транскодирования, которая будет передавать IPTV не multicast’ом, а потоком поверх HTTP.
Современные роутеры с прошивкой на основе Linux типа DD-WRT и Open-WRT уже имеют подобную систему, но если у вас бюджетный роутер без поддержки транскодирования, можно организовать собственный прокси с помощью компьютера, подключенного в общую сеть с устройством на Android.
Для операционных систем Windows нужно скачать программу UDP-to-HTTP Proxy.
Для операционных систем семейства Linux UDP-to-HTTP Proxy сервер находится здесь.
Настройка UDP-to-HTTP Proxy (Windows)
Настройка программы заключается в указании IP-адресов интерфейса UDP-мультикаста и интерфейса HTTP-сервера. Для случая, если ваш компьютер и устройство на Android находятся в одной сети, это один и тот же адрес и равен он IP-адресу вашего ПК. Раскройте список «Интерфейс мультикаста», он уже должен содержать IP-адрес компьютера (последний в списке).
Нажмите на кнопку «Запустить».
Сервер запущен, теперь переходим к настройкам на Android-устройстве.
Настройка UDP-прокси на Android
Откройте приложение IPTV, нажмите на системную кнопку меню устройства и выберите в списке опцию «Настройки».
Нажмите на опцию «Настройки UDP-прокси».
Введите IP-адрес компьютера с запущенным «UDP-to-HTTP Proxy» сервером, введите номер порта, по умолчанию — 7781. Выберите тип прокси сервера » UDP-to-HTTP Proxy (Windows)» и нажмите ОК, чтобы сохранить настройки.
Все! Можете тестировать воспроизведение ТВ онлайн на Android.
Описание «IPTV Alexander Sofronov»
Начнём с подробного описания приложения:
- Простое и моментальное развёртывание в сети провайдера;
- Поддержка плейлистов в форматах m3u и xspf только для открытых каналов;
- Сохранение истории плейлистов;
- Воспроизведение живого телевидения сквозь UDP-прокси (необходима его установка в локальной сети клиента);
- Отображение перечня доступных каналов в образе списка или сетки;
- Просмотр программ передач в форме XMLTV и JTV (для JTV поддержка только ZIP-архивов);
- Установка настроек для отдельного канала и общих для всех;
- Возможность переключения между списками каналов;
- Запись конкретного потока в файл;
- Наличие информационного окошка с отображением громкости, названия канала и индикатора записи;
- Возможность управления с клавиатуры;
- Работа с планировщиком записи и просмотра;
- Использование смартфона как пульта для управления плеером.
Впечатления от возможностей превышают ожидания.
ВАЖНО
:
- Само приложение предоставляет плеер только для просмотра и только открытых каналов в привязке к IP-адресу, то есть является просто инструментом;
- Не предназначается для просмотра российского ТВ из-за границы;
- Нет просмотра для зашифрованных каналов;
- Не содержит в себе никаких встроенных каналов.
Настройка приложения
Чтобы воспользоваться приложением после скачивания, при запуске понадобится указать плейлист. Это такой файл текстового формата, в котором находится список адресов для каналов потокового ТВ.
Этот список в форматах m3u или xspf предоставляется провайдером клиенту в виде гиперссылки на него. По этой ссылке он и скачивается. Кроме этого, существуют публичные доступные листы.
Если уже есть IPTV на вашем компе, то найти список можно так:
Открыть плеер, по правой кнопке мышки найти и выбрать настройки, включить галочку «Все настройки». В результате на вкладке «Общие» отобразится искомый интернет-адрес вашего списка каналов (плейлист m3u). Именно этот адрес нужно «вбить» в приложение.
После внесения плейлиста в программу доступные каналы отобразятся в приложении:
При нажатии вами на соответствующую пиктограмму, приложение запускает плеер, после чего в нём отобразится выбранная программа ТВ.
ВАЖНО. IP-телевидение позволяет просматривать ТВ от интернет-провайдера только непосредственно в этой локальной сети, — с помощью Wi-Fi или через Ethernet
Если есть необходимость копирования списка каналов на SD-карту, то на ней нужно сначала создать директорию, в которую следует поместить пустой файл «.nomedia». В противном случае плейлист может быть удалён Андроидом.
QuickStart
$ pip3 install pproxy Successfully installed pproxy-1.9.5 $ pproxy Serving on :8080 by http,socks4,socks5 ^C $ pproxy -l ss://chacha20:abc@:8080 Serving on :8080 by ss (chacha20-py)
Optional: (better performance with C ciphers)
$ pip3 install pproxy Successfully installed pycryptodome-3.6.4
Apply OS system-wide proxy: (MacOS, Windows)
$ pproxy -r ss://chacha20:abc@server_ip:8080 --sys -vv Serving on :8080 by http,socks4,socks5 System proxy setting -> socks5 localhost:8080 socks5 ::1:57345 -> ss server_ip:8080 -> slack.com:443 socks5 ::1:57345 -> ss server_ip:8080 -> www.google.com:443 ..... (all local traffic log) ......
Apply CLI proxy: (MacOS, Linux)
$ export http_proxy=http://localhost:8080 $ export https_proxy=http://localhost:8080
IGMP
Internet group management protocol
IGMP не протокол маршрутизации. Работает между получателями и роутером, с которого отдается мультикаст в сегменте. Он просто передает информацию роутеру о заинтересованных получателях и получателях, которые хотят покинуть группу.
Для IPv6 используется точно такой же по принципу работы протокол MLD.
Сообщения
Report/Join message: отправляет хост, когда хочет подписаться на какую-то группу. DA = group address. После того как хост подписался на группу, он должен отвечать на query message от роутера. TTL = 1, т.к. сообщение должно долететь только до ближайшего маршрутизатора.
General query: роутер шлет general query на 224.0.0.1 всем хотсам (роутер при этом называется query-router (опрашивающий)). Хосты в ответ присылают группы, на которые они еще хотят быть подписаны. TTL тоже = 1.
Чтобы не дублировались ответы с одной группой от разных хостов, хосты шлют ответы с разным временным интервалом. Если хост видит, что о его группе сообщил другой хост, то он не будет отправлять ответ роутеру. Роутер итак сохранит интерфейс как downstream для данной группы.
Если в домене несколько query-роутеров, то в качестве активного будет выбран с наименьшим ip.
Leave message:
- IGMP2: Хост отправляет leave message для конкретной группы на общий адрес 224.0.0.2.
- IGMP1: Хост просто перестает отвечать на query от роутра. Если больше нет подписчиков на группу, роутер по истечению какого-то интервала перестает слать трафик в интерфейс.
Group-specific query:
IGMP2: Когда роутер получил leave от хоста, он отправляет general-specific query на адрес этой группы, чтобы понять есть ли еще заинтересованные получатели.
Разные версии протокола
IGMP v 1
-
- Чтобы получить трафик от конкретной группы, хост отправляет роутеру report message.
- Для отключения от группы хост просто перестает отвечать роутеру на query.
- Таймаут, после которого роутер перестает вещать группу в downstream interface = 260.
(robustness count * igmp_query interval) + (1*IGMP response interval) = (2*125)+(1*10) = 260
IGMP v 2
-
- Чтобы подписаться, хосты шлют report-message.
- Чтобы отписаться, хосты шлют leave-group message.
- Чтобы проверить наличие подписчиков, роутер шлет group-specific message.
- Таймаут, после которого роутер перестает вещать: нет ответа от хостов в течение 2 сек (дефолт).
robusness count * IGMP last member query interval = 2*1 = 2
IGMP v 3
Все улучшения для v 2. .
Используется для SSM, поэтому report message (на адрес 224.0.0.22 — all IGMPv3) может содержать source information.
L2 switches
Свитчи обрабатывают мультикаст трафик как бродкаст, по умолчанию, т.е. шлет трафик во все порты.
IGMP-snooping позволяет выделить мультикаст трафик. С помощью IGMP сообщений, свитч может понять где получатели и слать трафик только к ним.
Делит порты на multicast-router interface (откуда приходят query, либо заданы статически), host-side interface (все остальные).
Передача трафика:
- Весь трафик направлен в multicast-router интерфейс.
- Если через IGMP-snooping свитч узнает о портах, за которыми сидят получатели, то шлет трафик туда.
- 224/8 сеть бродкастом идет во все порты, кроме входящего.
Стандартное расширение IGMP позволяет только обрабатывать query от роутера и сообщения от получателей. Не генерирует IGMP сообщения.
IGMP snooping proxy ведет себя как роутер для получателей (генерирует query), работает как получатели для роутера (генерирует leave и join сообщения).
Тем самым уменьшается кол-во report-сообщений для роутера.
/routing igmp-proxy
General configuration.
- query-interval (time, 00:00:01 — 01:00:00) : how often to send out IGMP Query messages over downstream interfaces.
- query-response-interval (time, 00:00:01 — 01:00:00) : how long to wait for responses to an IGMP Query message.
- quick-leave (yes|no) : specifies action on IGMP Leave message. If quick-leave is on, then an IGMP Leave message is sent upstream as soon as a leave is received from the first client on the downstream interface. Use set to yes only in case there is only one subscriber behind the proxy.
Note: use quick leave only if there is one subscriber behind the proxy