# PIM Sparse Mode

Совершенно другой подход применяет **PIM SM**. Несмотря на название (разреженный режим), он с успехом может применяться в любой сети с эффективностью как минимум не хуже, чем у PIM DM.\
Здесь отказались от идеи безусловного наводнения мультикастом сети. Заинтересованные узлы самостоятельно запрашивают подключение к дереву с помощью сообщений **PIM Join**.\
Если маршрутизатор не посылал Join, то и трафик ему отправляться не будет.

Для того, чтобы понять, как работает PIM, начнём с уже знакомой нам простой сети с одним PIM-маршрутизатором:\
![](http://img-fotki.yandex.ru/get/9763/83739833.38/0_da359_c396dba4_XL.png)\
Из настроек на R1 надо включить возможность маршрутизации мультикаста, PIM SM на двух интерфейсах (в сторону источника и в сторону клиента) и IGMP в сторону клиента. *Помимо прочих базовых настроек, конечно (IP, IGP).*

С этого момента вы можете расчехлить GNS и собирать лабораторию. Достаточно подробно о том, как собрать стенд для мультикаста я рассказал в этой [статье](https://linkmeup.ru/blog/126.html).

```
R1(config)#ip multicast-routing
R1(config)#int fa0/0
R1(config-if)#ip pim sparse-mode
R1(config-if)#int fa1/0
R1(config-if)#ip pim sparse-mode
```

> Cisco тут как обычно отличается своим особенным подходом: при активации PIM на интерфейсе, автоматически активируется и IGMP. На всех интерфейсах, где активирован PIM, работает и IGMP.\
> В то же время у других производителей два разных протокола включаются двумя разными командами: отдельно IGMP, отдельно PIM.\
> Простим Cisco эту странность? Вместе со всеми остальными?
>
> Плюс, возможно, потребуется настроить адрес RP (**ip pim rp-address 172.16.0.1**, например). Об этом позже, пока примите как данность и смиритесь.

Проверим текущее состояние таблицы мультикастовой маршрутизации для группы 224.2.2.4:

![show ip mroute](http://img-fotki.yandex.ru/get/9169/83739833.37/0_da308_1a7f06fb_L.png)

После того, как на источнике вы запустите вещание, надо проверить таблицу ещё раз.

![(\*, G) (S, G)](http://img-fotki.yandex.ru/get/9932/83739833.37/0_da304_f1641eea_XXL.png)

Давайте разберём этот немногословный вывод.

Запись вида **(\*, 224.2.2.4)** называется **(\*, G)**, /читается *старкомаджи*/ и сообщает нам о получателях. Причём не обязательно речь об одном клиенте-компьютере, вообще это может быть и, например, другой PIM-маршрутизатор. Важно то, в какие интерфейсы надо передавать трафик.\
Если список нисходящих интерфейсов (OIL) пуст — **Null**, значит нет получателей — а мы их пока не запускали.

Запись **(172.16.0.5, 224.2.2.4)** называется **(S, G)**, /читается *эскомаджи*/ и говорит о том, что известен источник. В нашем случае источник с адресом 172.16.0.5 вещает трафик для группы 224.2.2.4. Мультикастовый трафик приходит на интерфейс FE0/1 — это **восходящий** (**Upstream**) интерфейс.

Итак, нет клиентов. Трафик от источника доходит до маршрутизатора и на этом его жизнь кончается. Давайте добавим теперь получателя — настроим приём мультикаста на ПК.\
ПК отсылает IGMP Report, маршрутизатор понимает, что появились клиенты и обновляет таблицу мультикастовой маршрутизации.\
Теперь она выглядит так:

![OIL Multicast](http://img-fotki.yandex.ru/get/9323/83739833.37/0_da305_a28aa520_XL.png)

Появился и нисходящий интерфейс: FE0/0, что вполне ожидаемо. Причём он появился как в (\*, G), так и в (S, G). Список нисходящих интерфейсов называется \*OIL — Outgoing Interface List\_.

Добавим ещё одного клиента на интерфейс FE1/0:

![OIL Multicast](http://img-fotki.yandex.ru/get/9820/83739833.37/0_da307_e8818032_XL.png)

Если читать вывод дословно, то имеем:\
(\*, G): Есть получатели мультикастового трафика для группы 224.2.2.4 за интерфейсами FE0/0, FE1/0. Причём совершенно неважно, кто отправитель, о чём и говорит знак «\*».

(S, G): Когда мультикастовый трафик с адресом назначения 224.2.2.4 от источника 172.16.0.5 приходит на интерфейс FE0/1, его копии нужно отправить в FE0/0 и FE1/0.

Но это был очень простой пример — один маршрутизатор сразу знает и адрес источника и где находятся получатели. Фактически даже деревьев тут никаких нет — разве что вырожденное. Но это помогло нам разобраться с тем, как взаимодействуют PIM и IGMP.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://linkmeup.gitbook.io/sdsm/9.-multicast/2.-pim/1.-pim-sparse-mode.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
