/ 9.-multicast / 1.-igmp / 1.-querier.md
1.-querier.md
 1  # Querier
 2  
 3  Рассмотрим чуть более сложный случай:
 4  
 5  ![IGMP Querier](http://img-fotki.yandex.ru/get/9813/83739833.38/0_da358_a61224c0_XL.png)
 6  
 7  В клиентский сегмент подключено два \(или больше\) маршрутизатора, которые могут вещать трафик. Если ничего не сделать, мультикастовый трафик будет дублироваться — оба маршрутизатора ведь будут получать Report от клиентов. Во избежание этого существует механизм выбора **Querier** — опрашивателя. Тот кто победит, будет посылать Query, мониторить Report и реагировать на Leave, ну и, соответственно, он будет отправлять и трафик в сегмент. Проигравший же будет только слушать Report и держать руку на пульсе.
 8  
 9  Выборы происходят довольно просто и интуитивно понятно.  
10  Рассмотрим ситуацию с момента включения маршрутизаторов R1 и R2.  
11  **1\)** Активировали IGMP на интерфейсах.  
12  **2\)** Сначала по умолчанию каждый из них считает себя Querier.  
13  **3\)** Каждый отправляет IGMP General Query в сеть. Главная цель — узнать, есть ли клиенты, а параллельно — заявить другим маршрутизаторам в сегменте, если они есть, о своём желании участвовать в выборах.  
14  **4\)** General Query получают все устройства в сегменте, в том числе и другие IGMP-маршрутизаторы.  
15  **5\)** Получив такое сообщение от соседа, каждый маршрутизатор оценивает, кто достойнее.  
16  **6\)** Побеждает маршрутизатор с **меньшим IP** \(указан в поле Source IP пакета IGMP Query\). Он становится Querier, все другие — Non-Querier.  
17  **7\)** Non-Querier запускает таймер, который обнуляется каждый раз, как приходит Query с меньшим IP-адресом. Если до истечения таймера \(больше 100 секунд: 105-107\) маршрутизатор не получит Query с меньшим адресом, он объявляет себя Querier и берёт на себя все соответствующие функции.  
18  **8\)** Если Querier получает Query с меньшим адресом, он складывает с себя эти обязанности. Querier'ом становится другой маршрутизатор, у которого IP меньше.
19  
20  _Тот редкий случай, когда меряются, у кого меньше._
21  
22  Выборы Querier очень важная процедура в мультикасте, но некоторые коварные производители, не придерживающиеся RFC, могут вставить крепкую палку в колёса. Я сейчас говорю о IGMP Query с адресом источника 0.0.0.0, которые могут генерироваться коммутатором. Такие сообщения не должны участвовать в выборе Querier, но надо быть готовыми ко всему. [Вот пример](http://nag.ru/articles/article/25136/takie-raznyie-problemyi.html) весьма сложной долгоиграющей проблемы.
23