> For the complete documentation index, see [llms.txt](https://adavyshin.gitbook.io/networks/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-multicast.md).

# Лабораторная работа: Multicast

## Работа с IGMP на Cisco IOS

**IGMP (Internet Group Management Protocol)** — это **протокол сетевого уровня** , который используется в IPv4 для управления членством устройств в multicas&#x74;**-группах**. В рамках IGMP происходит взаимодействие конечных хостов и маршрутизаторов,  в рамках которого хосты сообщают в каких multicast-потоках они заинтересованы.

**Версии IGMP:**

<table><thead><tr><th width="112" align="center">Версия </th><th width="418">Описание</th><th>Использование</th></tr></thead><tbody><tr><td align="center">IGMPv1</td><td>Первая версия; можно только присоединиться к группе, но нельзя явно покинуть.</td><td>Устарела</td></tr><tr><td align="center">IGMPv2</td><td>Добавлены сообщения о выходе из группы и улучшено опросное взаимодействие маршрутизаторов.</td><td>Широко используется</td></tr><tr><td align="center">IGMPv3</td><td>Поддержка <code>Source-Specific Multicast (SSM)</code> — можно выбрать, от какого источника получать поток.</td><td>Современные сети</td></tr></tbody></table>

**Типы сообщений IGMP:**

1. **`Membership Query`** — запрос от маршрутизатора, чтобы узнать, какие группы активны в сети.
2. **`Membership Report`** — ответ от хоста (устройства), который сообщает, что хочет получать данные от определённой группы.
3. **`Leave Group`** — сообщение от хоста, который хочет выйти из группы (начиная с IGMPv2).

Для того чтобы маршрутизатор начал отправлять Memborship Query сообщения, нам на интерфейсе в cторону широковещательного сегмента необходимо включить PIM.

🔧 Настройка маршрутизатора <kbd>R1</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  ip pim dense-mode
```

🔧 Настройка маршрутизатора <kbd>R2</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  ip pim dense-mode
```

Посмотреть состояние IGMP можно с помощью команды `show ip igmp interface`.

🔬 Смотрим на вывод `show ip igmp interface` на маршрутизаторе <kbd>R1</kbd>:

<figure><img src="/files/BtagD9guGSt8d2aqDShI" alt=""><figcaption></figcaption></figure>

Давайте пройдёмся по выводу:

* **Query Interval (60 сек)** — как часто маршрутизатор рассылает IGMP-запросы.
* **Querier Timeout (120 сек)** — через сколько секунд маршрутизатор перестаёт считать другого querier’а активным.
* **Max Query Response Time (10 сек)** — сколько времени хостам даётся на ответ.
* DR (Designated Router) — основной маршрутизатор для отправки мультикаста в сегмент - маршрутизатор <kbd>R2</kbd> (10.100.0.252).
* Querier (IGMP querying router) - маршрутизатор, ответственный за отправку запросов о актуальности мультикаст-групп - маршрутизатор <kbd>R1</kbd> (10.100.0.251).
* Multicast-адрес **`224.0.1.40`** — служебная группа, для протоколов сетевого управления или синхронизации IGMP.

Включим на устройствах <kbd>Host1</kbd> и <kbd>Host2</kbd> подписку на multicast-групы:

🔧 Настройка клиентского хоста <kbd>HOST1</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  ip igmp join-group 227.100.1.1
```

🔧 Настройка клиентского хоста <kbd>HOST2</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  ip igmp join-group 227.100.1.1
```

🔬Проверяем теперь подписку на IGMP-группы на маршрутизаторах <kbd>R1</kbd> и <kbd>R2</kbd>:

<figure><img src="/files/H7xyV69gYbC9AudshVUD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yiA9rAbphlQ3Not6GXNQ" alt=""><figcaption></figcaption></figure>

Great! Хосты <kbd>Host1</kbd> и <kbd>Host2</kbd> зарегистрировались на наших маршрутизаторах.

Но для того, чтобы работала multicast-маршрутизация на наших девайсах, нужна дополнительная команды ip multicast-routing.

🔧 Включение multicast-перессылки на маршрутизаторе <kbd>R1</kbd>:

```
conf term
!
ip multicast-routing
```

🔧 Включение multicast-перессылки на маршрутизаторе <kbd>R2</kbd>:

```
conf term
!
ip multicast-routing
```

Теперь необходимо выждать секунд 30 и проверить multicast-маршруты на наших маршрутизаторах командой `show ip mroute`:

<figure><img src="/files/fcQqD1Dk82TRZ6bgHwt9" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/pifei9t4WzLzMwznSTAg" alt=""><figcaption></figcaption></figure>

Так как у нас два маршрутизатора для широковещательного сегмента 10.100.0.0/24, давайте настроим протокол резервирования шлюза по умолчанию на <kbd>R1</kbd> и <kbd>R2</kbd>.

🔧 Настройка маршрутизатора <kbd>R1</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  vrrp 100 priority 120
  vrrp 100 ip 10.100.0.1
```

🔧 Настройка маршрутизатора <kbd>R2</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  vrrp 100 ip 10.100.0.1
```

## PIM Dense-mode

Прежде чем включить работу протокола PIM, нам необходимо реализовать маршрутизацию в рамках всех наших сетей, так как у multicast-пакета только multicast-адрес, а адрес отправителя остаётся unicast. Предлагают пройтись по маршрутизаторам и включить протокол динамической маршрутизации  OSPF на всех промежуточных узлах от клиентов до Multicast-серверов.

Для PIM Dense-mode логика такая:

1. Источник появляется → роутер начинает флудит поток на все PIM-интерфейсы.
2. Если вниз по какому-либо интерфейсу нет получателей, сосед говорит `Prune`,\
   и вверх по дереву интерфейс становится `Prune/Dense`.
3. Если позже появится получатель, сосед пошлёт `Graft`, и интерфейс снова станет `Forward`.

{% hint style="info" %}
Команда auto-cost reference-bandwidth 10000 меняет опорную скорость, используемую при вычислении стоимости интерфейсов. Значение 10000 задано в Mbit/s, то есть опорной скоростью становиться 10 Gbit/s
{% endhint %}

🔧 Настройка маршрутизатора <kbd>R1</kbd>:

```
conf term
!
router ospf 100
  router-id 10.1.1.1
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim dense-mode
```

🔧 Настройка маршрутизатора <kbd>R2</kbd>:

```
conf term
!
router ospf 100
  router-id 10.2.2.2
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-4
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim dense-mode
```

🔧 Настройка маршрутизатора <kbd>R3</kbd>:

```
conf term
!
router ospf 100
  router-id 10.3.3.3
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-3
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim dense-mode
!
interface Gi0/0
  ip pim dense-mode
!
ip multicast-routing
```

🔧 Настройка маршрутизатора <kbd>R4</kbd>:

```
conf term
!
router ospf 100
  router-id 10.4.4.4
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim dense-mode
!
ip multicast-routing
```

💡Проверить соседство по PIM можно с помощью команды `show ip pim neighbors`:

<figure><img src="/files/ilQuvL4fPRHkribPwZbG" alt=""><figcaption></figcaption></figure>

⚠️ Ставить Linux-сервер в проект - довольно тяжело с точки зрения объёма места на жестком диске, поэтому импровизированными multicast-серверами, распространяющих multicast-поток будут обычные маршрутизаторы, а поток будет icmp запрос на multicast-адрес.

🔌Выполняем проверку на <kbd>MServer1</kbd>:

```
ping 227.100.1.1
```

Мы должны получить два icmp echo-reply от двух устройств <kbd>Host1</kbd> и <kbd>Host2</kbd>.

<figure><img src="/files/PGoEvGWGEHfneJdWUC9W" alt=""><figcaption></figcaption></figure>

Если вернёмся к маршрутизатору R3, который является наиближайшим маршрутизатором к источнику multicast-трафика <kbd>MServer1</kbd> и глянем на таблицу multicast-маршрутизации show ip mroute:

<figure><img src="/files/qilBYwZVZ4kJLom4WuQM" alt=""><figcaption></figcaption></figure>

Обратите внимание, что присутствует маршрут `(10.201.0.100, 227.100.1.1)` и Incoming interface для этого маршрута `GigabitEthernet0/0`, это как раз тот порт, за которым сидит <kbd>MServer1</kbd>.

Также обратите внимание на состояние интерфейсов, и тут только `GigabitEthernet0/3` находится в `Forwarding`, остальные в состоянии `Prune`.

## PIM Sparse mode

### Настройка связности multicast-дерева

🔧 Настройка маршрутизатора <kbd>R5</kbd>:

```
conf term
!
router ospf 100
  router-id 10.5.5.5
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/0-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim sparse-dense-mode
  ip igmp version 2
!
interface GigabitEthernet0/3
  ip pim sparse-dense-mode
 ip igmp version 2
!
ip multicast-routing
```

🔧 Настройка маршрутизатора <kbd>R6</kbd>:

```
conf term
!
router ospf 100
  router-id 10.6.6.6
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim sparse-dense-mode
 ip igmp version 2 
!
ip multicast-routing
```

🔧 Настройка маршрутизатора <kbd>R7</kbd>:

```
conf term
!
router ospf 100
  router-id 10.7.7.7
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim sparse-dense-mode
  ip igmp version 2
!
ip multicast-routing
```

🔧 Настройка маршрутизатора <kbd>R8</kbd>:

```
conf term
!
router ospf 100
  router-id 10.8.8.8
  network 10.0.0.0 0.255.255.255 area 0
  auto-cost reference-bandwidth 10000
!
interface range gi0/1-2
  ip ospf network point-to-point
  ip ospf hello-interval 3
  ip ospf dead-interval 10
  ip pim sparse-dense-mode
 ip igmp version 2
!
interface GigabitEthernet0/0
  ip pim sparse-dense-mode
  ip igmp version 2
!
ip multicast-routing
```

### Настройка multicast-группы на клиенте

🔧 Настройка клиентского хоста <kbd>Host3</kbd>:

```
conf term
!
interface GigabitEthernet0/0
  ip igmp join-group 229.101.1.1
```

🔬 Проверяем на маршрутизаторе <kbd>R5</kbd>, что хост <kbd>Host3</kbd> зарегистрировался:

<figure><img src="/files/z1bZBs5iOlhQAl5Ifjzl" alt=""><figcaption></figcaption></figure>

### Настройка Rendezvous Point

Для PIM Sparse mode необходима сущность, которая называется `Rendezvous Point` (сокр. - `RP`),  это маршрутизатор, который играет роль “координатора” для конкретных multicast-груп&#x43F;**.**

Ею выступит маршрутизатор <kbd>R6</kbd>, и согласно **best practise** мы поднимем всегда рабочий Loopback-адрес, чтобы не привязываться к состоянию интерфейса.

🔧 Настройка RP на самом маршрутизаторe <kbd>R6</kbd>:

```
conf term
!
interface Loopback0
  description { Rendezvous-Point }
  ip address 10.6.6.6 255.255.255.255
  ip pim sparse-dense-mode
!
ip pim rp-address 10.6.6.6
```

И теперь на всех устройствах в multicast-домене необходимо прописать адрес `Rendezvous Point`&#x20;

🔧 Прописываем rendezvous-point на маршрутизаторе <kbd>R5</kbd>:

```
conf term
!
ip pim rp-address 10.6.6.6
```

🔧 Прописываем rendezvous-point на маршрутизаторе <kbd>R7</kbd>:

```
conf term
!
ip pim rp-address 10.6.6.6
```

🔧 Прописываем rendezvous-point на маршрутизаторе <kbd>R8</kbd>:

```
conf term
!
ip pim rp-address 10.6.6.6
```

Проверяем, что слушатели multicast-группы `229.101.1.1` отзываются на icmp-запрос.

🔌Выполняем проверку на <kbd>MServer2</kbd>:

<figure><img src="/files/v1B2snRvHby0dkUadfy1" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://adavyshin.gitbook.io/networks/network/laboratornaya-rabota-multicast.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.
