Межсетевой протокол управления группами (IGMP)
Протокол IGMP (Internet Group Management Protocol) — это межсетевой протокол управления группами, который играет ключевую роль при организации мультикастовой передачи данных. Он входит в состав стандартного пакета TCP/IP и используется для осуществления многоадресной динамической рассылки. Учитывая широкое применение таких рассылок, для построения и обслуживания сетей важно иметь общее представление об IGMP протоколе: что это, и как он работает. Для этого важно не только осветить сам межсетевой протокол, но и дать понятие многоадресной рассылки и динамической многоадресной рассылке.
Что такое многоадресная рассылка?
Многоадресная рассылка, или Multicast — это способ передачи данных по сетям IPv4, который обеспечивает доставку единого потока информации одновременно тысячам частных или корпоративных пользователей. Работа в режиме Multicast предусматривает, что отправитель передает пакеты данных выбранной группе адресатов. При этом допускается подключение этих адресатов к разным подсетям.
Протокол IPv4 предполагает организацию отправки пакетов тремя способами:
- адресация определенному устройству;
- широковещательная рассылка;
- многоадресная рассылка.
В первом случае трафик передается только на конкретный компьютер. Этот способ позволяет пользователю выполнять значительную часть действий в интернете. Однако передача конкретному устройству потокового видео или других массивных объемов данных приведет к повышенной нагрузке на сеть. Поэтому для решения таких задач целесообразно использовать способы, позволяющие единожды передавать потоки, которые смогут получать многочисленные пользователи.
Широковещательная рассылка предполагает передачу данным от отправителя все подключенным к конкретной сети хостам. Сегодня этот метод используется редко, поскольку создает помехи для передачи других видов трафика.
Оптимальным решением становится многоадресная рассылка, при которой пакеты доставляются каждому подключенному к сети с определенным адресом хосту. Это дает значительную экономию полосы пропускания и снижает нагрузку на сеть.
При многоадресной рассылке сообщения отправляются на адрес группы Multicast, не имеющей географических и физических ограничений — то есть узлы могут быть расположены в разных странах и регионах. Главное, чтобы они были подписаны на рассылку (присоединены к группе). Для присоединения к группе Multicast и используется протокол IGMP.
Динамическая многоадресная рассылка
Чтобы обеспечить создание корректной конфигурации динамической многоадресной рассылки, необходим маршрутизатор или коммутатор, поддерживающий уровень 3. Коммутатор 3 уровня способен выполнять обработку многоадресных групп. Он использует межсетевой протокол IGMP для получения от клиентов сообщений присоединение (join) и исключения (leave). Эти сообщения используются для формирования многоадресных групп — добавления и удаления из них клиентов.
Кроме этого, в сетях, поддерживающих многоадресную рассылку, могут использоваться коммутаторов 2 уровня. Такие коммутаторы поддерживают IGMP Snooping. Благодаря этому обеспечивается возможность «считывать» IGMP трафик, проходящий между маршрутизаторами (запросчиками) и хостами. В результате коммутатор может контролировать присоединение портов к многоадресным группам и исключение их из многоадресных групп, обеспечивать динамическое перенаправление трафика только на те порты, которые входят в состав группы.
Запросчик IGMP регулярно отправляет сообщения IGMP Membership Query (запросы принадлежности IGMP) на адрес многоадресной рассылки 224.0.0.1. Эти запросы с определенным интервалом поступают всем поддерживающим многоадресную рассылку хостам. В результате коммутатор 3 уровня может отслеживать относящиеся к многоадресной группе порты.
Принципы работы IGMP
Функция протокола заключается в поддержании работы многоадресных групп. При отсутствии клиентов передача мультикастового трафика в соответствующий сегмент сети не требуется. Если появляется клиент, который хочет получать мультикастовый трафик, то он уведомляет об этом маршруты именно с помощью протокола IGMP.
Рассмотрим, как работает IGMP по порядку
При запуске клиента и задании на нем группы 224.2.2.4 в сеть направляется запрос IGMP Membership Report, которым узел сообщает о желании получать мультикастовый трафик. Запрос отправляется на адрес группы и указывается в пакете данных. Такие запросы маршрутизаторами никуда не пересылаются и действуют только в пределах своего сегмента.
После получения IGMP Membership Report маршрутизатор определяет наличие клиентов за соответствующим интерфейсом и заносит данные в таблицу.
Мультикастовый трафик передается клиенту. Чтобы не выполнять вещание впустую, маршрутизатор периодически проверяет наличие получателей. Такая проверка выполняется путем отправки запроса IGMP Query во все нисходящие интерфейсы. Запросы IGMP Query направляются на IP 224.0.0.1 с интервалом по умолчанию 60 секунд. После получения запроса IGMP Query, подключенный к группе хост отправляет в ответ сообщение IGMP Report, как и при подключении.
В случае если в ответ на запрос Query поступает хотя бы один Report, значит, в группе еще есть клиенты. Поэтому маршрутизатор продолжает вещание мультикастового трафика в соответствующий интерфейс. Если же интерфейс не отвечает на запросы 3 раза подряд, он удаляется из таблицы многоадресной маршрутизации и перестает получать трафик. Как правило, клиент отправляет Report по своей инициативе только при подключении, а в дальнейшем только отвечает на запросы маршрутизатора.
Принцип работы протокола динамической маршрутизации IGMP предусматривает использование механизма Report Suppression, в соответствии с которым при получении Query клиент не отправляет Report, а берет определенный интервал. Его продолжительность может составлять от 0 до времени Max Response Time, которое указывается в Query. Это необходимо для того, чтобы избежать перегрузки сети многочисленными ответами от клиентов. Кроме того, поскольку Report отправляется на адрес группы, его получают и все клиенты, находящиеся в пределах соответствующего сегмента. При получении Report от другого клиента группы узел не отправляет свой ответ. Благодаря этому Report обычно отправляет только один клиент, чего достаточно маршрутизатору для продолжения вещания на узел.
Когда клиент выходит из группы, например, при отключении пользователем плеера потокового видео, он направляет на адрес группы сообщение IGMP Leave. После получения Leave не может отключить конкретного клиента, поскольку не различает их. Он работает с нисходящим интерфейсом, в котором может находиться несколько клиентов. Поэтому после получения Leave маршрутизатор некоторое время продолжает вещание. При этом он отправляет на адрес группы, из которой поступил Leave, запрос IGMP Query.
Такой запрос называют Group Specific Query, и отвечают на него только клиенты, подключенные к данной группе. Запросы этого типа посылаются дважды. Один из них — обязательный, второй — контрольный. Если в ответ на Group Specific Query приходит Report, маршрутизатор продолжает вещание на группу. Если ответ не поступает, то он удаляет ее из таблицы маршрутизации и прекращает вещание.
При наличии в клиентском сегменте двух или нескольких маршрутизаторов применяется более сложная схема работы протокола IGMP. Это необходимо, чтобы исключить дублирование мультикастового трафика, поскольку при стандартной схеме каждый маршрутизатор будет получать от клиентов Report. Чтобы предотвратить такое дублирование, применяется механизм выбора опрашивателя Querier, в качестве которого назначается один из маршрутизаторов. Именно он реагирует на сообщения Report и Leave, а также транслирует мультикастовый трафик. Остальные маршрутизаторы в сегменте только слушают Report и находятся в резерве.