мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
glossary:net:protocols:ospf [2025/09/15 13:45] radi0devglossary:net:protocols:ospf [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 1: Строка 1:
 ====== OSPF ====== ====== OSPF ======
 +
 +основано на http://xgu.ru/wiki/OSPF
  
 OSPF (**O**pen **S**hortest **P**ath **F**irst) — протокол (3его уровня) динамической маршрутизации OSPF (**O**pen **S**hortest **P**ath **F**irst) — протокол (3его уровня) динамической маршрутизации
Строка 6: Строка 8:
  
 OSPFv3 не зависит от протоколов 3-го уровня и потому может работать с IPv6 OSPFv3 не зависит от протоколов 3-го уровня и потому может работать с IPv6
- 
-Терминология протокола OSPF 
  
 ===== Основы ===== ===== Основы =====
Строка 206: Строка 206:
 | Backbone (area 0) | - | Все LSA разрешены | Разрешены все типы маршрутов | | Backbone (area 0) | - | Все LSA разрешены | Разрешены все типы маршрутов |
 | Normal | - | Все LSA разрешены | Разрешены все типы маршрутов | | Normal | - | Все LSA разрешены | Разрешены все типы маршрутов |
-| Stub | EX => IA 0.0.0.0/0 ASBR  запрещен | LSA 5 запрещены | Все внешние маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне | +| Stub | EX => IA 0.0.0.0/0\\ ASBR  запрещен | LSA 5 запрещены | Все внешние маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне | 
-| Totally Stub | EX и IA => IA 0.0.0.0/0 ASBR  запрещен | LSA 5 запрещены +| Totally Stub | EX и IA => IA 0.0.0.0/0 ASBR  запрещен | LSA 5 запрещены\\ Все LSA 3 заменены на LSA 3 0.0.0.0/0 | Все внешние и межзональные маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне | 
-Все LSA 3 заменены на LSA 3 0.0.0.0/0 | Все внешние и межзональные маршруты заменены на межзональный маршрут по умолчанию. ASBR не может находиться в зоне | +| NSSA | EX => 0.0.0.0\\ ASBR разрешен | LSA 5 запрещены\\ LSA 7 передает внешние маршруты только в NSSA | Все внешние маршруты **должны быть** заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR | 
-| NSSA | EX => 0.0.0.0 +| Totally NSSA | EX и IA => 0.0.0.0\\ ASBR разрешен | LSA 5 запрещены\\ Все LSA 3 заменены на LSA 3 0.0.0.0/0\\ LSA 7 передает внешние маршруты только в NSSA | Все внешние и межзональные маршруты **должны быть** заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR |
-ASBR разрешен | LSA 5 запрещены +
-LSA 7 передает внешние маршруты только в NSSA | Все внешние маршруты **должны быть** заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR | +
-| Totally NSSA | EX и IA => 0.0.0.0 +
-ASBR разрешен | LSA 5 запрещены +
-Все LSA 3 заменены на LSA 3 0.0.0.0/0 +
- +
-LSA 7 передает внешние маршруты только в NSSA | Все внешние и межзональные маршруты **должны быть** заменены на межзональный маршрут по умолчанию. В зоне может быть ASBR |+
  
 ==== Магистральная зона (backbone area) ====  ==== Магистральная зона (backbone area) ==== 
Строка 242: Строка 235:
   * Если маршрутизаторам из тупиковой зоны необходимо передавать информацию за границы зоны, то они используют маршрут по умолчанию   * Если маршрутизаторам из тупиковой зоны необходимо передавать информацию за границы зоны, то они используют маршрут по умолчанию
   * В totally stub зоне не может находиться ASBR.    * В totally stub зоне не может находиться ASBR. 
-    ** Исключение из этого правила — ABR может быть и ASBR.+    * Исключение из этого правила — ABR может быть и ASBR.
   * На всех маршрутизаторах зоны должна быть указана "тупиковость"   * На всех маршрутизаторах зоны должна быть указана "тупиковость"
-    ** замена межзональных маршрутов на маршрут по умолчанию настраивается только на ABR зоны +    * замена межзональных маршрутов на маршрут по умолчанию настраивается только на ABR зоны 
  
 То есть, фактически totally stub зона это "усиление" тупиковой: в ней не только внешние маршруты, но и межзональные заменены на маршрут по умолчанию. То есть, фактически totally stub зона это "усиление" тупиковой: в ней не только внешние маршруты, но и межзональные заменены на маршрут по умолчанию.
Строка 272: Строка 265:
   * **Магистральный маршрутизатор (backbone router)** — маршрутизатор, у которого всегда хотя бы один интерфейс принадлежит магистральной зоне. Определение похоже на пограничный маршрутизатор, однако магистральный маршрутизатор не всегда является пограничным. Внутренний маршрутизатор интерфейсы которого принадлежат нулевой зоне, также является магистральным.   * **Магистральный маршрутизатор (backbone router)** — маршрутизатор, у которого всегда хотя бы один интерфейс принадлежит магистральной зоне. Определение похоже на пограничный маршрутизатор, однако магистральный маршрутизатор не всегда является пограничным. Внутренний маршрутизатор интерфейсы которого принадлежат нулевой зоне, также является магистральным.
   * **Пограничный маршрутизатор автономной системы (AS boundary router, ASBR)** — обменивается информацией с маршрутизаторами, принадлежащими другим автономным системам или не-OSPF маршрутизаторами. Пограничный маршрутизатор автономной системы может находиться в любом месте автономной системы и быть внутренним, пограничным или магистральным маршрутизатором.   * **Пограничный маршрутизатор автономной системы (AS boundary router, ASBR)** — обменивается информацией с маршрутизаторами, принадлежащими другим автономным системам или не-OSPF маршрутизаторами. Пограничный маршрутизатор автономной системы может находиться в любом месте автономной системы и быть внутренним, пограничным или магистральным маршрутизатором.
 +
 +===== Объявления о состоянии канала (LSA) =====
 +
 +**Объявление о состоянии канала (Link State Advertisement, LSA)** — единица данных, которая описывает локальное состояние маршрутизатора или сети.
 +
 +Множество всех LSA, описывающих маршрутизаторы и сети, образуют базу данных состояния каналов (LSDB).
 +
 +У каждого типа LSA своя функция:
 +  * Router LSA и Network LSA описывают каким образом соединены маршрутизаторы и сети внутри зоны.
 +  * Summary LSA предназначены для сокращения количества передаваемой информации о зонах. Описывают сети других зон для локальной.
 +  * ASBR Summary LSA описывает для других зон, как дойти до локального ASBR.
 +  * AS External LSA позволяет передавать по автономной системе информацию, которая получена из внешних источников (например, из другого протокола маршрутизации).
 +
 +Фактически, сами по себе LSA маршрутизаторы не передают. Они передают LSA внутри других пакетов:
 +  * В Database Description передается описание всех LSA, которые хранятся в LSDB маршрутизатора,
 +  * В Link State Request передается запрос с описанием тех LSA, которых не хватает в LSDB,
 +  * В Link State Update передаются полные LSA,
 +  * В Link State Acknowledgment передается подтверждение о получении конкретных LSA, с описанием этих LSA.
 +
 +==== Суммарная информация о LSA ==== 
 +^ Номер LSA ^ Название LSA ^ Link-State ID ^ Кто отправляет ^ Область распространения ^
 +| LSA 1 | Router LSA | Router ID отправителя | Все маршрутизаторы | Внутри зоны (IntraArea) |
 +| LSA 2 | Network LSA | IP-адрес интерфейса DR | DR (в сетях со множественным доступом) | Внутри зоны (IntraArea) |
 +| LSA 3 | Network Summary LSA | Сети назначения и маска сети | ABR | AS (InterArea) |
 +| LSA 4 | ASBR Summary LSA | Router ID ASBR | ABR | AS (InterArea) |
 +| LSA 5 | AS External LSA | Внешняя сеть и маска | ASBR | AS (InterArea) |
 +| LSA 7 | AS External LSA for NSSA | Внешняя сеть и маска | ASBR в NSSA | NSSA |
 +
 +==== Заголовок LSA ==== 
 +Все LSA начинаются с одинакового заголовка размером 20 байт.
 +
 +<code>
 +0                                                       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    |    LS type    |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                        Link State ID                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                     Advertising Router                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                     LS sequence number                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|         LS checksum                       length            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +</code>
 +
 +Любое LSA уникально идентифицируют 3 поля заголовка:
 +  * LS type
 +  * Link State ID
 +  * Advertising Router
 +
 +Так как может существовать несколько копий одного и того же LSA, необходимо определять какая из копий актуальна.
 +Это осуществляется с помощью анализа полей:
 +  * LS age
 +  * LS sequence number
 +  * LS checksum
 +
 +Описание полей заголовка LSA:
 +  * LS age — время (в секундах) с момента генерации LSA
 +  * Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
 +    * E-bit — указывает каким образом распространяются AS-external-LSA
 +    * MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
 +    * N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
 +    * EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
 +    * DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
 +  * LS type — тип LSA. У каждого типа LSA свой формат, который описан в соответствующем разделе
 +  * Link State ID — о чем сообщает LSA. Содержание этого поля зависит от типа LSA. Значения поля для разных LSA описаны в соответствующих разделах
 +  * Advertising Router — Router ID маршрутизатора, который сгенерировал LSA
 +  * LS sequence number — версия LSA. Используется для обнаружения старых и дублирующихся LSA
 +  * LS checksum — контрольная сумма, для проверки целостности. Контрольная сумма берется со всего LSA, кроме поля LS age
 +  * Length — длина всего LSA (включая заголовок) в байтах
 +
 +==== Type 1 LSA ==== 
 +**Type 1 LSA — Router LSA** — объявление о состоянии каналов маршрутизатора:
 +  * LSA распространяются всеми маршрутизаторами.
 +  * Распространяются только в пределах одной зоны.
 +
 +В Router LSA содержится:
 +  * описание всех каналов маршрутизатора
 +  * стоимость (cost) каждого канала
 +  * список соседей на каждом интерфейсе (в зоне маршрутизатора)
 +  * Link-state ID — Router ID маршрутизатора, который отправляет LSA
 +
 +LSA Type 1 link types и соответствующие link ID:
 +  * Point-to-point соединение с другим маршрутизатором — Router ID соседа
 +  * Соединение с тупиковой сетью (сеть, к которой присоединен только один маршрутизатор(локальный)) — сеть/маска
 +  * Соединение с транзитной сетью (сеть, в которой есть как минимум два непосредственно присоединенных маршрутизатора) — IP-адрес DR
 +  * Virtual link — Router ID соседа
 +
 +==== Type 2 LSA ==== 
 +**Type 2 LSA — Network LSA** — объявление о состоянии каналов сети:
 +  * Распространяется DR в сетях со множественным доступом
 +  * Network LSA не создается для сетей в которых не выбирается DR
 +  * Распространяются только в пределах одной зоны
 +  * Link-state ID — IP-адрес интерфейса DR
 +
 +В LSA содержится описание всех маршрутизаторов присоединенных к сети, включая DR и маска сети, за которую отвечает DR.
 +
 +
 +<note>
 +Зачастую возникает вопрос: "Зачем нужен LSA 2? Ведь в LSA 1 можно было бы тоже указать соседей и для сетей с множественным доступом, и, уж тем более, маску сети."
 +
 +Необходимость и преимущества LSA 2 понятны, если рассмотреть сеть, в которой в одном широковещательном сегменте будет много маршрутизаторов. Например, в одном широковещательном сегменте, 5 маршрутизаторов.
 +
 +Тогда, если предположить, что информация передается в LSA 1, каждый из маршрутизаторов, должен бы был перечислить всех своих соседей, и указать в какой он сети. То есть, получаем, 5 * (5 -1) каналов (links) в LSDB.
 +
 +LSA 2 позволяет существенно сократить количество каналов в LSDB.
 +</note>
 +
 +
 +<note>
 +В ситуации, когда сама сеть с множественным доступом, но в широковещательном сегменте всего два соседа OSPF (как правило, такое бывает для транзитных линков между сетевыми устройствами), LSA 2 и выбор DR не нужны, и можно перевести интерфейсы в режим point-to point.
 +</note>
 +
 +==== Type 3 LSA ==== 
 +**Type 3 LSA — Network Summary LSA** — суммарное объявление о состоянии каналов сети:
 +  * Объявление распространяется пограничными маршрутизаторами
 +  * Объявление описывает маршруты к сетям вне локальной зоны
 +  * Содержит информацию о сетях и о стоимости пути к этим сетям, но не отправляет информацию о топологии сети
 +  * По умолчанию, пограничный маршрутизатор отправляет отдельное объявление для каждой известной ему сети
 +    * При необходимости, на ABR сети могут быть просуммированы
 +  * Link-state ID — номер сети назначения.
 +
 +Когда маршрутизатор получает Network Summary LSA от пограничного маршрутизатора он не запускает алгоритм вычисления кратчайшего пути. Маршрутизатор просто добавляет к стоимости маршрута указанного в LSA стоимость пути к пограничному маршрутизатору. Затем маршрут к сети через пограничный маршрутизатор помещается в таблицу маршрутизации.
 +
 +==== Type 4 LSA ==== 
 +**Type 4 LSA — ASBR Summary LSA** — суммарное объявление о состоянии каналов пограничного маршрутизатора автономной системы:
 +  * Объявление распространяется пограничными маршрутизаторами (ABR)
 +  * ASBR Summary LSA отличается от Network Summary LSA тем, что распространяется информация не о сети, а о пограничном маршрутизаторе автономной системы
 +  * Link-state ID — Router ID ASBR, информацию о котором отправляет LSA
 +
 +Когда в домен OSPF помещаются сторонние маршруты, информация о них отправляется с помощью LSA 5. Но внутри этих LSA, указывается, что маршрут известен через ASBR. А путь к ASBR известен только тем маршрутизаторам, которые с ним в одной зоне.
 +
 +Всем маршрутизаторам, которые находятся в другой зоне, необходимо сообщить о том, где находится ASBR. Это делает ABR, который находится в той же зоне, что и ASBR. Он сообщает о местоположении ASBR помощью LSA 4.
 +
 +==== Type 5 LSA ==== 
 +**Type 5 LSA — AS External LSA** — объявления о состоянии внешних каналов автономной системы:
 +  * Объявление распространяется пограничным маршрутизатором автономной системы в пределах всей автономной системы
 +  * Объявление описывает маршруты внешние для автономной системы OSPF или маршруты по умолчанию внешние для автономной системы OSPF
 +  * Link-state ID — номер внешней сети.
 +
 +==== Type 7 LSA ==== 
 +**Type 7 LSA — AS External LSA for NSSA** — объявления о состоянии внешних каналов автономной системы в NSSA зоне:
 +  * Это объявление может передаваться только в NSSA зоне
 +  * LSA 7 аналогично по содержанию LSA 5, но используется только в NSSA зоне
 +    * LSA 7 нужно было для того чтобы обойти ограничения, которые были заложены в определение Stub зоны
 +  * На границе зоны пограничный маршрутизатор преобразует type 7 LSA в type 5 LSA.
 +
 +===== Типы пакетов OSPF =====
 +
 +OSPF использует 5 типов пакетов:
 +  * **Hello** — используется для обнаружения соседей, построения отношений соседства с ними и мониторинга доступности.
 +  * **Database Description (DBD)** — проверяет синхронизацию базы данных между маршрутизаторами.
 +  * **Link-State Request (LSR)** — запрашивает определенные записи о состоянии каналов от маршрутизатора к маршрутизатору.
 +  * **Link-State Update (LSU)** — отправляет определенные записи о состоянии каналов в ответ на запрос.
 +  * **Link-State Acknowledgment (LSAck)** — подтверждает получение других типов пакетов.
 +
 +==== Формат заголовка пакета OSPF ==== 
 +Все пять типов пакетов OSPF инкапсулируются непосредственно в IP-пакет.  
 +Номер протокола OSPF в IP-заголовке — 89.
 +
 +У всех пакетов OSPF одинаковый заголовок.
 +
 +<code> 
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #       Type      |         Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +</code>
 +
 +Поля заголовка пакета OSPF:
 +  * Версия протокола (Version number) — версия протокола OSPF. Текущая версия для IPv4 — 2.
 +  * Тип пакета (Type) — указывает какой тип пакета OSPF передается:
 +    * 1 — Hello
 +    * 2 — Database Description
 +    * 3 — Link State Request
 +    * 4 — Link State Update
 +    * 5 — Link State Acknowledgment
 +  * Длина пакета (Packet length) — длина пакета OSPF в байтах. Длина включает в себя и заголовок.
 +  * Идентификатор маршрутизатора (Router ID) — определяет какой маршрутизатор отправил пакет.
 +  * Идентификатор зоны (Area ID) — определяет в какой зоне сгенерирован пакет.
 +  * Контрольная сумма (Checksum) — используется для проверки целостности пакета OSPF, для обнаружения ошибок при передаче.
 +  * Тип аутентификации (Authentication type) — тип аутентификации, который используется между маршрутизаторами:
 +    * 0 — аутентификация не используется,
 +    * 1 — аутентификация открытым текстом,
 +    * 2 — MD5-аутентификация.
 +  * Данные аутентификации (Authentication) — используется при аутентификации маршрутизаторов.
 +
 +Поле "Данные" отличается для различных типов пакетов OSPF:
 +  * Hello — список известных соседей
 +  * DBD — содержит суммарную информацию базы данных состояний каналов, которая включает в себя все известные идентификаторы маршрутизаторов и их последние номера последовательностей (sequence number) и другую информацию.
 +  * LSR — содержит тип необходимого LSU и идентификатор маршрутизатора, у которого есть этот LSU.
 +  * LSU — содержит полные записи объявления о состоянии канала. Несколько LSA могут передаваться в одном пакете обновлений.
 +  * LSAck — поле пустое
 +
 +==== Hello ==== 
 +Hello-пакет используется для таких целей:
 +  * С помощью него каждый маршрутизатор обнаруживает своих соседей;
 +  * Он передает параметры о которых маршрутизаторы должны договориться прежде чем они станут соседями;
 +  * Hello-пакеты выполняют роль keepalive-пакетов между соседями;
 +  * Отвечает за установление двухсторонних коммуникаций между соседними маршрутизаторами (двухсторонняя коммуникация установлена тогда, когда маршрутизатор увидит себя в списке соседей hello-пакета полученного от соседнего маршрутизатора);
 +  * Он выбирает DR и BDR в широковещательных и нешироковещательных сетях со множественным доступом.
 +
 +Кроме стандартного заголовка пакета OSPF, в hello-пакете содержится такая информация:
 +
 +<code>
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #                       Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                        Network Mask                           |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|         HelloInterval            Options    |    Rtr Pri    |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                     RouterDeadInterval                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                      Designated Router                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                   Backup Designated Router                    |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Neighbor                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                              ...                              |
 +</code>
 +
 +  * Network mask — сетевая маска назначенная на интерфейсе с которого отправляется hello-пакет;
 +  * HelloInterval — частота отправки hello-пакетов;
 +  * Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
 +    * E-bit — указывает каким образом распространяются AS-external-LSA
 +    * MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
 +    * N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
 +    * EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
 +    * DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
 +  * Rtr Pri — приоритет маршрутизатора. Используется для выбора DR и BDR. Если приоритет установлен в 0, то маршрутизатор не может стать DR или BDR;
 +  * RouterDeadInterval — интервал времени по истечению которого сосед будет считаться "мертвым";
 +  * Designated Router — IP-адрес DR для сети в которую отправлен hello-пакет, с точки зрения отправляющего маршрутизатора. Поле установлено в значение 0.0.0.0, если в сети нет DR;
 +  * Backup Designated Router — IP-адрес BDR для сети в которую отправлен hello-пакет, с точки зрения отправляющего маршрутизатора. Поле установлено в значение 0.0.0.0, если в сети нет BDR;
 +  * Neighbor — идентификаторы всех маршрутизаторов от который маршрутизатор-отправитель получал hello-пакеты в течение последнего интервала RouterDeadInterval.
 +
 +==== Database Description ==== 
 +DBD (Database Description) -- пакет, который описывает содержание LSDB маршрутизатора. Эти пакеты позволяют маршрутизаторам обменяться информацией о том, что они знают и чего недостает в их LSDB.
 +
 +Кроме стандартного заголовка пакета OSPF, в DBD-пакете содержится такая информация:
 +
 +<code> 
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #                       Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|         Interface MTU            Options    |0|0|0|0|0|I|M|MS
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                     DD sequence number                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-                      An LSA Header                          -+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                              ...                              |
 +</code>
 +
 +  * Interface MTU — максимальный размер IP-пакета, который можно отправить с соответствующего интерфейса без фрагментации
 +  * Options — дополнительные опции, которые может поддерживать маршрутизатор. Это поле есть в пакетах hello, DBD, LSA. Согласно RFC 2328 могут быть установлены такие 5 битов:
 +    * E-bit — указывает каким образом распространяются AS-external-LSA
 +    * MC-bit — указывает соответствует ли IP multicast датаграмма спецификациям RFC 1584;
 +    * N/P-bit — указывает как обрабатываются Type-7 LSA (RFC 1587);
 +    * EA-bit — указывает желание маршрутизатора получать и отправлять External-Attributes-LSA;
 +    * DC-bit — указывает как маршрутизатор работает с demand circuits (RFC 1793);
 +  * I-bit — Init bit. Значение бита равное 1, означает, что этот пакет первый в последовательности DBD-пакетов
 +  * M-bit — More bit. Значение бита равное 1, означает, что далее последуют дополнительные DBD-пакеты
 +  * MS-bit — Master/Slave bit. Значение бита равное 1, означает, что маршрутизатор получил роль Master, в процессе обмена информацией в LSDB. Иначе, маршрутизатор Slave.
 +  * DD sequence number — номер последовательности, который используется для нумерации наборов DBD-пакетов.
 +    * Начальный номер должен быть уникальным (Init bit оповещает о начальном пакете и номер в этом пакете и есть начальный)
 +    * В процессе обмена DBD-пакетами DD sequence number растет, пока не завершится описание LSDB
 +  * LSA header — в этом поле передаются заголовки тех LSA, которые находятся в LSDB:
 +    * Заголовка LSA достаточно, так как информации, которая передается в заголовке, достаточно чтобы уникально идентифицировать LSA
 +
 +==== Link State Request ==== 
 +Запрос информации о состоянии канала. Этот тип пакетов запрашивает отдельные фрагменты базы данных состояния каналов маршрутизатора.
 +
 +<code> 
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #                       Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          LS type                              |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Link State ID                           |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                     Advertising Router                        |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                              ...                              |
 +</code>
 +
 +==== Link State Update ==== 
 +
 +<code> 
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #                       Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                            # LSAs                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                                                               |
 ++-                                                            +-+
 +|                             LSAs                              |
 ++-                                                            +-+
 +|                              ...                              |
 +</code>
 +
 +==== Link State Acknowledgment ==== 
 +
 +<code>
 +|<-------------------------- 32 бита --------------------------->|
 +
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|   Version #                       Packet length         |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                          Router ID                            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                           Area ID                             |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|           Checksum            |             AuType            |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                       Authentication                          |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-                         An LSA Header                       -+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-                                                             -+
 +|                                                               |
 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +|                              ...                              |
 +</code>
 +
 +===== Выбор лучшего маршрута =====
 +
 +Маршрутизатор выбирает лучший маршрут на основании наименьшего значения метрики. Однако OSPF учитывает и несколько других факторов при выборе маршрута.
 +
 +==== Выбор лучшего типа маршрута ====
 +Если маршрутизатору известны маршруты к одной и той же сети, но эти маршруты разных типов, то маршрутизатор выбирает наиболее приоритетный тип маршрута и не учитывает стоимость маршрута.
 +
 +Различные типы маршрутов, в порядке убывания приоритета:
 +  * Внутренние маршруты зоны (intra-area)
 +  * Маршруты между зонами (interarea)
 +  * Внешние маршруты типа 1 (E1)
 +  * Внешние маршруты типа 2 (E2)
 +
 +Хотя стоимость маршрута E2 не меняется при передаче его по зонам (не добавляется стоимость пути к ASBR), при совпадении стоимости маршрутов E2 сравнивается стоимость пути к ASBR, который анонсирует маршрут.
 +
 +==== Метрика OSPF ====
 +OSPF использует метрику, которая называется стоимость (cost). Стоимость сравнивается у маршрутов одного типа.
 +
 +В RFC 2328 не описывается как именно должна рассчитываться стоимость (cost) интерфейса. Определен только диапазон значений: 1-65535. В мультивендорной среде на это стоит обратить внимание.
 +
 +Пример (Cisco):
 +<pre>
 +cost = reference bandwidth / link bandwidth
 +</pre>
 +Reference bandwidth — пропускная способность, относительно которой вычисляется стоимость; по умолчанию 100Mb, но может быть изменена.
 +
 +Суммарная стоимость маршрута считается суммированием стоимости исходящих интерфейсов по пути передачи LSA.
 +
 +Для обозначения недоступной сети OSPF использует метрику 16777215 (2^24 — 1), которая считается недостижимой метрикой.
 +
 +==== ABR Loop Prevention ====
 +Внутри зон OSPF использует логику link-state протокола, но между зонами он в некотором смысле работает как дистанционно-векторный протокол.
 +
 +При анонсировании в зону type 3 LSA передается информация о сети назначения, стоимости пути и ABR, через которого сеть достижима — параметры аналогичны дистанционно-векторным протоколам.
 +
 +OSPF не использует традиционные механизмы дистанционно-векторных протоколов для предотвращения петель. OSPF применяет ряд правил распространения LSA между зонами, что исключает возможность возникновения петель, но это может привести к тому, что передача данных будет не по лучшему пути.
 +
 +==== Внешние маршруты ====
 +OSPF использует два типа маршрутов для описания сетей вне автономной системы:
 +  * Type 1 external routes (E1)
 +  * Type 2 external routes (E2)
 +
 +Type 1 external routes — к метрике внешнего маршрута добавляется стоимость пути к ASBR, который анонсирует этот маршрут. Используется, когда несколько маршрутизаторов анонсируют внешнюю сеть. Когда ABR передает type 5 LSA в другую зону, он создает type 4 LSA, которое указывает стоимость пути от этого ABR до ASBR, который создал type 5 LSA.
 +
 +Маршрутизатор (не ABR), который находится в разных зонах с ASBR, будет вычислять метрику внешнего маршрута E1 суммированием:
 +  * метрики внешнего маршрута из type 5 LSA,
 +  * стоимости пути к ASBR, которая анонсируется в type 4 LSA,
 +  * стоимости пути к ABR, который анонсировал type 4 LSA.
 +
 +Type 2 external routes (по умолчанию) — используется только стоимость внешнего маршрута и при передаче по сети стоимость не увеличивается. При получении type 5 LSA маршрутизаторы добавляют в таблицу маршрут во внешнюю сеть со стоимостью, указанной в type 5 LSA.
 +
 +<note>Хотя стоимость маршрута E2 не меняется при передаче его по зонам, при совпадении стоимости маршрутов E2 сравнивается стоимость пути к ASBR, который анонсирует маршрут.</note>
 +
 +=== Forwarding address в Type 5 LSA ===
 +В RFC 2328 (раздел 16.4) указано: если forwarding address не нулевой, нужно посмотреть этот forwarding address в таблице маршрутизации. Соответствующая запись должна быть внутризональной или межзональной; если такого пути нет — LSA игнорируется.
 +
 +Иными словами, нельзя использовать внешний маршрут для достижения другого внешнего маршрута — это может привести к петлям, поэтому запрещено.
 +
 +==== Вычисление таблицы маршрутизации ====
 +Маршрутизатор, используя LSDB зон, к которым он подключен, строит таблицу маршрутизации по следующей последовательности. LSA с LS age = MaxAge не учитываются.
 +
 +Процесс:
 +  1. Текущая таблица маршрутизации обнуляется — строится заново. Старая таблица сохраняется для обнаружения изменений.
 +  2. С помощью построения дерева кратчайшего пути для каждой присоединённой зоны вычисляются внутризональные маршруты. Во время вычисления дерева для зоны также вычисляется TransitCapability, используемая позднее. Все записи с Destination Type = area border router вычисляются на этом этапе. Этап состоит из двух частей:
 +     * Сначала дерево строится с учётом только линков между маршрутизаторами и транзитными сетями.
 +     * Затем тупиковые сети включаются в дерево.
 +  3. Межзональные маршруты вычисляются просмотром summary LSA. Если маршрутизатор пограничный, просматриваются summary LSA только магистральной зоны.
 +  4. На пограничных маршрутизаторах, присоединённых к одной или более транзитным зонам (не backbone зоны, где TransitCapability = TRUE), проверяются summary LSA транзитных зон на предмет лучших путей, чем найденные на этапах 2–3.
 +  5. Вычисляются маршруты к внешним сетям — просматриваются AS-external-LSA. Местонахождение ASBR было обнаружено на этапах 2–4.
 +
 +=== Вычисление дерева кратчайшего пути для зоны === 
 +
 +{{fixme}}
 +
 +(раздел для подробного описания алгоритма SPF — оставить заглушку для последующего наполнения)
 +
 +=== Вычисление next hop === 
 +
 +{{fixme}}
 +
 +(раздел для описания логики определения следующего хопа — оставить заглушку для последующего наполнения)
 +
 +=== Вычисление внешних маршрутов =====
 +
 +{{fixme}}
 +
 +(раздел для подробного описания вычисления E1/E2 и взаимодействия с type4/type5 — оставить заглушку)
 +
 +=== Equal-cost multipath === 
 +
 +{{fixme}}
 +
 +(раздел для описания ECMP в OSPF — оставить заглушку)
 +