Глава 5. PIM-SSM: различия между версиями
м |
|||
(не показано 12 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{#description2:PIM ASM. Как работает PIM SSM. Адресное пространство PIM SSM. Использование IGMPv3 и SSM. PIM-SM + SSM. Конфигурация PIM SSM. Траблшутинг. Информация для подготовки к экзаменам Juniper Networks}} | |||
==ASM== | ==ASM== | ||
*Нахождение источника - задача сети. | |||
:*PIM-DM: флуд от источника всем получателям. Из-за этого хранится много (S,G) => проблемы с масштабируемостью. | :*PIM-DM: флуд от источника всем получателям. Из-за этого хранится много (S,G) => проблемы с масштабируемостью. | ||
:*PIM-SM: регистрация источника на RP. Более сложный механизм. | :*PIM-SM: регистрация источника на RP. Более сложный механизм. | ||
:*Междоменный мультикаст: MSDP. | :*Междоменный мультикаст: MSDP. | ||
*Поддерживает несколько типов приложений: | |||
:*One-to-many | :*One-to-many | ||
:*Many-to-many | :*Many-to-many | ||
*Распределение адресного пространства - адреса групп должны быть уникальными в глобальной сети. | |||
:* Выделены блоки SDP/SAP, GLOP, Admin scoped. | :* Выделены блоки SDP/SAP, GLOP, Admin scoped. | ||
Строка 17: | Строка 19: | ||
*Нахождение источника - задача приложения у получателя. | *Нахождение источника - задача приложения у получателя. | ||
:*Получатель уже знает о необходимом источнике. | :*Получатель уже знает о необходимом источнике. | ||
:*Получатель подписывает на определенный канал - (S,G). | :*Получатель подписывает на определенный канал - (S,G). | ||
:*Приложение должно поддерживать IGMPv3. | |||
*Для междоменного мультикаста больше не нужно использование MSDP и RP. | |||
*Использует часть PIM-SM функционала: | *Использует часть PIM-SM функционала: | ||
:*Всегда используется (S,G) source-based tree. | :*Всегда используется (S,G) source-based tree. | ||
Строка 42: | Строка 46: | ||
SSM не работает с shared-tree. SSM не обрабатывает сообщения вида: (*,G). | SSM не работает с shared-tree. SSM не обрабатывает сообщения вида: (*,G). | ||
Junos позволяет | Junos позволяет определить другое поведение для адресных блоков: | ||
*Добавлять адресное пространство для использования только SSM. | |||
set routing-options multicast ssm-groups 227.0.0.0/24 | set routing-options multicast ssm-groups 227.0.0.0/24 | ||
*Позволяет ASM использовать SSM блок. | |||
set routing-options multicast asm-override-ssm | set routing-options multicast asm-override-ssm | ||
Строка 84: | Строка 86: | ||
Блок 232/8 работает только с обменом сообщений для source-based tree. Никаких сообщений для shared-tree. | Блок 232/8 работает только с обменом сообщений для source-based tree. Никаких сообщений для shared-tree. | ||
*Сегмент получателя (receiver DR): | |||
:*игнорируются любый (*,G) сообщения | :*игнорируются любый (*,G) сообщения | ||
:*не должен отправлять (*,G) upstream роутерам | :*не должен отправлять (*,G) upstream роутерам | ||
*Сегмент источника (source DR): | |||
:*не должен отправлять register сообщения к RP, когда получен трафик от источника. | :*не должен отправлять register сообщения к RP, когда получен трафик от источника. | ||
*RP роутер: | |||
:*игнорирует register сообщения от source DR. | :*игнорирует register сообщения от source DR. | ||
:*игнорирует SA сообщения от MSDP пиров. | :*игнорирует SA сообщения от MSDP пиров. | ||
*Другие роутеры: | |||
:*игнорируют все (*,G) сообщения от downstream роутеров. | :*игнорируют все (*,G) сообщения от downstream роутеров. | ||
Строка 103: | Строка 105: | ||
На интерфейсах к сторону получателей - IGMPv3. При этом на такие интерфейсы буду приходить и запросы от IGMPv1, v2, которые будет использовать для своей работы ASM. | На интерфейсах к сторону получателей - IGMPv3. При этом на такие интерфейсы буду приходить и запросы от IGMPv1, v2, которые будет использовать для своей работы ASM. | ||
*На сети нужен ASM + SSM: в этом случае конфиг должен быть как для стандартной PIM-SM модели с определенным RP discovery механизмом. | |||
*На сети нужен только SSM: в этом случае нужно просто сконфигурировать все интерфейсы в sparse mode. | |||
Для использования адресного пространства совместно: | Для использования адресного пространства совместно: | ||
Строка 112: | Строка 112: | ||
set routing-options multicast asm-override-ssm | set routing-options multicast asm-override-ssm | ||
===SSM-mapping=== | |||
Если получатели не поддерживают IGMPv3, SSM maps могут переделать join из (*,G) в (S,G): | Если получатели не поддерживают IGMPv3, SSM maps могут переделать join из (*,G) в (S,G): | ||
1. | 1. | ||
set policy-options policy-statement ssm-mapping-policy term 1 from route-filter 232.7.7.7/32 exact | set policy-options policy-statement ''ssm-mapping-policy'' term 1 from route-filter 232.7.7.7/32 exact | ||
set policy-options policy-statement ssm-mapping-policy term 1 then accept | set policy-options policy-statement ''ssm-mapping-policy'' term 1 then accept | ||
2. | 2. | ||
set routing-options multicast ssm-map | set routing-options multicast ssm-map ''ssm-mapping-example'' policy ''ssm-mapping-policy'' | ||
set routing-options multicast ssm-map | set routing-options multicast ssm-map ''ssm-mapping-example'' source 192.168.100.10 | ||
3. | 3. | ||
set protocols igmp interface ge-0/0/0.0 ssm-map | set protocols igmp interface ge-0/0/0.0 ssm-map ''ssm-mapping-example'' | ||
result: (*, 232.7.7.7) -> (192.168.100.10, 232.7.7.7) | result: (*, 232.7.7.7) -> (192.168.100.10, 232.7.7.7) | ||
Для IPv6 делается все точно по такому же алгоритму, только в конце ssm-map применяется в рамках протокола mld. | |||
Для troubleshoting используются все те же команды. | Для troubleshoting используются все те же команды. | ||
==Troubleshooting== | |||
show pim interfaces | |||
show pim neighbors extensive || можно посмотреть RX Join groups!! | |||
show pim statictics | |||
show pim join extensive || помимо прочего, полезно: "Upstream state: Join to Source, Prune to RP" | |||
show pim source detail | |||
show pim rps || какие rp известны, через какой механизм, какой набор групп приходит | |||
show pim rps extensive || помимо того, что выше - видны конкретные группы, статус, time active и много всяких подробностей | |||
show pim bootsrap || активный BSR роутер | |||
show multicast rpf x.x.x.x | |||
show multicast next-hops | |||
show multicast usage | |||
show multicast route extensive || можно посмотреть и трафик, относящийся к группе | |||
show route table inet.1 || таблица форвардинга - показана пара G+S | |||
show route table inet.0 | net.2 || проверяем, что source-address есть в этой таблице и доступен | |||
traceoptions || для диагностики не забываем включать | |||
До того, как проверять PIM, проверяем unicast связность от роутера до источника мультикаста (по таблицам маршрутизации) | |||
show pim neighbors | |||
Instance: PIM.master | |||
Interface IP V Mode Option Uptime Neighbor addr | |||
xe-1/1/0.910 4 2 HPLGT 13w2d5h 212.1.253.189 | |||
xe-1/2/0.822 4 2 HPLG 03:08:00 192.168.152.49 | |||
B = Bidirectional Capable = bidirectional mode supported | |||
G = Generation Identifier = gracefull restart turned on for pim | |||
H = Hello Option Holdtime, | |||
L = Hello Option LAN Prune Delay, | |||
P = Hello Option DR Priority, | |||
T = Tracking Bit = Join Suppression supported, если нет T - то у соседа настроен: ''reset-tracking-bit'' | |||
show pim neighbors detail | |||
Interface: xe-1/2/0.822 | |||
Address: 192.168.152.49, IPv4, PIM v2, ''sg Join Count: 2'', tsg Join Count: 0 | |||
BFD: Disabled | |||
Hello Option Holdtime: 105 seconds 102 remaining | |||
Hello Option DR Priority: 1 | |||
Hello Option Generation ID: 1593016797 | |||
Hello Option LAN Prune Delay: delay 1000 ms override 3000 ms | |||
Address: 192.168.152.50, IPv4, PIM v2, Mode: Sparse, sg Join Count: 0, tsg Join Count: 0 | |||
Hello Option Holdtime: 65535 seconds | |||
Hello Option DR Priority: 1 | |||
Hello Option Generation ID: 1898464853 | |||
Hello Option LAN Prune Delay: delay 500 ms override 2000 ms | |||
Join Suppression supported | |||
PIM Join и PIM Prune можно посмотреть в '''pim statistics''' (как принятые так и отправленные). | |||
> show multicast route group 235.69.101.1 extensive | |||
Instance: master Family: INET | |||
Group: 235.69.101.1 | |||
Source: 192.168.151.11/32 | |||
Upstream interface: xe-1/2/0.822 | |||
Downstream interface list: | |||
xe-1/2/0.900 | |||
Number of outgoing interfaces: 1 | |||
Session description: Unknown | |||
'''Statistics: 447 kBps, 332 pps, 7110535 packets''' | |||
Next-hop ID: 1048579 | |||
Upstream protocol: PIM | |||
Route state: Active | |||
'''Forwarding state: Forwarding''' | |||
Cache lifetime/timeout: 360 seconds | |||
Wrong incoming interface notifications: 28 | |||
Uptime: 06:01:21 | |||
> show pim statistics interface xe-1/2/0.822 | |||
Instance: PIM.master Family: INET | |||
PIM Interface statistics for xe-1/2/0.822 | |||
PIM Message type Received Sent Rx errors | |||
'''V2 Hello 389 413 0''' | |||
V2 Register 0 0 0 | |||
V2 Register Stop 0 0 0 | |||
'''V2 Join Prune 0 195 0''' | |||
В monitor traffic interface не будут отображаться PIM Join, PIM Prune. Если требуется помониторить входящие и исходящие пакеты, то можно только замиррорить трафик. | |||
> show route table inet.1 | |||
235.69.101.1,192.168.151.11/32*[PIM/105] 05:57:24 | |||
Multicast (IPv4) Composite | |||
235.69.101.20,192.168.151.12/32*[PIM/105] 05:57:24 | |||
Multicast (IPv4) Composite | |||
==Дополнительная информация== | |||
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]] | |||
*[[Глава 2. Multicast, IGMP]] | |||
*[[Политики в мультикасте | Глава 6. Политики в мультикасте]] |
Текущая версия на 18:39, 15 июля 2021
ASM
- Нахождение источника - задача сети.
- PIM-DM: флуд от источника всем получателям. Из-за этого хранится много (S,G) => проблемы с масштабируемостью.
- PIM-SM: регистрация источника на RP. Более сложный механизм.
- Междоменный мультикаст: MSDP.
- Поддерживает несколько типов приложений:
- One-to-many
- Many-to-many
- Распределение адресного пространства - адреса групп должны быть уникальными в глобальной сети.
- Выделены блоки SDP/SAP, GLOP, Admin scoped.
SSM
- Нахождение источника - задача приложения у получателя.
- Получатель уже знает о необходимом источнике.
- Получатель подписывает на определенный канал - (S,G).
- Приложение должно поддерживать IGMPv3.
- Для междоменного мультикаста больше не нужно использование MSDP и RP.
- Использует часть PIM-SM функционала:
- Всегда используется (S,G) source-based tree.
- В основном использует 1 тип приложений: One-to-many
- Распределние адресного пространства:
- Выделен блок: 232/8.
- Один и тот же адрес группы может использоваться разными источниками на просторах всего интернета. Из-за этого усложнены DoS атаки.
Как работает
- Получатель знает все источники и группы, к которым он может подписаться (может быть заранее полученный список каналов на приставке).
- От получателя subscribe (S,G), используя IGMPv3 (include mode).
- DR на сегменте получателя шлет join (S,G) в сторону источника и начинает строить source-based tree.
- DR на сегменте источника как только получил join (S,G) - начинает слать трафик по shortest path tree (spt) к получателю.
Разница в терминологии
- Address identifier: (G) vs (S,G)
- Address destination: group vs channel
- Receiver protocol: IGMPv1,2,3 vs IGMPv3
- Receiver Operations: Join,Leave vs Subscribe/Unsubscribe
- Address range: 224/4, exclude 232/8 vs 232/8
Адресное пространство
SSM не работает с shared-tree. SSM не обрабатывает сообщения вида: (*,G).
Junos позволяет определить другое поведение для адресных блоков:
- Добавлять адресное пространство для использования только SSM.
set routing-options multicast ssm-groups 227.0.0.0/24
- Позволяет ASM использовать SSM блок.
set routing-options multicast asm-override-ssm
IGMPv3 + SSM
ASM использует 1,2,3 версии протокола. Group joins не определяют конкретный источник. 3 версия предусматривает работу именно с (S,G), что не очень то подходит по ASM, поэтому для ASM IGMPv3 работает только в режиме exclude.
SSM использует только 3 версию. При подписке должны быть определены источник и группа. Этот функционал может обеспечить IGMPv3 include mode.
В IGMPv3 включены 2 новых опции:
- include (этот режим обеспечивает определение источника для группы => используется только SSM)
- exclude (этот режим позволяет исключать определенный источник из join сообщения => поддерживается ASM)
IGMPv3 работа получателя
- получатель отправляет membership report на DA = 224.0.0.22
membership report включает в себя 3 основных типа:
- current-state record: MODE_IS_INCLUDE, MODE_IS_EXCLUDE;
- filter-mode-change (когда происходит смена режима): CHANGE_TO_INCLUDE_MODE, CHANGE_TO_EXCLUDE_MODE;
- source-list-change (когда происходит подписка/отписка): ALLOW_NEW_SOURCES, BLOCK_OLD_SOURCES;
Для SSM модели используется только 3 операции:
- подписка: ALLOW_NEW_SOURCES
- поддержание подписки: MODE_IS_INCLUDE
- отписка: BLOCK_OLD_SOURCES
Типы Query
- general query ->224.0.0.1
- group-specific query
- group-source-specific-query (include source address).
PIM-SM + SSM
SSM это упрощенная форма PIM-SM. Используется только часть функционала от PIM-SM.
Блок 232/8 работает только с обменом сообщений для source-based tree. Никаких сообщений для shared-tree.
- Сегмент получателя (receiver DR):
- игнорируются любый (*,G) сообщения
- не должен отправлять (*,G) upstream роутерам
- Сегмент источника (source DR):
- не должен отправлять register сообщения к RP, когда получен трафик от источника.
- RP роутер:
- игнорирует register сообщения от source DR.
- игнорирует SA сообщения от MSDP пиров.
- Другие роутеры:
- игнорируют все (*,G) сообщения от downstream роутеров.
Вообще, PIM-SM позволяет использовать как ASM, так и SSM. В зависимости от получаемых сообщений и сконфигурированных SSM блоков, DR роутер устанавливает либо shared tree к RP, либо source-based tree к источнику.
Config
На интерфейсах к сторону получателей - IGMPv3. При этом на такие интерфейсы буду приходить и запросы от IGMPv1, v2, которые будет использовать для своей работы ASM.
- На сети нужен ASM + SSM: в этом случае конфиг должен быть как для стандартной PIM-SM модели с определенным RP discovery механизмом.
- На сети нужен только SSM: в этом случае нужно просто сконфигурировать все интерфейсы в sparse mode.
Для использования адресного пространства совместно:
set routing-options multicast ssm-groups 227.0.0.0/24 set routing-options multicast asm-override-ssm
SSM-mapping
Если получатели не поддерживают IGMPv3, SSM maps могут переделать join из (*,G) в (S,G):
1.
set policy-options policy-statement ssm-mapping-policy term 1 from route-filter 232.7.7.7/32 exact set policy-options policy-statement ssm-mapping-policy term 1 then accept
2.
set routing-options multicast ssm-map ssm-mapping-example policy ssm-mapping-policy set routing-options multicast ssm-map ssm-mapping-example source 192.168.100.10
3.
set protocols igmp interface ge-0/0/0.0 ssm-map ssm-mapping-example
result: (*, 232.7.7.7) -> (192.168.100.10, 232.7.7.7)
Для IPv6 делается все точно по такому же алгоритму, только в конце ssm-map применяется в рамках протокола mld.
Для troubleshoting используются все те же команды.
Troubleshooting
show pim interfaces show pim neighbors extensive || можно посмотреть RX Join groups!! show pim statictics show pim join extensive || помимо прочего, полезно: "Upstream state: Join to Source, Prune to RP" show pim source detail show pim rps || какие rp известны, через какой механизм, какой набор групп приходит show pim rps extensive || помимо того, что выше - видны конкретные группы, статус, time active и много всяких подробностей show pim bootsrap || активный BSR роутер show multicast rpf x.x.x.x show multicast next-hops show multicast usage show multicast route extensive || можно посмотреть и трафик, относящийся к группе show route table inet.1 || таблица форвардинга - показана пара G+S show route table inet.0 | net.2 || проверяем, что source-address есть в этой таблице и доступен traceoptions || для диагностики не забываем включать
До того, как проверять PIM, проверяем unicast связность от роутера до источника мультикаста (по таблицам маршрутизации)
show pim neighbors Instance: PIM.master Interface IP V Mode Option Uptime Neighbor addr xe-1/1/0.910 4 2 HPLGT 13w2d5h 212.1.253.189 xe-1/2/0.822 4 2 HPLG 03:08:00 192.168.152.49
B = Bidirectional Capable = bidirectional mode supported G = Generation Identifier = gracefull restart turned on for pim H = Hello Option Holdtime, L = Hello Option LAN Prune Delay, P = Hello Option DR Priority, T = Tracking Bit = Join Suppression supported, если нет T - то у соседа настроен: reset-tracking-bit
show pim neighbors detail Interface: xe-1/2/0.822 Address: 192.168.152.49, IPv4, PIM v2, sg Join Count: 2, tsg Join Count: 0 BFD: Disabled Hello Option Holdtime: 105 seconds 102 remaining Hello Option DR Priority: 1 Hello Option Generation ID: 1593016797 Hello Option LAN Prune Delay: delay 1000 ms override 3000 ms Address: 192.168.152.50, IPv4, PIM v2, Mode: Sparse, sg Join Count: 0, tsg Join Count: 0 Hello Option Holdtime: 65535 seconds Hello Option DR Priority: 1 Hello Option Generation ID: 1898464853 Hello Option LAN Prune Delay: delay 500 ms override 2000 ms Join Suppression supported
PIM Join и PIM Prune можно посмотреть в pim statistics (как принятые так и отправленные).
> show multicast route group 235.69.101.1 extensive Instance: master Family: INET Group: 235.69.101.1 Source: 192.168.151.11/32 Upstream interface: xe-1/2/0.822 Downstream interface list: xe-1/2/0.900 Number of outgoing interfaces: 1 Session description: Unknown Statistics: 447 kBps, 332 pps, 7110535 packets Next-hop ID: 1048579 Upstream protocol: PIM Route state: Active Forwarding state: Forwarding Cache lifetime/timeout: 360 seconds Wrong incoming interface notifications: 28 Uptime: 06:01:21
> show pim statistics interface xe-1/2/0.822 Instance: PIM.master Family: INET PIM Interface statistics for xe-1/2/0.822 PIM Message type Received Sent Rx errors V2 Hello 389 413 0 V2 Register 0 0 0 V2 Register Stop 0 0 0 V2 Join Prune 0 195 0
В monitor traffic interface не будут отображаться PIM Join, PIM Prune. Если требуется помониторить входящие и исходящие пакеты, то можно только замиррорить трафик.
> show route table inet.1 235.69.101.1,192.168.151.11/32*[PIM/105] 05:57:24 Multicast (IPv4) Composite 235.69.101.20,192.168.151.12/32*[PIM/105] 05:57:24 Multicast (IPv4) Composite