OSPF DR/BDR

При работе 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.

Теперь проверим как это работает.
Рассмотрим простейшую схему:
d6ab3ca221e840898efad32e19f10533.jpg
Взглянув на нее мы сразу видим что приоритет у всех одинаковый, и значит выбор 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 (вместе или поочередно).

Сейчас мы разобрали стандартную ситуацию.
Давайте теперь рассмотрим вот такую схему:
0e699f1c0668474abbaaef224271fcb7.jpg
Если мы просто включим все маршрутизаторы одновременно, то 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:
d54e02893dc2426c86125df75a377ff8.jpg
В таком случае маршрутизатор автоматически переводит свой интерфейс в состояние 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.

Спасибо за внимание!

© Habrahabr.ru