Тропа OSPF: от LSA до графа

от автора

Не секрет, что OSPF – протокол маршрутизации типа link-state: он собирает информацию о топологии, строит соответствующий граф и вычисляет кратчайший путь с помощью алгоритма Дийкстры. Информация о топологии включает в себя то, что и так понадобилось бы даже для вычисления маршрута ручкой на бумаге: узлы, их интерфейсы и подсети, а также набор дополнительных технических примочек (например, флагов). Для организации этих данных OSPF использует структуру под названием LSA – link-state advertisement. Алгоритм SFP так же широко известен, задание по его реализации можно найти в программе любого современного технического вуза.

Роли LSA довольно подробно разобраны в разных источниках: router LSA описывает узлы графа, network LSA предназначен для широковещательных сегментов сети, summary LSA обеспечивает взаимодействие разных зон между собой… Однако собрать эти структуры данных воедино в целостный граф кажется мне достаточно нетривиальной задачей. Безусловно, RFC является источником абсолютного знания в такого рода вопросах, но лично мне сравнительно долго не удавалось его полноценно осознать. В этой статье я хотел бы поделиться своим представлением о назначении типов LSA, а также процессом построения графа на основе LSDB.

Тестовая топология представлена ниже:

Изображение 1. Топология
Изображение 1. Топология

В этот раз я бы хотел последовательно настраивать OSPF с нуля, чтобы отслеживать влияние каждого изменения на LSDB и граф сети. Предварительный конфиг включает в себя только адресацию (R5 приведён в качестве примера):

R5(config)#interface Loopback0 R5(config-if)# ip address 5.5.5.5 255.255.255.255 R5(config)#interface FastEthernet0/1 R5(config-if)# ip address 192.168.45.5 255.255.255.0 R5(config-if)# no shutdown

LSA1: router LSA

Чтобы построить граф, нужно определиться, с чём мы всё-таки имеем дело. Согласно RFC 2328 секции 2.1, OSPF оперирует направленным графом: узлы отражают подсети и маршрутизаторы, а ребра – соединения между ними. OSPF использует вес (cost) исходящего интерфейса в качестве веса ребра (секция  2.1.2), так что граф – направленный взвешенный.

Создадим первый узел, соответствующий R1:

R1(config)#router ospf 1 R1#show ip ospf database              OSPF Router with ID (1.1.1.1) (Process ID 1)

В LSDB пока пусто, поскольку IOS требует хотя бы один активный с точки зрения OSPF интерфейс для инициализации процесса. Звучит разумно, однако такой подход не приближает нас к графу, который мог бы выглядеть так:

Изображение  2. LSA1, добавлен R1
Изображение 2. LSA1, добавлен R1

Порадуем IOS, добавив 1.1.1.1/32 в топологию:

R1(config)#router ospf 1 R1(config-router)#router-id 1.1.1.1 R1(config-router)#network 1.1.1.1 0.0.0.0 area 0 R1# R1#show ip ospf database              OSPF Router with ID (1.1.1.1) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         21          0x80000001 0x00D055 1

Мы получили свой первый LSA1. Перед тем, как разбираться непосредственно с его содержанием, обратимся к формату:

        0                   1                   2                   3         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |            LS age             |     Options   |       1       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Link State ID                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     Advertising Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     LS sequence number                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |         LS checksum           |             length            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |    0    |V|E|B|        0      |            # links            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                          Link ID                              |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Link Data                             |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |     Type      |     # TOS     |            metric             |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |      TOS      |        0      |          TOS  metric          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                          Link ID                              |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Link Data                             |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |

Заголовок LSA1 позволяет построить узел графа, соответствующий маршрутизатору, на основании поля Link State ID или же Advertising Router. Остальная часть LSA1 посвящена описанию подсетей (узлы графа) и соединений (ребра графа). OSPF различает 4 типа соединений:

  1. точка-точка (point-to-point);

  2. промежуточные (transit);

  3. конечные (stub);

  4. виртуальные (virtual).

Посмотрим, к какому типу относится 1.1.1.1/32:

R1#show ip ospf database router 1.1.1.1              OSPF Router with ID (1.1.1.1) (Process ID 1)                  Router Link States (Area 0)    LS age: 55   Options: (No TOS-capability, DC)   LS Type: Router Links   Link State ID: 1.1.1.1   Advertising Router: 1.1.1.1   LS Seq Number: 80000001   Checksum: 0xD055   Length: 36   Number of Links: 1      Link connected to: a Stub Network      (Link ID) Network/subnet number: 1.1.1.1      (Link Data) Network Mask: 255.255.255.255       Number of MTID metrics: 0        TOS 0 Metrics: 1

1.1.1.1/32 – это конечное соединение, которое обычно соответствует префиксам конечных устройств. На уровне графа такая подсеть представляет собой лист, т.к. в ней подразумевается отсутствие OSPF-соседей. Вершина графа соединена с одним узлом маршрутизатора двумя ребрами, соответствующими каждому направлению.

Изображение 3. LSA1, добавлено конечное соединение
Изображение 3. LSA1, добавлено конечное соединение

Конечное соединение содержит в себе всю необходимую информацию для построения соответствующей части графа: подсеть, маску и исходящий вес (входящий вес ребра всегда равен нулю). Узел-маршрутизатор описан в заголовке LSA1 (LSID); однако соединение одной подсети с разными маршрутизаторами также допустимо, что позволяет реализовать ECMP.

Следующий тип соединения – точка-точка: он описывает подключение к другому маршрутизатору OSPF. Включим OSPF на R2, чтобы установить соседство на соединении R1-R2, используя вышеупомянутый тип:

R1(config)#interface f0/1 R1(config-if)#ip ospf network point-to-point R1(config-if)#ip ospf 1 area 0
R2(config)#router ospf 1 R2(config-router)#router-id 2.2.2.2 R2(config)#interface f0/1 R2(config-if)#ip ospf network point-to-point R2(config-if)#ip ospf 1 area 0
R1#show ip ospf database              OSPF Router with ID (1.1.1.1) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         41          0x8000001D 0x00B441 3 2.2.2.2         2.2.2.2         42          0x80000001 0x0055CC 2

Как и можно было ожидать, появился новый LSA1, описывающий R2. Обратите внимание на «странный» шаг изменения числа соединений: OSPF заработал на одном физическом интерфейсе, а число соединений увеличилось на 2 для каждого LSA1.

R1#show ip ospf database router 1.1.1.1              OSPF Router with ID (1.1.1.1) (Process ID 1)                  Router Link States (Area 0)    LS age: 283   Options: (No TOS-capability, DC)   LS Type: Router Links   Link State ID: 1.1.1.1   Advertising Router: 1.1.1.1   LS Seq Number: 8000001D   Checksum: 0xB441   Length: 60   Number of Links: 3      Link connected to: a Stub Network      (Link ID) Network/subnet number: 1.1.1.1      (Link Data) Network Mask: 255.255.255.255       Number of MTID metrics: 0        TOS 0 Metrics: 1      Link connected to: another Router (point-to-point)      (Link ID) Neighboring Router ID: 2.2.2.2      (Link Data) Router Interface address: 192.168.12.1       Number of MTID metrics: 0        TOS 0 Metrics: 1      Link connected to: a Stub Network      (Link ID) Network/subnet number: 192.168.12.0      (Link Data) Network Mask: 255.255.255.0       Number of MTID metrics: 0        TOS 0 Metrics: 1

Один интерфейс с назначенным IP-адресом порождает 2 сущности: конечное соединение (в конце концов там тоже могут находиться адресуемые извне устройства) и соединение типа точка-точка, которая соответствует ребру графа между вершинами-маршрутизаторами. Узел-сосед обозначен с помощью ссылки на его LSID, чтобы с помощью пары LSA1 корректно описать двустороннюю связность между вершинами. Такая связность критична для ребра между узлами, хотя вес каждого из направлений может быть разным. Адрес маршрутизатора-соседа так же включен в описание соединения, чтобы впоследствии его использовать для построения локальной таблицы маршрутизации.

Веса соединений оставлены по умолчанию, так что граф теперь выглядит следующим образом:

Изображение 4. LSA1, добавлено соединение типа точка-точка
Изображение 4. LSA1, добавлено соединение типа точка-точка

Виртуальное соединение выходит за рамки этой статьи, поскольку оно относится к ad-hoc инструментам для тушения пожаров, а не к проверенным решениям в рамках продуманного дизайна. Впрочем, эта любопытная сущность может представлять интерес и сама по себе, так что если вы хотите копнуть поглубже, обратите внимание на эту статью Петра Лапухова.

Остался последний тип соединений – промежуточный (не путать с transit capability!).

LSA2: network LSA

Соединения точка-точка описывают непосредственную связь между маршрутизаторами, без промежуточных устройств. Однако в общем виде это не обязательно верно: посередине может оказаться широковещательный (например, Ethernet) или NBMA (например, DMVPN) сегмент. Впрочем, последний случай обычно можно свести к набору соединений точка-точка, что соответствует логической топологии hub-and-spoke.

Широковещательная среда, напротив, требует другого подхода, т.к. использование соединений точка-точка было бы неэффективно. Возьмём в качестве примера L2-сегмент между R2, R3 и R4. Очевидно, что не существует ребра, которое соединяло бы больше двух вершин. Количество соединений точка-точка в такой среде растёт как O(n2), что выражается в низкой масштабируемости решения за счёт увеличения нагрузки на CPU и RAM.

Впрочем, оптимизация довольно проста: нужно всего лишь… (это не то, о чём вы подумали) использовать псевдоузел вместо L2-сегмента, который соединён с каждым маршрутизатором этого сегмента. Такой подход позволяет уменьшить число сессий OSPF с O(n2) до O(n), что в итоге повышает масштабируемость решения. Маршрутизатор, отвечающий за псевдоузел, называется designated router (DR); вершина графа, соответствующая псевдоузлу, описана с помощью LSA2; ребро графа между вершинами и псевдоузлом определено промежуточным соединением из LSA1 и содержанием LSA2.

Настроим OSPF на R2, R3 и R4, оставив настройки типа соединения без изменений (по умолчанию – промежуточное).

R2(config)#interface f0/0 R2(config-if)#ip ospf 1 area 0
R3(config)#router ospf 1 R3(config-router)#router-id 3.3.3.3 R3(config)#interface f0/0 R3(config-if)#ip ospf 1 area 0
R4(config)#router ospf 1 R4(config-router)#router-id 4.4.4.4 R4(config)#interface f0/0 R4(config-if)#ip ospf 1 area 0
R2#show ip ospf neighbor  Neighbor ID     Pri   State           Dead Time   Address         Interface 3.3.3.3           1   FULL/BDR        00:00:38    192.168.234.3   FastEthernet0/0 4.4.4.4           1   FULL/DR         00:00:35    192.168.234.4   FastEthernet0/0 1.1.1.1           0   FULL/  -        00:00:35    192.168.12.1    FastEthernet0/1 R2# R2#show ip ospf database              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         538         0x80000022 0x00AA46 3 2.2.2.2         2.2.2.2         116         0x80000008 0x005804 3 3.3.3.3         3.3.3.3         118         0x80000002 0x004228 1 4.4.4.4         4.4.4.4         117         0x80000002 0x00045D 1                  Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 192.168.234.4   4.4.4.4         117         0x80000001 0x00F0B8

Как мы видим, LSA2 действительно создан R4 (4.4.4.4), кто является DR на данный момент. Упрощённо процесс выбора DR можно описать так:

  1. составить список маршрутизаторов, участвующих в выборах (ненулевой приоритет);

  2. выбрать наибольший приоритет;

  3. выбрать наибольший RID.

Запасной DR (backup DR, BDR) проходит через тот же процесс согласования, что и DR, за одним важным исключением: избранный DR нельзя сместить до тех пор, пока не произойдёт отказ, тогда как роль BDR может переходить динамически к маршрутизатору с более приоритетными параметрами. DR отвечает за псевдоузел в графе, поэтому остальные участники сегмента синхронизуют с ним свои LSDB, что отражено в состоянии FULL между такими соседями. BDR ведёт себя точно так же, как и DR, кроме генерации LSA2, что позволяет снизить перебои маршрутизации при отказе DR.

Посмотрим вначале на LSA1:

R2#show ip ospf database router 2.2.2.2              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Router Link States (Area 0)    LS age: 425   Options: (No TOS-capability, DC)   LS Type: Router Links   Link State ID: 2.2.2.2   Advertising Router: 2.2.2.2   LS Seq Number: 8000000F   Checksum: 0x4A0B   Length: 60   Number of Links: 3      Link connected to: a Transit Network      (Link ID) Designated Router address: 192.168.234.4      (Link Data) Router Interface address: 192.168.234.2       Number of MTID metrics: 0        TOS 0 Metrics: 1      Link connected to: another Router (point-to-point)      (Link ID) Neighboring Router ID: 1.1.1.1      (Link Data) Router Interface address: 192.168.12.2       Number of MTID metrics: 0        TOS 0 Metrics: 1      Link connected to: a Stub Network      (Link ID) Network/subnet number: 192.168.12.0      (Link Data) Network Mask: 255.255.255.0       Number of MTID metrics: 0        TOS 0 Metrics: 1

Наконец, мы получили промежуточное соединение. Как вы могли уже догадаться, DR ID равен LSID соответствующего LSA2, т.е. IP-адресу DR. Так же, как и соединения точка-точка, промежуточное соединение описывает IP-адрес и вес интерфейса. Однако этих данных из LSA1 недостаточно для полноценного построения графа, т.к. они описывают только одно ребро из двух. Кроме того, информация о подсети самого L2-сегмента тоже недоступна. Обратимся к формату LSA2:

        0                   1                   2                   3         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |            LS age             |      Options  |      2        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Link State ID                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     Advertising Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     LS sequence number                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |         LS checksum           |             length            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Network Mask                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Attached Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |

LSA2 содержит недостающие части картины: список соседних RID и маска подсети.

R2#show ip ospf database network              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Net Link States (Area 0)    Routing Bit Set on this LSA in topology Base with MTID 0   LS age: 459   Options: (No TOS-capability, DC)   LS Type: Network Links   Link State ID: 192.168.234.4 (address of Designated Router)   Advertising Router: 4.4.4.4   LS Seq Number: 80000002   Checksum: 0xEEB9   Length: 36   Network Mask: /24         Attached Router: 4.4.4.4         Attached Router: 2.2.2.2         Attached Router: 3.3.3.3

Теперь у нас есть вся необходимая информация, чтобы расширить граф промежуточным сегментом:

Изображение 5. Добавлен LSA2
Изображение 5. Добавлен LSA2

Тут стоит отметить ещё пару моментов. Во-первых, вес ребра, исходящего из псевдоузла, всегда равен нулю и не вносит изменений в стоимость маршрута. Во-вторых, информация о подсети вшита в LSA2: маска указана в явном виде, а адрес подсети можно получить из LSID и длины самого префикса.

В качестве короткого отступления от основной темы хочу заметить, что принцип работы OSPF prefix suppression должен стать теперь очевидным:

  1. отсутствуют конечные соединения, создаваемые одновременно с соединениями точка-точка;

  2. промежуточные соединения включают маску /32 в LSA2 в качестве специального признака, по которому следует игнорировать такой маршрут; в худшем случае будет доступен только адрес DR, но не остальная подсеть.

LSA1 и LSA2 позволяют целиком построить граф для одной зоны. Однако в OSPF существуют такие понятия, как внешние и межзональные маршруты – ими мы и займёмся.

LSA5: AS-external LSA

Этот LSA относительно однозначен: он анонсирует внешнюю подсеть, маску и дополнительную информацию, которая может облегчить жизнь (а может и существенно её усложнить). Формат этой структуры следующий:

        0                   1                   2                   3         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |            LS age             |     Options   |      5        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Link State ID                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     Advertising Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     LS sequence number                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |         LS checksum           |             length            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Network Mask                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |E|     0       |                  metric                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                      Forwarding address                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                      External Route Tag                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |E|    TOS      |                TOS  metric                    |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                      Forwarding address                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                      External Route Tag                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |

LSID равен подсети, маска и метрика явно указаны… Информации достаточно, чтобы построить вершину и соответствующие ребра, в целом ситуация похожа на конечные соединения из LSA1. Если есть желание узнать побольше о нюансах Forwarding address (FA), я бы посоветовал этот блог и ссылки в начале на другие статьи. Они посвящены LSA5 FA и соответствующим спецэффектам, которые в определённый момент могут оказаться полезными. Для остальных полей LSA5 описания из RFC 2338 секция A.4.5 более чем достаточно.

В нашей схеме R3 генерирует LSA5, добавляя адреса подключенных сетей (в нашем случае – это loopback 0) в OSPF:

R3(config)#router ospf 1 R3(config-router)#redistribute connected subnets R3# R3#show ip ospf database              OSPF Router with ID (3.3.3.3) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         441         0x80000025 0x00A449 3 2.2.2.2         2.2.2.2         962         0x80000011 0x00460D 3 3.3.3.3         3.3.3.3         23          0x80000009 0x003A27 1 4.4.4.4         4.4.4.4         1085        0x8000000A 0x00F365 1                  Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 192.168.234.4   4.4.4.4         835         0x80000004 0x00EABB                  Type-5 AS External Link States  Link ID         ADV Router      Age         Seq#       Checksum Tag 3.3.3.3         3.3.3.3         2           0x80000001 0x000385 0 R3# R3#show ip ospf database external              OSPF Router with ID (3.3.3.3) (Process ID 1)                  Type-5 AS External Link States    LS age: 38   Options: (No TOS-capability, DC, Upward)   LS Type: AS External Link   Link State ID: 3.3.3.3 (External Network Number )   Advertising Router: 3.3.3.3   LS Seq Number: 80000001   Checksum: 0x385   Length: 36   Network Mask: /32         Metric Type: 2 (Larger than any link state path)         MTID: 0         Metric: 20         Forward Address: 0.0.0.0         External Route Tag: 0

Стоит помнить, что LSA5 распространяется по всей автономной системе OSPF, а не только в одной зоне. Чтобы продолжить граф, нужна информация о вершине (LSA5 LSID), ребре (Advertising Router) и весе ребра:

Изображение 6. Добавлен LSA5
Изображение 6. Добавлен LSA5

Это всё про роль LSA5 в построении графа. Почти всё.

LSA3: summary LSA

Переключимся пока на межзональную связность. Первое впечатление обманчиво: этот LSA не имеет никакого отношения к суммаризации префиксов в обычном смысле. Он предназначен для суммаризации информации о топологии при передаче из одной зоны в другую: LSA1 и LSA2, используемые для построения графа, не переходят между зонами, а превращаются в LSA3 на основе LSDB или RIB (об этом чуть позже). Формат LSA3 выглядит так:

        0                   1                   2                   3         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |            LS age             |     Options   |       3       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Link State ID                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     Advertising Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     LS sequence number                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |         LS checksum           |             length            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Network Mask                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |      0        |                  metric                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |     TOS       |                TOS  metric                    |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |

Идея похожа на задумку с LSA5: передать подсеть (LSA3 LSID), маску и метрику в другую зону. Передача информации о топологии между зонами не происходит, чтобы сэкономить вычислительные ресурсы маршрутизаторов и сделать сеть более масштабируемой. Таким образом, OSPF с использованием нескольких зон ведёт себя, как distance-vector (DV) протокол маршрутизации. Такое поведение является причиной, по которой некоторые авторы относят OSPF к гибридным протоколам маршрутизации (EIGRP же является DV-протоколом в чистом виде, хотя и весьма технологичным). Логика DV обычно включает в себя какой-нибудь механизм защиты от петель маршрутизации, например, расщепление горизонта (split horizon), DUAL и так далее. OSPF же использует совершенно иной подход: LSA3 может пересечь границу зоны только в том случае, если одна из зон является зоной 0 (она же – опорная, backbone). Это позволяет построить дерево высотой, равной 2: зона 0 является корнем, тогда как остальные зоны находятся на следующем уровне после зоны 0. Очевидно, что в такой схеме петли маршрутизации невозможны, поскольку существует только один путь – через опорную зону.

Настроим зону 1 на R4 и R5:

R4(config)#interface f0/1 R4(config-if)#ip ospf 1 area 1 R4(config-if)#ip ospf network point-to-point
R5(config)#router ospf 1 R5(config-router)#router-id 5.5.5.5 R5(config)#intreface f0/1 R5(config-if)#ip ospf 1 area 1 R5(config-if)#ip ospf network point-to-point R5(config)#interface lo 1 R5(config-if)#ip address 5.5.5.5 255.255.255.255 R5(config-if)#ip ospf 1 area 1 R5(config)#interface lo 2 R5(config-if)#ip address 5.5.5.55 255.255.255.255 R5(config-if)#ip ospf 1 area 1
R2#show ip ospf database              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         782         0x80000027 0x00A04B 3 2.2.2.2         2.2.2.2         1339        0x80000013 0x00420F 3 3.3.3.3         3.3.3.3         422         0x8000000B 0x003629 1 4.4.4.4         4.4.4.4         252         0x8000000D 0x00F064 1                  Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 192.168.234.4   4.4.4.4         1235        0x80000006 0x00E6BD                  Summary Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 5.5.5.5         4.4.4.4         170         0x80000001 0x003ED8 5.5.5.55        4.4.4.4         156         0x80000001 0x00489C 192.168.45.0    4.4.4.4         242         0x80000001 0x00781D                  Type-5 AS External Link States  Link ID         ADV Router      Age         Seq#       Checksum Tag 3.3.3.3         3.3.3.3         422         0x80000003 0x00FE87 0

Как и следовало ожидать, префиксы из зоны 1 видны в виде LSA3. R4, будучи ABR, является advertising router. С точки зрения зоны 0 все такие префиксы подключены напрямую к R4, что позволяет скрыть детали топологии зоны 1.

R2#show ip ospf database summary adv-router 4.4.4.4              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Summary Net Link States (Area 0)    Routing Bit Set on this LSA in topology Base with MTID 0   LS age: 823   Options: (No TOS-capability, DC, Upward)   LS Type: Summary Links(Network)   Link State ID: 5.5.5.5 (summary Network Number)   Advertising Router: 4.4.4.4   LS Seq Number: 80000001   Checksum: 0x3ED8   Length: 28   Network Mask: /32         MTID: 0         Metric: 2    Routing Bit Set on this LSA in topology Base with MTID 0   LS age: 809   Options: (No TOS-capability, DC, Upward)   LS Type: Summary Links(Network)   Link State ID: 5.5.5.55 (summary Network Number)   Advertising Router: 4.4.4.4   LS Seq Number: 80000001   Checksum: 0x489C   Length: 28   Network Mask: /32         MTID: 0         Metric: 2    Routing Bit Set on this LSA in topology Base with MTID 0   LS age: 895   Options: (No TOS-capability, DC, Upward)   LS Type: Summary Links(Network)   Link State ID: 192.168.45.0 (summary Network Number)   Advertising Router: 4.4.4.4   LS Seq Number: 80000001   Checksum: 0x781D   Length: 28   Network Mask: /24         MTID: 0         Metric: 1

Теперь у нас достаточно опыта, чтобы построить граф зоны 1 на основе LSDB, поэтому далее мы сконцентрируемся только на мнении зоны 0 о том, как выглядит OSPF AS.

Изображение 7. Добавлен LSA3
Изображение 7. Добавлен LSA3

Осталось только проверить, что именно является причиной создания LSA3. Удалим 5.5.5.55/32 из таблицы маршрутизации R4 и пронаблюдаем, останется ли этот маршрут в зоне 0, отсутствуя при этом в RIB на ABR.

R4(config)#ip prefix-list FILTER deny 5.5.5.55/32 R4(config)#ip prefix-list FILTER permit 0.0.0.0/0 le 32 R4(config)#router ospf 1 R4(config-router)#distribute-list prefix FILTER in R4# R4# show ip route ospf <output omitted>        1.0.0.0/32 is subnetted, 1 subnets O        1.1.1.1 [110/3] via 192.168.234.2, 00:00:05, FastEthernet0/0       3.0.0.0/32 is subnetted, 1 subnets O E2     3.3.3.3 [110/20] via 192.168.234.3, 00:00:05, FastEthernet0/0       5.0.0.0/32 is subnetted, 1 subnets O        5.5.5.5 [110/2] via 192.168.45.5, 00:00:05, FastEthernet0/1 O     192.168.12.0/24 [110/2] via 192.168.234.2, 00:00:05, FastEthernet0/0
R2#show ip ospf database              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         228         0x80000028 0x009E4C 3 2.2.2.2         2.2.2.2         804         0x80000014 0x004010 3 3.3.3.3         3.3.3.3         1868        0x8000000B 0x003629 1 4.4.4.4         4.4.4.4         1697        0x8000000D 0x00F064 1                  Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 192.168.234.4   4.4.4.4         653         0x80000007 0x00E4BE                  Summary Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 5.5.5.5         4.4.4.4         1615        0x80000001 0x003ED8 5.5.5.55        4.4.4.4         1602        0x80000001 0x00489C 192.168.45.0    4.4.4.4         1688        0x80000001 0x00781D                  Type-5 AS External Link States  Link ID         ADV Router      Age         Seq#       Checksum Tag 3.3.3.3         3.3.3.3         1868        0x80000003 0x00FE87 0 R2# R2#show ip route ospf <output omitted>        1.0.0.0/32 is subnetted, 1 subnets O        1.1.1.1 [110/2] via 192.168.12.1, 06:10:34, FastEthernet0/1       3.0.0.0/32 is subnetted, 1 subnets O E2     3.3.3.3 [110/20] via 192.168.234.3, 01:37:25, FastEthernet0/0       5.0.0.0/32 is subnetted, 2 subnets O IA     5.5.5.5 [110/3] via 192.168.234.4, 00:26:58, FastEthernet0/0 O IA     5.5.5.55 [110/3] via 192.168.234.4, 00:26:44, FastEthernet0/0 O IA  192.168.45.0/24 [110/2] via 192.168.234.4, 00:28:10, FastEthernet0/0

Согласно RFC 2328 части 12.4.3, LSA3 маршруты нужно создавать на основе таблицы маршрутизации (“determined by examining the routing table structure”). Очевидно, что отсутствие 5.5.5.55/32 в RIB R4 не помешало IOS создать соответствующий LSA3 и отправить его в зону 0. В отличие от DV-протоколов, OSPF не предусматривает механизмов фильтрации маршрутов в произвольной точке сети, поэтому использование такой функции, как distribute-list in, не является в общем случае хорошей затеей.

LSA4: ASBR-summary LSA

Как вы уже могли догадаться, LSA4 суммаризует информацию об ASBR. Не забыли, что LSA5 расходится по всей AS? LSA могут быть изменены только их создателем, это сделано для того, чтобы обеспечить целостность LSDB внутри зоны. Если ASBR расположен в другой зоне, информации для создания вершины, соответствующей LSA5, недостаточно, так как LSID маршрутизатора-создателя в текущей зоне неизвестен. Задача LSA4 – исправить это недоразумение. У него такой же формат, как и у LSA3:

        0                   1                   2                   3         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |            LS age             |     Options   |       4       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                        Link State ID                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     Advertising Router                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                     LS sequence number                        |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |         LS checksum           |             length            |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                         Network Mask                          |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |      0        |                  metric                       |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |     TOS       |                TOS  metric                    |        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+        |                              ...                              |

Разница заключается в значении, придаваемом полю LSID: LSA3 в этом поле несёт номер подсети, тогда как LSA4 помещает туда RID ASBR’а. Создадим LSA5 в зоне 1 и проверим, как это отразится на опорной зоне.

R5(config)#router ospf 1 R5(config-router)#redistribute connected subnets
R2#show ip ospf database              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Router Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum Link count 1.1.1.1         1.1.1.1         1561        0x80000028 0x009E4C 3 2.2.2.2         2.2.2.2         112         0x80000015 0x003E11 3 3.3.3.3         3.3.3.3         1180        0x8000000C 0x00342A 1 4.4.4.4         4.4.4.4         1221        0x8000000E 0x00EE65 1                  Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 192.168.234.4   4.4.4.4         1986        0x80000007 0x00E4BE                  Summary Net Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 5.5.5.5         4.4.4.4         960         0x80000002 0x003CD9 5.5.5.55        4.4.4.4         960         0x80000002 0x00469D 192.168.45.0    4.4.4.4         960         0x80000002 0x00761E                  Summary ASB Link States (Area 0)  Link ID         ADV Router      Age         Seq#       Checksum 5.5.5.5         4.4.4.4         10          0x80000001 0x0026F0                  Type-5 AS External Link States  Link ID         ADV Router      Age         Seq#       Checksum Tag 3.3.3.3         3.3.3.3         1180        0x80000004 0x00FC88 0 6.6.6.6         5.5.5.5         16          0x80000001 0x00E997 0

LSA4 могут быть созданы только ABR’ами, когда они передают LSA5 из одной зоны в другую. В нашем случае передача 6.6.6.6/32 из зоны 1 в опорную зону заставляет R4 сгенерировать LSA4, соответствующий R5.

R2#show ip ospf database asbr-summary              OSPF Router with ID (2.2.2.2) (Process ID 1)                  Summary ASB Link States (Area 0)    Routing Bit Set on this LSA in topology Base with MTID 0   LS age: 144   Options: (No TOS-capability, DC, Upward)   LS Type: Summary Links(AS Boundary Router)   Link State ID: 5.5.5.5 (AS Boundary Router address)   Advertising Router: 4.4.4.4   LS Seq Number: 80000001   Checksum: 0x26F0   Length: 28   Network Mask: /0         MTID: 0         Metric: 1

Помимо ASBR ID, LSA4 также несёт в себе метрику до ASBR с точки зрения ABR. Теперь не составляет труда смоделировать узел из другой зоны, создавший LSA5, что позволяет достроить граф, описывающий AS целиком.

Изображение 8. Добавлен LSA4
Изображение 8. Добавлен LSA4

LSA 6, 7 и ко

За рамками основной статьи остались несколько LSA, которые я бы хотел кратко описать в этом разделе. Некоторые из них в определённой степени модифицируют алгоритм OSPF; однако эти метаморфозы, подчас существенные, не меняют кардинальным образом основных принципов построения графа, поэтому детальное обсуждение этих LSA – тема отдельных статей.

LSA6 выделен для multicast OSPF, который устарел чуть больше, чем полностью.

LSA7 – это костыль, позволяющий создавать внешние префиксы в тупиковых (stub) зонах, превращая их в NSSA (no-so-stubby – не-такая-уж-тупиковая, звучит!). Если от FA в LSA5 у вас мурашки по коже, то LSA7 заставляет встать дыбом волосы в самых неожиданных местах.

LSA8 был предназначен для расширения функциональности LSA5 за счёт дополнительных атрибутов, однако так и не выбрался из состояния черновика.

LSA9 (link-local), 10 (area-local) and 11 (AS-local) являются opaque LSAs. Они несут дополнительную информацию, которую активно использует SPF с условиями (constrained SPF) для расчётов туннелей MPLS TE.

Спасибо за рецензию: Анастасии Куралёвой


ссылка на оригинал статьи https://habr.com/ru/post/658683/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *