Что такое версия igmp в роутере
Сети для самых маленьких. Часть 9.2. Мультикаст. Протокол IGMP
Продолжим изучение мультикаста рассмотрением протокола IGMP (Internet Group Management Protocol), сетевого протокола взаимодействия клиентов мультикастового трафика и ближайшего к ним маршрутизатора.
Содержание серии статей про мультикаст
Протокол IGMP
Снова вернёмся к дампу. Видите вот этот верхний пакет, после которого полился мультикастовый поток?
Сообщение протокола IGMP при подключении
Это сообщение протокола IGMP, которое отправил клиент, когда мы на нём нажали Play. Именно так он сообщает о том, что хочет получать трафик для группы 224.2.2.4.
IGMP — Internet Group Management Protocol — это сетевой протокол взаимодействия клиентов мультикастового трафика и ближайшего к ним маршрутизатора.
В IPv6 используется MLD (Multicast Listener Discovery) вместо IGMP. Принцип работы у них абсолютно одинаковый, поэтому далее везде вы смело можете менять IGMP на MLD, а IP на IPv6.
Как же именно работает IGMP?
Пожалуй, начать нужно с того, что версий у протокола сейчас три: IGMPv1, IGMPv2, IGMPv3. Наиболее используемая — вторая, первая уже практически забыта, поэтому про неё говорить не будем, третья очень похожа на вторую.
Акцентируемся пока на второй, как на самой показательной, и рассмотрим все события от подключения клиента к группе до его выхода из неё. Клиент будет также запрашивать группу 224.2.2.4 через проигрыватель VLC.
Роль IGMP очень проста: если клиентов нет — передавать мультикастовый трафик в сегмент не надо. Если появился клиент, он уведомляет маршрутизаторы с помощью IGMP о том, что хочет получать трафик.
Для того, чтобы понять, как всё происходит, возьмём такую сеть:
Предположим, что маршрутизатор уже настроен на получение и обработку мультикастового трафика.
1. Как только мы запустили приложение на клиенте и задали группу 224.2.2.4, в сеть будет отправлен пакет IGMP Membership Report — узел «рапортует» о том, что хочет получать трафик этой группы.
Отправка IGMP Membership Report
В IGMPv2 Report отправляется на адрес желаемой группы, и параллельно он же указывается в самом пакете. Данные сообщения должны жить только в пределах своего сегмента и не пересылаться никуда маршрутизаторами, поэтому и TTL у них 1.
Часто в литературе вы можете встретить упоминание о IGMP Join. Не пугайтесь — это альтернативное название для IGMP Membership Report.
2. Маршрутизатор получает IGMP-Report и, понимая, что за данным интерфейсом теперь есть клиенты, заносит информацию в свои таблицы
Это вывод информации по IGMP. Первая группа запрошена клиентом. Третья и четвёртая — это служебные группы протокола SSDP, встроенного в Windows. Вторая — специальная группа, которая всегда присутствует на маршрутизаторах Cisco — она используется для протокола Auto-RP, который по умолчанию активирован на маршрутизаторах.
Интерфейс FE0/0 становится нисходящим для трафика группы 224.2.2.4 — в него нужно будет отправлять полученный трафик.
Наряду с обычной юникастовой таблицей маршрутизации существует ещё и мультикастовая:
О наличии клиентов говорит первая запись (*, 224.2.2.4). А запись (172.16.0.5, 224.2.2.4) означает, что маршрутизатор знает об источнике мультикастового потока для этой группы.
Из вывода видно, что трафик для группы 224.2.2.4 приходит через FE0/1, а передавать его надо на порт FE0/0.
Интерфейсы, в которые нужно передавать трафик, входят в список нисходящих интерфейсов — OIL — Outbound Interface List.
Более подробно вывод команды show ip mroute мы разберём позже.
Выше на дампе вы видите, что как только клиент отправил IGMP-Report, сразу после него полетели UDP — это видеопоток.
3. Клиент начал получать трафик. Теперь маршрутизатор должен иногда проверять, что получатели до сих пор у него есть, чтобы зазря не вещать, если вдруг клиентов не осталось. Для этого он периодически отправляет во все свои нисходящие интерфейсы запрос IGMP Query.
Получение запроса IGMP Query (Дамп отфильтрован по IGMP).
По умолчанию это происходит каждые 60 секунд. TTL таких пакетов тоже равен 1. Они отправляются на адрес 224.0.0.1 — все узлы в этом сегменте — без указания конкретной группы. Такие сообщений Query называются General Query — общие. Таким образом маршрутизатор спрашивает: «Ребят, а кто и что ещё хочет получать?».
Получив IGMP General Query, любой хост, который слушает любую группу, должен отправить IGMP Report, как он это делал при подключении. В Report, естественно, должен быть указан адрес интересующей его группы.
Ответ компьютера на IGMP General Query (Дамп отфильтрован по IGMP)
Если в ответ на Query на маршрутизатор пришёл хотя бы один Report для группы, значит есть ещё клиенты, он продолжает вещать в тот интерфейс, откуда пришёл этот Report, трафик этой самой группы.
Если на 3 подряд Query не было с интерфейса ответа для какой-то группы, маршрутизатор удаляет этот интерфейс из своей таблицы мультикастовой маршрутизации для данной группы — перестаёт туда посылать трафик.
По своей инициативе клиент обычно посылает Report только при подключении, потом — просто отвечает на Query от маршрутизатора.
Интересная деталь в поведении клиента: получив Query, он не торопится сразу же ответить Report’ом. Узел берёт тайм-аут длиной от 0 до Max Response Time, который указан в пришедшем Query:
При отладке или в дампе, кстати, можно видеть, что между получением различных Report может пройти несколько секунд.
Сделано это для того, чтобы сотни клиентов все скопом не наводнили сеть своими пакетам Report, получив General Query. Более того, только один клиент обычно отправляет Report.
Дело в том, что Report отсылается на адрес группы, а следовательно доходит и до всех клиентов. Получив Report от другого клиента для этой же группы, узел не будет отправлять свой. Логика простая: маршрутизатор и так уже получил этот самый Report и знает, что клиенты есть, больше ему не надо.
Этот механизм называется Report Suppression.
Далее в статье мы расскажем о том, почему этот механизм на деле очень редко реально работает.
4. Так продолжается веками, пока клиент не захочет выйти из группы (например, выключит плеер/телевизор). В этом случае он отправляет IGMP Leave на адрес группы.
Отправка клиентом IGMP Leave
Маршрутизатор получает его и по идее должен отключить. Но он ведь не может отключить одного конкретного клиента — маршрутизатор их не различает — у него просто есть нисходящий интерфейс. А за интерфейсом может быть несколько клиентов. То есть, если маршрутизатор удалит этот интерфейс из своего списка OIL (Outgoing Interface List) для этой группы, видео выключится у всех. Но и не удалять его совсем тоже нельзя — вдруг это был последний клиент — зачем тогда впустую вещать?
Если вы посмотрите в дамп, то увидите, что после получения Leave маршрутизатор ещё некоторое время продолжает слать поток. Дело в том, что маршрутизатор в ответ на Leave высылает IGMP Query на адрес группы, для которой этот Leave пришёл в тот интерфейс, откуда он пришёл. Такой пакет называется Group Specific Query. На него отвечают только те клиенты, которые подключены к данной конкретной группе.
Отправка маршрутизатором запроса Group Specific Query в ответ на IGMP Leave
Если маршрутизатор получил ответный Report для группы, он продолжает вещать в интерфейс, если не получил — удаляет по истечении таймера.
Всего после получения Leave отправляется два Group Specific Query — один обязательный, второй контрольный.
Два Group Specific Query — один обязательный, второй контрольный
Далее маршрутизатор останавливает поток.
Querier
Рассмотрим чуть более сложный случай:
В клиентский сегмент подключено два (или больше) маршрутизатора, которые могут вещать трафик. Если ничего не сделать, мультикастовый трафик будет дублироваться — оба маршрутизатора ведь будут получать Report от клиентов. Во избежание этого существует механизм выбора Querier — опрашивателя. Тот кто победит, будет посылать Query, мониторить Report и реагировать на Leave, ну и, соответственно, он будет отправлять и трафик в сегмент. Проигравший же будет только слушать Report и держать руку на пульсе.
Выборы происходят довольно просто и интуитивно понятно.
Рассмотрим ситуацию с момента включения маршрутизаторов R1 и R2.
Тот редкий случай, когда меряются, у кого меньше.
Выборы Querier очень важная процедура в мультикасте, но некоторые коварные производители, не придерживающиеся RFC, могут вставить крепкую палку в колёса. Я сейчас говорю о IGMP Query с адресом источника 0.0.0.0, которые могут генерироваться коммутатором. Такие сообщения не должны участвовать в выборе Querier, но надо быть готовыми ко всему. Вот пример весьма сложной долгоиграющей проблемы.
Ещё пара слов о других версиях IGMP
Версия 1 отличается по сути только тем, что в ней нет сообщения Leave. Если клиент не хочет больше получать трафик данной группы, он просто перестаёт посылать Report в ответ на Query. Когда не останется ни одного клиента, маршрутизатор по таймауту перестанет слать трафик.
Кроме того, не поддерживаются выборы Querier. За избежание дублирования трафика отвечает вышестоящий протокол, например, PIM, о котором мы будем говорить далее.
Версия 3 поддерживает всё то, что поддерживает IGMPv2, но есть и ряд изменений. Во-первых, Report отправляется уже не на адрес группы, а на мультикастовый служебный адрес 224.0.0.22. А адрес запрашиваемой группы указан только внутри пакета. Делается это для упрощения работы IGMP Snooping, о котором мы поговорим дальше.
Во-вторых, что более важно, IGMPv3 стал поддерживать SSM в чистом виде. Это так называемый Source Specific Multicast. В этом случае клиент может не просто запросить группу, но также указать список источников, от которых он хотел бы получать трафик или наоборот не хотел бы. В IGMPv2 клиент просто запрашивает и получает трафик группы, не заботясь об источнике.
Содержимое IGMP Membership Report в IGMPv3
Итак, IGMP предназначен для взаимодействия клиентов и маршрутизатора. Поэтому, возвращаясь к Примеру 2, где нет маршрутизатора, мы можем авторитетно заявить — IGMP там — не более, чем формальность. Маршрутизатора нет, и клиенту не у кого запрашивать мультикастовый поток. А заработает видео по той простой причине, что поток и так льётся от коммутатора — надо только подхватить его.
Напомним, что IGMP не работает для IPv6. Там существует протокол MLD.
Повторим ещё раз
1. Первым делом маршрутизатор отправил свой IGMP General Query после включения IGMP на его интерфейсе, чтобы узнать, есть ли получатели и заявить о своём желании быть Querier. На тот момент никого не было в этой группе.
2. Далее появился клиент, который захотел получать трафик группы 224.2.2.4 и он отправил свой IGMP Report. После этого пошёл трафик на него, но он отфильтрован из дампа.
3. Потом маршрутизатор решил зачем-то проверить — а нет ли ещё клиентов и отправил IGMP General Query ещё раз, на который клиент вынужден ответить (4).
5. Периодически (раз в минуту) маршрутизатор проверяет, что получатели по-прежнему есть, с помощью IGMP General Query, а узел подтверждает это с помощью IGMP Report.
6. Потом он передумал и отказался от группы, отправив IGMP Leave.
7. Маршрутизатор получил Leave и, желая убедиться, что больше никаких других получателей нет, посылает IGMP Group Specific Query… дважды. И по истечении таймера перестаёт передавать трафик сюда.
8. Однако передавать IGMP Query в сеть он по-прежнему продолжает. Например, на тот случай, если вы плеер не отключали, а просто где-то со связью проблемы. Потом связь восстанавливается, но клиент-то Report не посылает сам по себе. А вот на Query отвечает. Таким образом поток может восстановиться без участия человека.
IGMP Proxy и Мультикаст: что это в роутере и как включить?
И так, чтобы раскрыть тему IGMP Proxy, PIM и мультикаста полностью – давайте начнём с самого начала. Вы, наверное, уже знаете, как передаётся эфирное телевидение. То есть у нас есть телевизионная вышка, которая путём радиоволн передаёт закодированный сигнал. А клиент в свою очередь принимает этот сигнал с антенны и видит картинку на телевизоре. Аналогично все происходит и путём кабельного ТВ. Только разница в том, что в кабельном идёт сигнал непосредственно по проложенному проводу к каждому приёмнику.
Но общее все же есть – сигнал одновременно поступает к всем клиентам. Когда вы включите телевизор, то вы увидите сигнал, который отправляется всем. Но если вы включите, например тот же самый YouTube, то там все по-другому. Каждому пользователю предоставляется свой пакет трафика.
И вот мы подошли к вопросу – что же такое мультикаст? Это технология, которая объединяет два этих подхода передачи трафикав. На первом уровне, пакет отправляется только в одном экземпляре, но только тому клиенту, который сделал на него запрос. Приёмников на самом деле может быть несколько.
Самый яркий пример мультикаста — это использования IPTV. Не все провайдеры предоставляют данную возможность, но щас она набирает обороты и возможно, кто-то уже пользуется этой услугой. Представим, что у нас есть два пользователя: Вася и Петя, который подключены к одному провайдеру. Так вот сервер IPTV, отправляет сигналы не всем пользователям, а только тем, кто в данный момент подключен.
Но самое главное, что Вася и Петя будут получать сигнал и пакеты только того канала, который в данный момент включен. Например, Вася смотрит «Первый канал», а Петя «СТС». Сервер четко отправляет пакеты информации только по тому каналу, который активен. Ещё один пример — это онлайн конференция, которой часто пользуются крупные компании. Ведь нет смысла раскидываться трафиком и отправлять всем, можно просто от одного разливать информацию к каждому клиенту.
Реализация
А теперь встаём следующая проблема – как это организовать. Представьте себе, что в сети у провайдера очень много узлов, коммутаторов, маршутизаторов, серверов и есть центральный сервер того же IPTV. Задача сервера отправить трафик таким образом, чтобы он максимально быстро через минимальное количество узлов дошёл до пользователя.
При этом нужно это сделать так, чтобы не образовалось кольцо – когда трафик начинает ходить по кругу и бесконечно. Поэтому путь пакетов будет выглядеть как дерево, да и топология будет использоваться подобная. То есть выходя пакет от сервера он подходит к одному из узлов. Дальше узел должен определить куда дальше отправлять пакет.
А теперь мы подобрались к протоколу IGMP (Internet Group Management Protocol) — это такой протокол, который позволяет быстро подключаться клиенту к ближайшему маршрутизатору. Он сообщает ему, что нужен трафик по тому или иному каналу. Если же запроса к маршрутизатору нет, то он просто простаивает и тем самым высвобождает ресурсы сети.
Также используется PIM (Protocol Independent Multicast) протокол – эта такая система, которая выстраивает адрес от сервера к конечному получателю через одну ветвь дерева. При этом система постоянно мониторит путь, чтобы менять его, если какой-то сегмент выключен или был перемещён.
Проще говоря, сервер транслирует только один сигнал каждого телевизионного канала. И пользователи получают только сигнал того канала, который запросили. Одновременно один сигнал могут получать и несколько приёмников. Именно для этого и нужен протокол IGMP.
Куда идёт пакет
Рассмотрим на примере. Вообще данная технология использует IP адреса 224.0.0.0-239.255.255.255 диапазона. Например, сервер отправляет один канал с адресом 224.2.2.4. Это канал «СТС». IGMP протокол, использующийся только в отрезке между клиентом и ближайшим маршрутизатором, который к нему подключен.
Как включить на роутере
В роутере данная функция чаще всего нужна для нормального просмотра IPTV. По умолчанию эта функция уже включена, но можно проверить. Теперь я покажу как включить эту функцию на примере модели TP-Link.
Заходим в «Сеть» – «IPTV» и включаем «IGMP Прокси». Также не забываем поставить галочку «IGMP Snooping» – функция, исключающая получение трафика от группы, к которой не принадлежит клиент. На новых прошивках данный пункт находится там же, только изначально надо нажать на вкладку «Дополнительные настройки». Обязательно нажмите на кнопку «Сохранить» в само конце.
Что такое IGMP snooping в роутере
Ряд платформ в интернете используют метод multicast для передачи данных группе пользователей. Такая технология применяется для онлайн-игр, прямых трансляций, дистанционного обучения и даже для почтовых рассылок. Но мультивещание не всегда грамотно оптимизирует ретрансляцию трафика и нагружает сеть пользователя, поэтому для устранения этой проблемы создали функцию IGMP snooping. Разберёмся, что это за функция, и как включить её для оптимизации своего трафика.
Что такое и зачем нужна функция IGMP snooping
Для начала дадим определение IGMP, чтобы понять принцип работы технологии. Internet Group Management Protocol – протокол управления сетью мультивещания, который организует несколько устройств в группы. Он основан на протоколе IP и применяется в интернете повсеместно, эффективно используя ресурсы сети.
IGMP snooping – процесс отслеживания multicast-трафика между группой потребителей и хостом. Включенная функция snooping начинает анализировать запросы пользователя на соединение с мультивещательной группой и добавляет порт в список IGMP-вещания. После завершения использования мультитрафика, пользователь оставляет запрос и протокол, удаляет порт из списка групповой передачи данных.
Таким образом snooping исключает передачу пользователю ненужных данных через multicast каналы. Это делает обмен данными на канальном уровне сети более эффективным и учитывает потребности сетевого уровня, что в особенности важно для поставщиков информации. Пользователи также получат оптимизированный контент, хотя в итоге нагрузка на сеть возрастёт.
Без отслеживания и анализа данных, конечные потребители в виде конкретных IP-адресов, будут вынуждены «переваривать» дополнительную бесполезную для них информацию. IGMP snooping не только избавит пользователей от лишнего трафика, но и сделает обмен информацией более безопасным. Включенный режим отслеживания вовремя пресечёт попытки DDoS-атаки на сеть или конкретные адреса, к которым уязвим протокол Internet Group Management.
Активация функции IGMP snooping
Функция отслеживания и анализа трафика доступна на управляемых сетевых коммутаторах или свичах. Это устройство помогает реализовывать принципы группового вещания на канальном уровне сети. Для активации IGMP snooping требуется вручную включить и настроить её на коммутаторе. Неуправляемые аналоги не поддерживают режим анализа трафика, так как не могут быть настроены через интерфейс.
Перед использованием коммуникатора в вашей сети убедитесь, что конечный получатель (например, smart-tv) поддерживает режим snooping. Обычно устройства имеют соответствующий пункт в разделе «Настройка сетевого подключения», что заметно упрощает регулировку мультивещания.
Рассмотрим способ подключения функции через командную строку на примере популярных коммутаторов D-Link:
Последняя команда включает функцию IGMP Snooping Fast Leave, которая исключает порт из сети, как только пользователь сделал запрос «leave». Благодаря Fast Leave, потребитель не получит ненужные данные и не будет их обрабатывать. Это уменьшит нагрузку на сеть и позволит коммутатору работать более эффективно.
Виды IGMP snooping
Прослушка и анализ данных делится на два вида:
Snooping с активным алгоритмом ускоряет передачу данных и улучшает качество сети, но при этом создаёт дополнительную нагрузку на коммутатор. Фильтрация требует от устройства определённых затрат ресурсов памяти и CPU, тогда как простое отслеживание или ретрансляция – менее требовательная процедура. При этом активное отслеживание передаёт маршрутизатору данные только о самом последнем участнике группы, чтобы устройство не определило это, как отсутствие потребителей в канале, и не исключило порт из списка.
Функция IGMP snooping отлично сочетается с домашними сетями, если вы используете много технологий групповой IP-связи. Купив и настроив коммутатор с функцией активного отслеживания, вы значительно ускорите работу интернет-протокола и обезопасите домашнюю группу от взлома и проникновения злоумышленников.
Протокол IGMP proxy: описание, включение, настройка, устранение проблем
Протокол IGMP служит для управления многоадресной передачей данных и применяется в роутерах для организации подключенного к нему оборудования в группы.
Как и для чего включают IGMP?
У пользователей, пожелавших воспользоваться преимуществами IPTV через свой домашний маршрутизатор, иногда возникают сложности с подключением к интерактивному телевидению.
Некоторые модемы несовместимы для работы с этой технологией, а на отдельных просто требуется включить через web-конфигуратор igmp. Интерактивное ТВ функционирует посредством широковещательной передачи данных.
Если организовать просмотр такого телевидения с использованием маршрутизатора либо модема ADSL, то ко всем устройствам, соединенным с ними, будет осуществляться передача данных.
Для этого требуется поддержка роутером IGMP, однако старые версии устройств часто ее не имеют, либо у них не хватает аппаратной мощности, то есть просто зависают из-за перегрузки.
Процедура включения
На современном оборудовании обычно, чтобы просматривать IPTV, ручное подключение этого протокола осуществлять нет необходимости.
Достаточно произвести апгрейт программного обеспечения и после этого функция активируется в автоматическом режиме. Главное, чтобы роутер поддерживал этот протокол.
Чтобы включить поддержку IPTV вручную, следует запустить web-конфигуратор роутера и осуществить небольшую настройку. Например, на приборах ASUS потребуется исполнить следующие действия:
Примечание: На старых моделях маршрутизаторов пункт под номером «4» выполнять не требуется, так как в них достаточно активировать графу «IGMP прокси» и все заработает.
Устранение сопутствующих проблем
В случае, когда трансляция IPTV не заработала после выполненных мероприятий, нередко виновниками блокировки выступают брандмаундер системы, антивирусник или фаерволл.
Следует их временно отключить для диагностирования источника неполадок. Затем, к примеру, в файрволле разрешить активность протокола для просмотра интерактивного телевидения.
Если для просмотра интерактивного ТВ применяется приставка, то необходимо включить функцию «Мост».
В роутерах разных производителей она называется по-разному, например, в Asus «Choose WAN Bridge Port», а в TP Link «Network-Bridge». Лучше свериться с инструкцией конкретной модели аппарата.
Если трансляция сопровождается частыми перебоями (изображение зависает, звук затормаживается и т.п.), то это вызывается перегрузкой маршрутизатора.
Рекомендуется ограничить скорости скачивания для других клиентов сети или сократить число кабельных подключений, а также лимитировать количество соединений по Wi-Fi.