Кратко

  • В IGMPv1/v2 хосты выбирали случайные таймеры. Услышав действительный Membership Report для своей группы, ожидающий хост останавливал свой таймер; обычно маршрутизатор узнавал лишь, что на канале есть хотя бы один участник.
  • Leave в v2 запускал ускоренную проверку, а не доказывал отсутствие всех. V3 убрал подавление отчётов между хостами, потому что состояния источников, их изменения и пересылка по портам перестали делать ответы взаимозаменяемыми.

Один свидетель отвечал на узкий вопрос

Многоадресному маршрутизатору на локальной сети надо решить, продолжать ли передавать группу G на этот канал. Для первой развилки ему не требуется перепись получателей. Достаточно одного: если кто-то ещё слушает, поток нужен.

RFC 1112, опубликованный в августе 1989 года, описал первую широко внедрённую версию IGMP. Членство менялось динамически и относилось к интерфейсу. Отправитель мог не входить в группу. Протокол не назначал владельца адреса и не раскрывал маршрутизатору перечень людей или процессов.

Он стандартизировал минимальное свидетельство: на непосредственно подключённой сети присутствует хотя бы один член. Для такой формулировки все положительные ответы были равны, поэтому одного хватало за остальных.

Временного докладчика выбирал случайный таймер

Маршрутизатор посылал Query на адрес всех хостов 224.0.0.1 с TTL один. Для каждой подходящей группы на входном интерфейсе хост запускал отдельный таймер со случайной задержкой от нуля до десяти секунд.

Первый истёкший таймер порождал Membership Report на адрес самой группы, тоже с TTL один. Другие члены на том же канале могли услышать его. Хост, который ещё ждал, прекращал свой таймер после действительного отчёта о той же группе.

Случайность растягивала ответы во времени, а взаимное прослушивание уменьшало их число. В обычном случае возникал один отчёт на группу. Победитель не становился представителем: в следующем цикле первым мог оказаться другой.

Подавление касалось не членства, а ожидающей передачи. Для записи G присутствует на интерфейсе I второе «да» не меняло решения. Поэтому его отсутствие не означало потерю нужной тогда информации.

Присутствие жило, пока его обновляли

Периодические Queries обновляли состояние маршрутизатора. Если в предусмотренной последовательности не приходил ни один Report, состояние группы истекало, и удалённый трафик G больше не требовалось выводить на этот канал.

Так работало мягкое состояние. Сломавшийся хост не обязан был отправить невозможное прощание: без свежего свидетельства его влияние исчезало со временем. Но отсутствие всех нельзя было вывести из молчания одного. Оно становилось допустимым выводом лишь после вопроса всему каналу и пустого интервала ответа.

Вступление объявлялось быстрее. Новый член сразу отправлял незапрошенный Report и повторял его после короткой случайной паузы на случай потери. Будучи первым слушателем, он не мог ждать очередного периодического опроса, иначе поток ещё не попал бы на сеть.

Архитектура разделяла три события: быстрое появление, сжатое подтверждение присутствия и осторожное истечение отсутствия. Ни одно не подтверждало доставку пакетов.

Leave просил проверить, а не выключить

RFC 2236 зафиксировал IGMPv2 в ноябре 1997 года. Появились Max Response Time, выбор querier, групповые запросы и Leave Group — средства сократить задержку после ухода последнего получателя.

Если хост помнил, что последним отвечал на Query для G, при уходе он должен был послать Leave на 224.0.0.2. Не последний докладчик мог молчать: другой участник недавно доказал своё присутствие.

Но «последний ответивший» не означает «последний оставшийся». Получив Leave, querier не удалял G. Он несколько раз с коротким интервалом отправлял Group-Specific Query. Любой оставшийся член отвечал и сохранял пересылку. Только последнее пустое окно позволяло считать группу локально отсутствующей.

Leave означал «перепроверь сейчас». Он не давал одному хосту права остановить приём других. Если в группе был участник v1, маршрутизатор v2 игнорировал Leave, поскольку старый хост не умел участвовать в новой процедуре ухода.

Состояние стало включать источник

IGMPv3 расширил объект отчёта. RFC 3376 определил его в 2002 году, а RFC 9776 в 2025 году стал действующим стандартом, сохранив совместимость и исправив неясности.

В режиме INCLUDE система просит G только от перечисленных источников; в EXCLUDE — от всех, кроме списка. Запросы сокетов сводятся в состояние интерфейса. Group Records передают текущее состояние, смену режима, новые разрешённые источники и источники, которые следует блокировать.

Два хоста в G теперь могут желать разных S. Source-Specific Multicast в RFC 4607 прямо определяет канал как (S,G). Сообщение одного о S1 не заменяет желание другого получать S2.

Обоснование v3 поэтому отменяет старую оптимизацию. Хост больше не снимает свой v3 Report, услышав чужой. Маршрутизаторам может потребоваться наблюдение по хостам для быстрого ухода или учёта; IGMP snooping на мостах плохо сочетается с подавлением; состояние хоста упрощается без отмены. Один v3-пакет, кроме того, объединяет несколько Group Records, экономя заголовки без уничтожения различий.

Случайная задержка осталась. Ответы на General Query по-прежнему распределяются внутри Max Response Time и не должны отправляться мгновенно всей группой. V3 отказался не от защиты против всплеска, а от вывода, что чужой отчёт всегда делает собственный лишним.

Коммутатор видел не канал, а отдельные порты

Первоначальная схема предполагала общую среду, где участники слышат один и тот же Report. Коммутатор с IGMP snooping принимает решения по портам.

Обычный мост рассылает multicast по всем пересылающим портам. Snooping читает IGMP и строит таблицу заинтересованных портов. Информационный RFC 4541 рекомендует направлять Membership Reports к портам маршрутизаторов, а не ко всем хостовым портам.

Если v1/v2 Report всё же попадёт к другому хосту, тот может подавить свой. Маршрутизатор уже знает, что G существует где-то на канале. Коммутатор мог не узнать порт молчащего хоста и затем отсечь от него желаемый поток.

Один пакет обслуживал две карты. Для маршрутизатора он доказывал G на канале; для коммутатора требовалось G на этом порту. Свидетели были равны в первой системе и различны во второй.

V3 посылает Reports на 224.0.0.22 и умеет складывать несколько записей в один пакет. Сжатие сохранилось, но переместилось из удаления отдельных наблюдений в упаковку, не стирающую их смысл.

Старый участник меняет смысл молчания

Версии сосуществуют. Услышав старую Query, хост v3 запускает таймер совместимости и временно использует прежний формат. Маршрутизатор тоже помнит старых членов, поскольку от них зависит трактовка Leave и списков источников.

Один старый аппарат может на время снизить выразительность всей группы. Совместимость сохраняет услугу, но самый грубый участник определяет, какие различия можно доказать на канале.

Для SSM RFC 9776 требует, чтобы SSM-aware хост не позволял отчёту v1/v2 подавить свою запись v3. Индикатор «IGMP включён» без версии и режима совместимости скрывает этот откат смысла.

Интерес к приёму не стал разрешением

IGMP передаёт локальное желание получать IPv4 multicast соседним маршрутизаторам. Он не строит межсетевое дерево, не удостоверяет абонента, не выдаёт право передачи и не гарантирует доставку.

RFC 9776 указывает, что конфиденциальности нет. Устройства на канале видят потенциально чувствительные интересы. Поддельный Report может поддерживать поток без настоящего получателя; старый поддельный Report — удерживать режим совместимости и ослаблять быстрый уход либо фильтр источников. TTL один, Router Alert и проверка локального источника ограничивают часть путей, но не являются криптографической аутентификацией.

Узость сигнала — его достоинство. Он сообщает достаточно для пересылки, не притворяясь идентичностью или правом. Использовать его как журнал доступа или счёт — значит дать протоколу власть, которой он не определял.

Источники и границы

RFC 1112 задаёт таймеры и подавление, RFC 2236 — Leave и последнюю проверку членов. RFC 3376 хранит историческое обоснование v3, RFC 9776 является текущей нормой. RFC 4541 описывает snooping, RFC 4607 — модель (S,G).

Эти тексты не устанавливают мировую долю внедрения, соответствие конкретных устройств или личность слушателя. Вывод о смене ценности доказательства основан на машинах состояний и прямо записанных мотивах проектирования.