Глава 2. Multicast, IGMP
Общее
Мультикаст = поток UDP на определенные адреса.
Адресация
- 224/8 - local network control block
- 232/8 - под SSM
- 233/8 - используется под глобальную мультикаст-адресацию (GLOP) || 233.[first byte of AS].[second byte of AS].1-255 || только для 16-ти битных AS
- 234/8 - unicast-prefix-based IPv4
- 239/8 - administratively scoped block || это адреса, которые могут быть использованы в разных частях сети. Тоже самое, что и private IP.
Multicast IP => multicast mac
Если не заморачиваться почему так, то правило перевода простое:
Конвертируем последние 23 бита IP в 10-ую системе счисления. 224.10.8.5: 0001010.00001000.00000101 => 0a.08.05
Прибавляем к 01-00-5e переведенное значение: 01-00-5e + 0a-08-05 = 01-00-5e-0a-08-05
Проблема в том, что для разных мультикаст-групп (адресов) - мак-адреса будут пересекаться, т.к. не учитываются первые биты ip-адреса.
Multicast forwarding
unicast forwarding основан на dest ip.
multicast forwarding основан на source ip.
RPF-check для источника: сравнивается с какого интерфейса фактически пришел мультикаст пакет с тем, откуда по unicast table пакет должен приходить (от источника). Если одинаков - rpf done, разные - fail. То, что прошло RPF-check хранится в inet.1.
show multicast rpf <group ip>
Routing tables
inet.0 - для проведения RPF-check. Если unicast и multicast топологии одинаковые, то inet.0 и inet.2 будут одинаковы.
inet.1 - для сохранения результатов RPF-check для передачи трафика.
inet.2 - если для multicast на сети должна быть использована другая топология, то используем эту таблицу. inet.2 в таком случае будет использоваться для RPF-check. MP-BGP и multitopology IS-IS могут напрямую заполнять маршрутной информацией inet.2. Все остальные протоколы должны использовать RIB-groups (копирование маршрутов из одной таблицы в другую).
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: Когда роутер получил 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
- Для выбора query-router нет отдельного механизма. Выбирать должен routing protocol.
IGMP v 2
- Чтобы подписаться, хосты шлют report-message.
- Чтобы отписаться, хосты шлют leave-group message.
- Чтобы проверить наличие подписчиков, роутер шлет group-specific message.
- Таймаут, после которого роутер перестает вещать: нет ответа от хостов в течение 2 сек (дефолт).
Robusness count * IGMP last member query interval = 2*1 = 2
- Query-router - с наименьшим ip. Если падает query-router, его роль выполняет non-query router.
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 (все остальные).
Передача трафика:
1. Весь трафик направлен в multicast-router интерфейс.
2. Если через IGMP-snooping свитч узнает о портах, за которыми сидят получатели, то шлет трафик туда.
3. 224/8 сеть бродкастом идет во все порты, кроме входящего.
Стандартное расширение IGMP позволяет только обрабатывать query от роутера и сообщения от получателей. Не генерирует IGMP сообщения.
IGMP snooping proxy ведет себя как роутер для получателей (генерирует query), работает как получатели для роутера (генерирует leave и join сообщения).
Тем самым уменьшается кол-во report-сообщений для роутера.
Configuration
На интерфейсах с активным pim, автоматически включается IGMPv2.
Можно менять дефолтные значения всяких таймеров.
Можно статически подписываться на какую-то группу (полезно для тестов). При этом интерфейс прсто добавляется в outgoing list.
Troubleshoting
sh igmp interfaces sh igmp groups sh igmp statistics traceoptions
© Наталия Бобкова 2014—2022