# OSPF Database and LSA

![Схема](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MawfXMzzLmAht7oSsdt%2F-MawfgULdYJc4xqOhFte%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=d7d3e8e4-23a7-4e90-9480-6e9faa005cea)

Все линки, кроме линка R1-R2 являются p2p-линками. Также на R1 был настроен маршрут, который редистрибуцией попадает в OSPF.

```
root@R1# show policy-options 
policy-statement Direct {
    from {
        protocol direct;
        route-filter 1.0.0.1/32 exact;
    }
    then accept;
}
```

Линк между R3 и R4 Находится в другой области. Тип области NSSA. Там также появляется External-маршрут:

```
root@R4# show | compare 
[edit interfaces]
+   lo0 {
+       unit 0 {
+           family inet {
+               address 5.5.5.5/32;
+           }
+       }
+   }
[edit protocols ospf]
+   export ospfexport;
[edit]
+  policy-options {
+      policy-statement ospfexport {
+          from {
+              protocol direct;
+              route-filter 5.5.5.5/32 exact;
+          }
+          then accept;
+      }
+  }
```

## 1) Init

Сначала посылается Hello-пакет одним из роутеров:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MawfXMzzLmAht7oSsdt%2F-MawgQwmti0Ia6XmzdH0%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=378c2fb0-5dd8-4ab0-b87f-5a00ff9a8bc3)

В ответ ему приходит информация, от другого роутера, что пакет получен. Также там указано новое поле:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MawfXMzzLmAht7oSsdt%2F-MawgnZc1gVqis3C-LBI%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=0b4586b3-9a08-44f5-be7b-e6c6dc75ca31)

После этого происходит переход в состояние 2-way:

## 2) 2-Way

Тут происходит выбор DR/BDR, если линк не p2p. Посмотреть можно так:

```
root@R1# run show ospf neighbor extensive 
Address          Interface              State     ID               Pri  Dead
192.168.100.2    ge-0/0/0.0             Full      1.1.1.2          128    32
  Area 0.0.0.0, opt 0x52, DR 192.168.100.2, BDR 192.168.100.1
  Up 00:14:34, adjacent 00:14:04
   Topology default (ID 0) -> Bidirectional
```

## 3) ExStart

Далее начинается обмен пустыми DBD-сообщениями (в них не указаны LSA), для выбора Master-роутера, который будет отвечать за синхронизацию LSDB:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Mayp5QiJFD7iKV_LnEV%2F-Mayt0SEJ6IBfLAPkRi5%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=ad5b7704-368c-4632-8d4a-e6872b36cb02)

Тут же виден MTU. Т.е. если соседство застряло на ExStart, то скорее всего дело в нём.&#x20;

Вот так выглоядит пакет от соседа:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MayuIYhqjWZ3yhDices%2F-Mayub5EEtMWssYPG0Ru%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=21141c0f-0704-43d2-8842-d853804621c6)

Master'ом становится роутер с наибольшим Router-ID (В данном случае это 1.1.1.2). Соответственно за синхронизацию LSDB начинает отвечать он и за начальный Sequence Number принимается значение 17499784, а OSPF переходит в следующее состояние.

## 4) ExChange

Тут уже происходит обмен DBD с кратким описанием LSA, имеющихся у роутера:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MayvLfeasBUua9T681h%2F-MaywpYxC48xiyUFqfkL%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=f2d27a92-5d89-4a5c-a809-8be993235965)

Первым начал Slave-роутер, взяв DD Sequence у Master-роутера. Далее приходит ответ от Master-роутера с увеличенным на 1 DD Sequence и проставленным Master-Bit'ом:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Mayxa-Uhfac8f5_L4Ul%2F-MayzgK-Qah7k0rsG1eO%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=58b5fc17-bbda-4d46-8a7c-a535dd4558b3)

После этого от Slave-роутера приходит подтверждение о синхронизации основных параметров базы данных и он отсылает мастеру пустой DBD-пакет с актуальным Sequence Number:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Mayzm7mOFNWsg0wAgCu%2F-Maz-Ui0jGI_uiZuwyNy%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=480238c3-6139-4413-a4e4-88ada77cc106)

Примерно на этом же моменте, или даже чуть ранее, маршрутизаторы сверяют полученную информацию в DBD пакетах с тем, что есть у них и начинают обмениваться LSR, если видят, что у них нет полной информации о конкретной LSA. Это значит, что OSPF перешёл в следующее состояние.

## 5) Loading

Как и было описано выше, в этом состоянии происходит полная синхронизация LSDB с соседом. Посылаются LSR:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Mayzm7mOFNWsg0wAgCu%2F-Maz0lQjf5EzDoAYAjpS%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=ea6b115e-b419-400c-ba48-899fa75aafbc)

В ответ на них приходит LSU, в которых содержится уже полная информация о LSA. В Ответ на LSU в течение 5-ти секунд должен прийти LSA, иначе произойдёт повторная отсылка LSU. LSA выглядит так:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MazKPVevqPzvoSjh1J_%2F-MazLrFo4mYd44ZfSbjq%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=54392dd0-8aeb-4e3e-a537-aedcf140f24d)

{% hint style="info" %}
Информация о типе пакета (LSR/LSU/LSA/DBD) всегда указана в заголовке
{% endhint %}

Далее речь пойдёт об LSA.

### 5.1) Router LSA (Type 1)

Тут приходит информация о линке. Информация немного отличается, если линк находится в P2P-сети от линка, находящегося в широковещательном домене (Но только, если линки эти подключены напрямую. Если нет, то информация передаётся в целом о сети. Тут стоит посмотреть на LSA с ID 19.19.19.0. Информация о сети пришла от R3):

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Maz1OBZ-X9Xw4Lgk--_%2F-Maz4WlLQu5PruezER7Q%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=da7e3fdd-b51c-4d32-85ff-5fff2baa408b)

В LSDB выглядит так:

```
root@R1> show ospf database extensive 
    OSPF database, Area 0.0.0.0
 Type       ID            Adv Rtr              Seq      Age  Opt  Cksum  Len 
Router   1.1.1.2          1.1.1.2          0x80000008  1767  0x22 0xf4e0  72
  bits 0x0, link count 4
  id 1.1.1.3, data 19.19.19.0, Type PointToPoint (1)
    Topology count: 0, Default metric: 1
  id 19.19.19.0, data 255.255.255.254, Type Stub (3)
    Topology count: 0, Default metric: 1
  id 192.168.100.2, data 192.168.100.2, Type Transit (2)
    Topology count: 0, Default metric: 1
  id 1.1.1.2, data 255.255.255.255, Type Stub (3)
    Topology count: 0, Default metric: 0
  Topology default (ID 0)
    Type: Transit, Node ID: 192.168.100.2
      Metric: 1, Bidirectional
    Type: PointToPoint, Node ID: 1.1.1.3
      Metric: 1, Bidirectional
  Aging timer 00:30:33
  Installed 00:29:26 ago, expires in 00:30:33
  Last changed 00:29:26 ago, Change count: 5
```

Тут видно, что в рамках одной LSA передаётся вся информация о линках роутера.

### 5.2) Network LSA (Type 2)

Как я понял, генерируется DR, после чего передаётся всем остальным, но в не зависимости от LSA 2, все роутеры в широковещательной сети всё равно генерируют LSA 1, таким образом сообщая DR, что они находятся в одном с ним широковещтельном домене. Далее их Roter-ID попадают в поле Attached Router. Если в 1 типе LSA ID - это Router ID, то тут в качестве ID выступает сеть. Также тут передаются маска и подключенные к сети роутеры:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Maz50B87oyPdxKzkoPg%2F-Maz5En6tLFlWeYnelxs%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=bec8950b-e818-4d1a-8359-7e5675dae369)

В LSDB выглядит так:

```
root@R1> show ospf database extensive 
    OSPF database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Network  192.168.100.2    1.1.1.2          0x80000004   926  0x22 0xbd9b  32
  mask 255.255.255.0
  attached router 1.1.1.2
  attached router 1.1.1.1
  Topology default (ID 0)
    Type: Transit, Node ID: 1.1.1.1
      Metric: 0, Bidirectional
    Type: Transit, Node ID: 1.1.1.2
      Metric: 0, Bidirectional
  Aging timer 00:44:34
  Installed 00:15:23 ago, expires in 00:44:34
  Last changed 02:35:00 ago, Change count: 1
```

### 5.3) Summary LSA (Type 3)

Если нам хочется знать что-то о сети из другой области, то нам поможет Summary LSA, которая генерируется ABR и говорит о том, что такая-то сеть доступна через него. Суть состоит в том, что получение такой LSA не вызывает пересчёт SPF. Для этого и нужно разделение на области. Выглядит так:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Maz6UiNgiVUa3kOUIdT%2F-Maz6q5hZ5dPMZFbwsJL%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=477c1a23-6cf1-44f5-8418-653d97ae407f)

Выглядит очень просто ID - это сеть. Впридачу идёт маска и ID ABR'а, который её сгенерировал (В данном случае R3).

В LSDB выглядит так (никакой информации о топологии, просто говорится, что сеть доступна и всё):

```
root@R1> show ospf database extensive 
    OSPF database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Summary  25.25.25.0       1.1.1.3          0x80000008   616  0x22 0xcd17  28
  mask 255.255.255.254
  Topology default (ID 0) -> Metric: 1
  Aging timer 00:49:43
  Installed 00:10:10 ago, expires in 00:49:44
  Last changed 02:35:02 ago, Change count: 1
```

### 5.4) External LSA (Type 5)

Эта LSA возникает при редистрибуции маршрутов в OSPF. Выглядит так:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Maz7hzBons2QezZPCd5%2F-Maz7xfNUrfGKDCwSm49%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=ecc004d9-cef9-4f93-99b0-2c82f0f80a41)

В LSDB выглядит так:

```
root@R1> show ospf database extensive 
    OSPF AS SCOPE link state database
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
Extern   5.5.5.5          1.1.1.4          0x80000002    93  0x22 0xe7ae  36
  mask 255.255.255.255                  
  Topology default (ID 0)
    Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
  Aging timer 00:58:27
  Installed 00:01:10 ago, expires in 00:58:27
  Last changed 00:01:49 ago, Change count: 1
```

Очень похожа на LSA 3 и в таком неизменном виде она попадает в другую область. Но, роутер в другой области не знает как добраться до роутера, генерирующего этот маршрут (у нас есть только информация о Roter-ID, который сгенерировал LSA 5, но маршрута мы до него не знаем. У нас есть только LSA 3, но они несут только информацию о сетях, которая нам тут не поможет). Для этого генерируется LSA 4:

### 5.5) ASBR Summary (Type 4)

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-Maz8mYqfYrBa8AuKqnk%2F-Maz9n-9-KWT_ZmJhbwy%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=5ba60148-464a-42ca-8e81-ba0a40a9df94)

Т.е. тут ABR говорит, что роутер, сгенерировавший External LSA, доступен через него.

```
root@R1> show ospf database extensive 
    OSPF database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
ASBRSum  1.1.1.4          1.1.1.3          0x80000003    80  0x22 0xb21   28
  mask 0.0.0.0
  Topology default (ID 0) -> Metric: 1
  Aging timer 00:58:40
  Installed 00:01:10 ago, expires in 00:58:40
  Last changed 00:01:49 ago, Change count: 1
```

### 5.6) NSSA (Type 7)

По факту представляет костыль для обхода ограничения 5 типа LSA. Является тем же самым и конвертируется ABR при переходе в другую область в External LSA.

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MazDCUUYBTiMFdJ0fFR%2F-MazDTh7QueSF6mnZkLI%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=d39e3abe-ef92-4853-aeb5-3204158feac6)

```
root@R4> show ospf database extensive 
    OSPF database, Area 0.0.0.1
Type       ID               Adv Rtr              Seq      Age   Opt Cksum  Len 
NSSA    *5.5.5.5            1.1.1.4          0x80000002  1013  0x28 0x73b   36
  mask 255.255.255.255
  Topology default (ID 0)
    Type: 2, Metric: 0, Fwd addr: 25.25.25.1, Tag: 0.0.0.0
  Gen timer 00:33:06
  Aging timer 00:43:06
  Installed 00:16:53 ago, expires in 00:43:07, sent 00:16:44 ago
  Last changed 00:16:53 ago, Change count: 2, Ours
```

### 5.7) Opaque (Type 10)

Необходимы для работы CSPF. Собирают и передают в TLV различную информацию, например: зарезервированную пропускную способность, административные группы (цвета линков) и т.д. Пример:

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MazFvzpLkECQPspBhfy%2F-MazK30TOsVpIdl-up_9%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=c5bd98d2-5f59-49bc-afdd-33a171ec65d4)

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MazFvzpLkECQPspBhfy%2F-MazKFC4lwdikxttSlCU%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=f09499c2-11e2-48a9-943d-2bece9af61d6)

![](https://1953625668-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MFMJhMiVjTLWfbfC-S4%2F-MazFvzpLkECQPspBhfy%2F-MazKNhYig8d-1Z_f1-b%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=5ef8b474-a820-46e4-90f8-4ec3ed8cdec0)

```
root@R3> show ospf database extensive 
    OSPF database, Area 0.0.0.0
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len 
OpaqArea 1.0.0.3          1.1.1.1          0x80000001  1763  0x22 0x70d4 124
  Area-opaque TE LSA
  Link (2), length 100:
    Linktype (1), length 1:
      2
    LinkID (2), length 4:
      192.168.100.2
    LocIfAdr (3), length 4:
      192.168.100.1                     
    RemIfAdr (4), length 4:
      0.0.0.0
    TEMetric (5), length 4:
      1
    MaxBW (6), length 4:
      1000Mbps
    MaxRsvBW (7), length 4:
      1000Mbps
    UnRsvBW (8), length 32:
        Priority 0, 1000Mbps
        Priority 1, 1000Mbps
        Priority 2, 1000Mbps
        Priority 3, 1000Mbps
        Priority 4, 1000Mbps
        Priority 5, 1000Mbps
        Priority 6, 1000Mbps
        Priority 7, 1000Mbps
    Color (9), length 4:
      33554432
  Aging timer 00:30:37
  Installed 00:29:21 ago, expires in 00:30:37
  Last changed 00:29:21 ago, Change count: 1
```

## 6) Full

После того как база данных в области была синхронизирована, наступает расчёт кратчайших путей до каждой точки, т.е. запускается алгоритм SPF. После того, как все вычисления прошли, роутер переходит в состояние Full. Далее коммуникация поддерживается Hello-пакетами, а при изменениях высылается LSU, в ответ на которые посылаются LSA.
