# Querier

Рассмотрим чуть более сложный случай:

![IGMP Querier](http://img-fotki.yandex.ru/get/9813/83739833.38/0_da358_a61224c0_XL.png)

В клиентский сегмент подключено два (или больше) маршрутизатора, которые могут вещать трафик. Если ничего не сделать, мультикастовый трафик будет дублироваться — оба маршрутизатора ведь будут получать Report от клиентов. Во избежание этого существует механизм выбора **Querier** — опрашивателя. Тот кто победит, будет посылать Query, мониторить Report и реагировать на Leave, ну и, соответственно, он будет отправлять и трафик в сегмент. Проигравший же будет только слушать Report и держать руку на пульсе.

Выборы происходят довольно просто и интуитивно понятно.\
Рассмотрим ситуацию с момента включения маршрутизаторов R1 и R2.\
**1)** Активировали IGMP на интерфейсах.\
**2)** Сначала по умолчанию каждый из них считает себя Querier.\
**3)** Каждый отправляет IGMP General Query в сеть. Главная цель — узнать, есть ли клиенты, а параллельно — заявить другим маршрутизаторам в сегменте, если они есть, о своём желании участвовать в выборах.\
**4)** General Query получают все устройства в сегменте, в том числе и другие IGMP-маршрутизаторы.\
**5)** Получив такое сообщение от соседа, каждый маршрутизатор оценивает, кто достойнее.\
**6)** Побеждает маршрутизатор с **меньшим IP** (указан в поле Source IP пакета IGMP Query). Он становится Querier, все другие — Non-Querier.\
**7)** Non-Querier запускает таймер, который обнуляется каждый раз, как приходит Query с меньшим IP-адресом. Если до истечения таймера (больше 100 секунд: 105-107) маршрутизатор не получит Query с меньшим адресом, он объявляет себя Querier и берёт на себя все соответствующие функции.\
**8)** Если Querier получает Query с меньшим адресом, он складывает с себя эти обязанности. Querier'ом становится другой маршрутизатор, у которого IP меньше.

*Тот редкий случай, когда меряются, у кого меньше.*

Выборы Querier очень важная процедура в мультикасте, но некоторые коварные производители, не придерживающиеся RFC, могут вставить крепкую палку в колёса. Я сейчас говорю о IGMP Query с адресом источника 0.0.0.0, которые могут генерироваться коммутатором. Такие сообщения не должны участвовать в выборе Querier, но надо быть готовыми ко всему. [Вот пример](http://nag.ru/articles/article/25136/takie-raznyie-problemyi.html) весьма сложной долгоиграющей проблемы.


---

# 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/1.-igmp/1.-querier.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.
