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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
glossary:net:protocols:ospf [2025/09/15 13:47] 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 
  
 ===== Основы ===== ===== Основы =====
Строка 266: Строка 266:
   * **Пограничный маршрутизатор автономной системы (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 — оставить заглушку)