При работе OSPF в широковещательной среде, которой является Ethernet, выбирается DR/BDR. Давайте разберемся как происходят выборы DR/BDR.
Предположим, что у нас имеется широковещательный сегмент состоящий из 10 маршрутизаторов. Каждый маршрутизатор должен будет установить соседство со всеми остальными. Количество необходимых соседств рассчитывается по формуле n(n-1)/2, и для 10 узлов равно 45. Количество сессий при увеличении количества узлов растет в геометрической прогрессии. В пределах каждой сессии пришлось бы отсылать hello пакеты и реплицировать каждое LSA, что привело бы к значительному увеличению флуда сигнальных сообщений протокола OSPF. Поэтому была придумана концепция DR/BDR (или DIS в ISIS).
В широковещательном сегменте выбираются два маршрутизатора — DR и BDR. Все остальные маршрутизаторы строят отношения соседства только с ними, что уменьшает количество установленных сессий, рассылаемых LSA и hello пакетов. При 10 узлах у нас получится вместо 45 сессий только 20.
DR (Designated Router) назначается маршрутизатор с наивысшим приоритетом. Если приоритеты равны, то выбирается маршрутизатор с наивысшим router-id.
BDR (Backup Designated Router) — резервный DR. Им назначается маршрутизатор с наивысшим приоритетом или router-id из оставшихся в широковещательном сегменте маршрутизаторов после выбора DR.
Все остальные маршрутизаторы переходят в состояние DRother и устанавливают отношения соседство в состоянии Full только с DR и BDR. (между DR и BDR тоже устанавливают соседство в состоянии Full). В случае каких либо изменений в сети, маршрутизатор, который зарегистрировал эти изменения, отправляет анонсы не всем маршрутизаторам, а только DR на мультикастный адрес 224.0.0.6, тем самым сокращается количество информации, передаваемой по сети. А вот DR уже информирует всех остальных об этих изменениях, рассылая Network LSA.
В случае выхода из строя DR, его роль берет на себя BDR. После этого инициируются выборы нового BDR.
Примечание: стоит учитывать, что при использовании в сети маршрутизаторов различных вендоров, приоритеты необходимо назначать вручную, так как например у Cisco дефолтный приоритет равен 1, а у Juniper — 128.
Примечание: router-id всегда будут отличаться, в одном OSPF домене не допустимо наличие двух маршрутизаторов с одинаковыми router-id.
Теперь проверим как это работает.
Рассмотрим простейшую схему:
Взглянув на нее мы сразу видим что приоритет у всех одинаковый, и значит выбор DR/BDR будет производится по router-id. Соответственно в данной схеме DR становится Router4, так как обладает наибольшим router-id, а роль BDR берет на себя Router3, что можно легко проверить. На Router1 две сессии в состоянии Full — одна с DR, другая с BDR. Соответственно соседство с Router2 в состоянии 2Way.
router1> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DRother 0.0.0.0 10.1.1.4 10.1.1.3 3
lo0.0 DR 0.0.0.0 10.1.1.1 0.0.0.0 0
router1> show ospf neighbor
Address Interface State ID Pri Dead
10.0.0.3 ge-0/0/0.0 Full 10.1.1.3 128 33
10.0.0.2 ge-0/0/0.0 2Way 10.1.1.2 128 32
10.0.0.4 ge-0/0/0.0 Full 10.1.1.4 128 34
Router3 (BDR) и Router4 (DR) поддерживают соседство со всеми оcтальными роутерами в широковещательном сегменте (включая и друга друга) в состоянии Full:
Router3:
router3> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 BDR 0.0.0.0 10.1.1.4 10.1.1.3 3
lo0.0 DR 0.0.0.0 10.1.1.3 0.0.0.0 0
router3> show ospf neighbor
Address Interface State ID Pri Dead
10.0.0.1 ge-0/0/0.0 Full 10.1.1.1 128 32
10.0.0.2 ge-0/0/0.0 Full 10.1.1.2 128 32
10.0.0.4 ge-0/0/0.0 Full 10.1.1.4 128 32
Router4:
router4> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DR 0.0.0.0 10.1.1.4 10.1.1.3 3
lo0.0 DR 0.0.0.0 10.1.1.4 0.0.0.0 0
router4> show ospf neighbor
Address Interface State ID Pri Dead
10.0.0.1 ge-0/0/0.0 Full 10.1.1.1 128 31
10.0.0.2 ge-0/0/0.0 Full 10.1.1.2 128 31
10.0.0.3 ge-0/0/0.0 Full 10.1.1.3 128 32
Теперь изменим приоритет на Router4, сделав его равным 1:
router4# set protocols ospf area 0 interface ge-0/0/0.0 priority 1
Как видно из вывода, Router4 остался DR.
router4> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DR 0.0.0.0 10.1.1.4 10.1.1.3 3
lo0.0 DR 0.0.0.0 10.1.1.4 0.0.0.0 0
Маршрутизатор не перестанет быть DR даже если в сети появится более приоритетный марушрутизатор, пока с DR что нибудь не произойдет (остановка route демона, падение интерфейса и т д), либо пока администратор не сделает clear ospf процесса или соседства (что мы и сделаем):
router4> clear ospf neighbor
И посмотрим на результат.
router4> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DRother 0.0.0.0 10.1.1.3 10.1.1.2 3
lo0.0 DR 0.0.0.0 10.1.1.4 0.0.0.0 0
Теперь у нас DR Router3 и BDR Router2. А Router4 в состоянии DRother.
Примечание: Очень важным является то, что новым DR может стать только BDR. даже если в сети будут новые маршрутизаторы с наибольшим приоритетом или router-id. То есть, что бы вновь включенному в сеть маршрутизатору стать DR, необходимо, что бы неактивными стали и действующий DR и BDR (вместе или поочередно).
Сейчас мы разобрали стандартную ситуацию.
Давайте теперь рассмотрим вот такую схему:
Если мы просто включим все маршрутизаторы одновременно, то DR будет Router4, а BDR — Router3 (согласно приоритетов и router-id). Но что будет, если включать маршрутизаторы с задержкой в одну минут, как это показано на схеме.
Router1 включился и стал рассылать hello пакеты. В это момент его интерфейс в состоянии Waiting:
router1> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 Waiting 0.0.0.0 0.0.0.0 0.0.0.0 0
lo0.0 Waiting 0.0.0.0 0.0.0.0 0.0.0.0 0
Так как в данной момент других маршрутизаторов в сети нет, то router1 на hello пакеты не получает ответов. В итоге, по истечении таймера, он назначает себя DR:
router1> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DR 0.0.0.0 10.1.1.1 0.0.0.0 0
lo0.0 DR 0.0.0.0 10.1.1.1 0.0.0.0 0
Теперь в сети появляется еще одни маршрутизатор, и так как DR уже выбран (что будет отображено в Hello сообщении от Router1), Router2 не претендует на эту роль, хотя его router-id выше:
router2> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 BDR 0.0.0.0 10.1.1.1 10.1.1.2 1
lo0.0 DR 0.0.0.0 10.1.1.2 0.0.0.0 0
Теперь, когда в сеть включатся еще два маршрутизатора Router3 и Router4, они не станут ни DR ни BDR, хотя имеют и больший приоритет и больший router-id. Вот к примеру вывод с Router4:
router4> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DRother 0.0.0.0 10.1.1.1 10.1.1.2 3
lo0.0 DR 0.0.0.0 10.1.1.4 0.0.0.0 0
А теперь проверим, что будет, если бы у Router1 был бы приоритет 0, что говорит о том, что данный маршрутизатор не может быть DR/BDR:
В таком случае маршрутизатор автоматически переводит свой интерфейс в состояние DRother не дожидаясь окончания таймера, что логично (так как ни в каком другом состоянии этот интерфейс в широковещательной среде быть не может из-за нулевого приоритета):
router1> show ospf interface
Interface State Area DR ID BDR ID Nbrs
ge-0/0/0.0 DRother 0.0.0.0 0.0.0.0 0.0.0.0 0
lo0.0 DR 0.0.0.0 10.1.1.1 0.0.0.0 0
Как видите Router1 в состоянии DRother.
Примечание: следует учитывать, что если вы действующему DR назначите приоритет в 0, то он автоматически перестанет быть DR, и перейдет в состояние DRother, а роль DR возьмет на себя BDR.
Может ли в широковещательном домене не выбираться DR/BDR?
Возможно, если в протоколе OSPF линк помечен как ptp.
Что будет, если все маршрутизаторы будут иметь приоритет 0?
В такой ситуации не будет ни одного соседства в состоянии Full, а значит не маршрутизаторы не будут получать LSA друг от друга.
Возможна ли ситуация, когда в сети больше двух маршрутизаторов, но нет BDR?
При желании можно построить сеть с топологией hub-and-spoke. Тогда всем маршрутизаторам, кроме одного устанавливается приоритет в 0. В такой схеме будет один DR и несколько DRother. Но в случае отказа DR мы получим ситуацию, описанную выше.
Может ли один и тот же маршрутизатор быть DR и DRother одновременно.
DR/BDR/DRother это состояние интерфейса а не маршрутизатора. Маршрутизатор может быть одновременно и в DR, и BDR, и DRother, а вот интерфейс может быть только в одном из этих состояний.
Могут ли произойти перевыборы DR/BDR, если DR/BDR «живы»?
Данная ситуация наверно возможно лишь в лабораторных условиях, но все же возможна при слиянии двух OSPF доменов. Предположим, что есть коммутатор1 и коммутатор2, к которым подключены по три маршрутизатора. Коммутаторы не имею связи друг с другом. В этом случае маршуртизаторы, подключенные к коммутатору1 выберут DR/BDR и, соответственно, маршрутизаторы подключенные к коммутатору2 выберут своих DR/BDR. Все будет работать отлично, пока между коммутаторами не появится линк, который соединит два этих домена. В итоге, из двух доменов получится одни с двумя DR/BDR, что не допустимо. Поэтому в данном случае будут выбираться новые DR/BDR.
Спасибо за внимание!
Автор: Bormoglotx