13. OSPF. LSDB
Формат пакета
Version = 2
Type
1 - Hello
2 - DBD
3 - LS Request
4 - LS Update
5 - LS Acknowledgment
Router ID - уникальный в AS ID
Checksum - Internet Checksum
От всего пакета кроме Authentication
AuType - тип аутентификации
0 - аутентификация не используется
1 - открытый пароль
2 - криптографическая аутентификация
Типы пакетов
OSPFv2 использует следующие типы пакетов:
Hello - для установления соседства
Database Description (DBD) - для первичной синхронизации LSDB
LS Request - для первичной синхронизации LSDB
LS Update - для синхронизации LSDB
LS Acknowledgment - для подтверждения полученных данных
Типы канальных сред
OSPF ведет себя по-разному в разных канальных средах
Выделяются следюущие канальные среды по RFC 2328
Совпадение типа среды не проверяется при установлении соседства
Машина состояний соседств
Hello
Использвание Hello позволяет:
Убедиться в двусторонней связности между соседними роутерами
Убедиться в непротиворечивости конфигурации соседних роутеров
Hello Protocol
Пакеты Hello отправляются в сторону соседа
На broadcast и point-to-point каналах:
224.0.0.5 (All OSPF Routers)
Один пакет раз в Hello Interval
На OSPF Virtual Link и NBMA каналах
IP-адрес получателя - юникастовый адрес соседа
Один пакет раз в Hello Interval каждому соседу независимо
Hello не требует подтверждения
Immediate Hello - расширение OSPF
На Hello от нового соседа немедленно отправляется юникастовый ответ
Состояния Hello Protocol
Состояния Hello Protocol:
DOWN - IP-адрес соседа известен, канальный адрес неизвестен
ATTEMPT - IP и канальный адрес известны, соседу отправляется Hello
INIT - от соседа получено Hello без нашего RID в Neighbor List
2-WAY - от соседа получено Hello с нашим RID в Neighbor List
При переводе соседа в 2-WAY маршрутизатор должен:
Определить IP-адреса DR и BDR в канале
Определить необходимости дальнейшей синхронизации LSDB с соседом
Выбор DR и BDR
DR и BDR оптимизируют топологию multiaccess-каналов
Выбираются только в broadcast и NBMA средах
При инициализации интерфейса DR=BRD=0.0.0.0
Слушаем Hello в течение Wait Timer (по умолчанию равен Dead Timer)
Если получено Hello от соседа, указавшего себя DR - выбираем его
Если получено несколько Hello - выбираем по максимальному Priority
Составляем список маршрутизаторов, которые могут стать DR
Мы и все наши 2-WAY соседи (кроме тех, у кого Priority = 0)
Выбираем соседа с максимальным Priority и RID
Повторяем процедуру для BDR
DR до выборов BDR не допускается
Первичная синхронизация LSDB
В состояние EXSTART из 2-WAY соседи переходят, если:
В канальной среде не выбираются DR/BDR
Point-to-Point
Point-to-Multipoint
OSPF Virtual Link
В канальной среде выбираются DR/BDR, и кто-то из соседей выбран DR или BDR
DROTHER между собой напрямую LSDB не реплицируют и остаются в 2-WAY
В EXSTART соседи принимают решение о порядке обмена DBD
Определяются роли Master и Slave и проверяется совпадение MTU
Database Description
Interface MTU для Virtual Link указывается равным нулю
Нужно выполнить Path MTU Discovery или ограничить пакеты 576 байтами
Sequence Number увеличивается с каждым пакетом (как в EIGRP)
Стартовое значение случайное, как в TCP
Флаги:
I (Init) обозначает инициализацию Sequence Number (аналог SYN в TCP) - выставляется мастером
M (More) указывает на то, что фаза Exchange не закончена
MS (Master/Slave) указывает на роль мастера
Выбор Master/Slave
Мастером выбирается маршрутизатор с большим RID (без priority)
В EXSTART оба соседа отправляют DBD c I=1, M=1, MS=1
Один должен сдаться и отправить ответное DBD c I=0, M=1, MS=0
Формально это сообщение уже относится к фазе EXCHANGE на обоих роутерах, в нем начинают передаваться заголовки LSA
Маршрутизатор, получивший DBD с Interface MTU, превышающим его собственный, должен проигнорировать такой пакет
Сосед останется висеть в EXSTART и не перейдет в EXCHANGE
Обмен пакетами DBD
DBD всегда отправляются парой Master>Slave; Slave>Master
Флаг M указывает на необходимость продолжения процесса
Master будет отправлять DBD, если Slave отправляет M=1
Роутер может отправить пустой DBD, если больше отправлять нечего
Если подтверждение не получено - будет ретрансмит
Хитрая схема подтверждения доставки
Slave, подтверждая предыдущий пакет, отправляет пакет в SN=X
Master, подтверждая предыдущий пакет, отправляет пакет с SN=X+1
Slave не ждет подтверждения на пакет, когда оба соседа отправили M=0
Это не страшно, т. к. Master не получит подтверждения на свой пакет и переотправит его
Exchange
Маршрутизаторы синхронизируют заголовки LSA из LSDB
LS Age - время в секундах с выпуска LSA
LS ID - идентификатор LSA
Advertising Router - RID выпустившего роутера
LS Sequence Number - версия LSA
LS Checksum - аглоритм Флетчера, нет Internet Checksum
Loading
В фазе Loading маршрутизатор запрашивает нужные LSA у соседа
Отправляет запрос LS Request с заголовками нужных LSA
Принимается LS Update с запрошенным содержимым
Получение подтверждается пакетом LS Acknowledge с заголовками LSA
После получения всех запрошенных LSA сосед переводится в Full
Жизненный цикл LSA
LS Sequence Number - номер версии LSA (signed int32)
Увеличивается на 1 при внесении изменений в LSA
LSA создается c SN=0x8000001, при достижении 0x7FFFFFFF флашится
LS Age - время в секундах, прошедшее с выпуска LSA
Если LS Age больше 1800 (30 минут), LSA перевыпускается
Если LS Age больше 3600 (1 час), LSA исключается из топологии и флашится
Распространение LSA с MaxAge эффективно убирает ее из LSDB на всех роутерах
Обновление LSA в среде без DR
При обновлении LSDB роутер раздает новые LSA соседям
Отправляет LSU с новыми LSA
Ждет подтверждения с идентичными заголовками (LSU или LSAck)
В среде без DR каждому соседу в канале отправляется LSU:
P2P - мультикаст на 224.0.0.5
P2MP - юникаст на адрес соседа
Обновление LSA в среде с DR
В среде с DR отправлять LSU каждому роутеру в канале накладно
При обновлении LSDB на DROTHER сначала уведомляется DR:
мультикаст на 224.0.0.6
DR уведомляет остальных участников (подтверждая полученную LSA)
мультикаст на 224.0.0.5
Ответные юникастовые LSAck подтверждают полученную LSA
Аутентификация
Last updated