Сообщение Hello
Значения полей:
Network Mask (4 октета) - маска IP-сети, в которой находится интерфейс маршрутизатора, отправившего сообщение.
Hello Interval (2 октета) - период посылки Hello-сообщений, в секундах.
Options (1 октет) - определено значение нескольких бит:
DC
EA
N/P
MC
E
T
БитТ
установлен a
поддерживается маршрутизация по типу сервиса (этот бит исключен из последней версии стандарта OSPF, но может поддерживаться для совместимости с предыдущими версиями).
Бит Е
установлен a
маршрутизатор может принимать и объявлять внешние маршруты через данный интерфейс, сброшен a
данный интерфейс маршрутизатора принадлежит тупиковой области.
Бит MC
установлен a
маршрутизатор поддерживает маршрутизацию мультикастинговых дейтаграмм (RFC 1584, в этой части пособия не обсуждается).
Бит N/P
установлен a
данный интерфейс маршрутизатора принадлежит не совсем тупиковой области (NSSA).
Бит EA
установлен a
маршрутизатор может получать и ретранслировать объявления о "внешних атрибутах" (к настоящему моменту описание опции не разработано).
Бит DC
установлен a
маршрутизатор поддерживает работу с соединениями, устанавливаемыми по требованию (demand circuits, RFC 1793) - это, например, означает, что записи о связях, устанавливаемых по требованию, не устаревают.
Поле "Options" используется для согласования возможностей маршрутизаторов-соседей (маршрутизатор может прервать соседские отношения, если какие-то опции соседа его не устраивают) и для определения того, какую информацию о состоянии связей не нужно посылать маршрутизатору-соседу, потому что он все равно не сможет ее обработать.
Priority (1 октет) - приоритет маршрутизатора; устанавливается администратором, используется при выборах выделенного маршрутизатора; маршрутизатор с нулевым приоритетом никогда не будет избран.
Dead Interval (4 октета) - время в секундах, по истечении которого маршрутизатор-сосед, не посылающий сообщения Hello, считается отключенным.
Designated Router (DR) (4 октета) - идентификатор выделенного маршрутизатора с точки зрения маршрутизатора, посылающего сообщение (0, если выделенный маршрутизатор еще не выбран).
Backup Designated Router (BDR) (4 октета) - идентификтор запасного выделенного маршрутизатора с точки зрения маршрутизатора, посылающего сообщение (0, если запасной выделенный маршрутизатор еще не выбран).
Neighbor,..., Neighbor - список идентификаторов соседей, от которых получены Hello-сообщения за последние Dead Interval секунд; число полей "Neighbor" определяется из общей длины сообщения, указанной в OSPF-заголовке. Длина одного поля — 4 октета.
После того, как пара маршрутизаторов начинает обмениваться Hello-сообщениями с каким-то соседом, этот процесс проходит через несколько стадий:
DOWN - сосед не обнаружен или отключился;
INIT - послано Hello-сообщение или получено от маршрутизатора, еще не зачисленного в список соседей;
2-WAY (двусторонняя связь) - получено Hello-сообщение, в котором данный маршрутизатор-получатель перечислен в списке соседей, а отправитель этого сообщения также зачислен в список соседей данного маршрутизатора;
WAIT - ожидание в течение Dead Interval секунд для обнаружения всех соседей; в это время маршрутизатор передает Hello-сообщения, но не участвует в выборах выделенного маршрутизатора и в синхронизировании баз данных;
EXSTART - установление ролей главный/подчиненный и инициализация структур данных для обмена описаниями баз данных (протокол обмена);
EXCHANGE - обмен описаниями баз данных (протокол обмена);
LOADING - синхронизация баз данных, пересылка сообщений-запросов о состояниях связей и ответов на них (протокол обмена);
FULL - базы данных синхронизированы.
Каждый маршрутизатор самостоятельно производит выборы выделенного и запасного выделенного маршрутизаторов на основании имеющихся у него данных о соседях и о том, кого каждый из соседей назначил на эту роль. Фактически процесс выборов происходит постоянно, после получения каждого Hello-сообщения, но алгоритм гарантирует, что при стабильном состоянии сети всеми маршрутизаторами будут выбираться одни и те же DR и BDR.
Каждый маршрутизатор может объявить себя либо выделенным, либо запасным, поместив свой идентификатор в соответствующее поле своих Hello-сообщений. Иначе он может поместить туда адреса других маршрутизаторов, если он считает их занимающими соответствующие роли. Если маршрутизатор не определился с выбором DR и (или) BDR (например, после включения), он заполняет соответствующие поля нулями.
Выбор проводится только среди соседей, с которыми установлена двусторонняя связь и приоритет которых не равен нулю; в этот список маршрутизатор включает и себя, если его приоритет не нулевой.
Итак, после получения очередного Hello-сообщения маршрутизатор приступает к выбору DR и BDR. Он помнит мнения своих соседей по поводу того, кто является DR и BDR, которые он узнал из получаемых Hello-сообщений, а также свой собственный предыдущий выбор.
После выбора DR и BDR маршрутизатор сообщает их идентификаторы в своих Hello-сообщениях. Если в результате процедуры выбора DR или BDR изменились по сравнению с предыдущим выбором данного маршрутизатора, он устанавливает необходимые отношения смежности, если они еще не были установлены, и разрывает ненужные больше отношения смежности, если таковые имеются.
Когда маршрутизатор подключается к сети, сначала он достигает состояния 2-WAY со всеми своими соседями, а потом, прежде чем приступать к выборам, ожидает время WAIT. В течение этого времени он передает Hello-сообщения с обнуленными полями DR и BDR. После истечения периода WAIT вновь подключившийся маршрутизатор может предлагать себя на роль BDR , производить выборы и формировать отношения смежности.