Протокол маршрутизации OSPF

Спецификация протокола OSPF (Open Shortest Path First) [2] - иерархического протокола маршрутизации, при котором маршрут выбирается на основании информации о состоянии канала - описана в документе RFC 1247. Этот протокол вычисляет маршруты в сетях на базе протокола IP, сохраняя при этом другие протоколы обмена маршрутной информацией. OSPF является протоколом маршрутизации с объявлением состояния канала связи. Это означает, что он требует отправки данных о состоянии канала на все маршрутизаторы, находящиеся в одном домене. Сообщения протокола OSPF передаются в IP-дей-таграммах со значением поля «Протокол» заголовка дейтаграммы, равным 89.

После инициализации каждый маршрутизатор передает сообщения LSA (Link-State Advertisement) - описание локального состояния маршрутизатора - на все свои порты. Данное сообщение позволяет уникально идентифицировать передающий маршрутизатор и состояние каждого из его портов. Сообщение LSA содержит параметры каждого порта маршрутизатора, такие как:

· IP-адрес;

· маска подсети;

· метрика, присвоенная каналу связи порта;

· статус канала связи.

Данное сообщение LSA будет передаваться во всем домене маршрутизации, и, соответственно, все маршрутизаторы получат его и будут обладать информацией о состоянии каналов всех других маршрутизаторов в домене. Каждый маршрутизатор собирает индивидуальные сообщения LSA и затем формирует с их помощью базу данных состояний каналов. Все маршрутизаторы в одном домене маршрутизации будут управлять идентичными базами данных состояний каналов.

После того как все базы данных на маршрутизаторах синхронизированы, каждый маршрутизатор начинает создавать свою таблицу маршрутизации. Эта таблица базируется на информации, содержащейся в базе данных состояний каналов. Первым шагом является создание карты сетевой топологии. Для построения карты сетевой топологии каждый маршрутизатор помещает информацию из полученных сообщений LSA в свою память. Непосредственно связанные маршрутизаторы в спецификации протокола OSPF называются «соседями». Каждый маршрутизатор хранит информацию о том, в каком состоянии, по его мнению, находится сосед. Маршрутизатор передает соседям дейтаграммы только в том случае, если он уверен, что они полностью работоспособны.

После того как карта сетевой топологии построена, маршрутизатор формирует дерево кратчайших путей ко всем возможным получателям. Данное дерево строится так, что путь от корня маршрутизатора, формирующего дерево, до конечных объектов - целевых сетей - выбирается с наименьшей стоимостью. При построении дерева маршрутизатор помещает себя в его корень. В результате каждый маршрутизатор формирует свое дерево независимо от других маршрутизаторов, но с учетом того, что они все имеют идентичную базу данных состояний канала.

В случае если любой из маршрутизаторов обнаружит изменения в состоянии своих каналов, он должен разослать сообщения LSA всем своим соседям.

Область действия протокола OSPF - это логическая часть общей сети. Обычно сети масштаба предприятия разделяются на части, которые соответствуют зданиям, корпусам и т.д. Маршрутизаторы внутри одной области OSPF не обмениваются информацией с маршрутизаторами в другой области. Когда добавляются каналы связи в одной области, информация об изменении в топологии распространяется только между маршрутизаторами в данной области. Это уменьшает объем служебного трафика маршрутизаторов, распространяемого в сети, и размер баз данных в каждом из маршрутизаторов.

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

Для упрощения процесса синхронизации базы данных в протоколе OSPF используется понятие «назначенного» маршрутизатора (DR) и его резервного напарника (BDR). При этом оба маршрутизатора будут единственными, с которыми новый маршрутизатор должен синхронизовать свою базу. После синхронизации базы с назначенным маршрутизатором новый маршрутизатор будет синхронизован со всеми маршрутизаторами данной сети. Остальные маршрутизаторы просто объявляют о своей связи с назначенным маршрутизатором. Резервный маршрутизатор занимает место назначенного в случаях, когда последний выходит из строя.

Достоинство выбора DR в том, что это значительно уменьшает количество маршрутной информации, передаваемой по сети. Если каждые соседние маршрутизаторы обмениваются информацией друг с другом и в сети существует N маршрутизаторов, то количество таких обменов будет достигать [N*[N-1)]/2. Это будет вызывать значительный объем трафика. При использовании DR это число уменьшается до [N-1], а если учитывать обмен информации и с BDR - то до 2*[N-1].

Все сообщения протокола OSPF начинаются с одного общего заголовка (см. рис.6.5), поля в котором имеют следующие значения:

· поле «Версия» указывает на версию протокола OSPF. Текущая версия 2;

· поле «Тип» указывает на тип используемого протокола;

· поле «Длина сообщения» - длина сообщения в байтах;

· поле «Идентификатор маршрутизатора» - это может быть IP-адрес;

· поле «Идентификатор области» используется для идентификации данной области протокола OSPF. Обычно выбирают IP-адреса в качестве идентификации областей;

· поле «Контрольная сумма» содержит контрольную сумму, вычисляемую для всего сообщения, исключая 8-байтовое общее поле «Аутентификация», используя классический алгоритм;

· поле «Идентификатор алгоритма аутентификации» указывает, какой алгоритм используется для аутентификации сообщений. Для этого поля могут быть определены только два значения: 0 -аутентификация не используется и 1 - простая аутентификация.

 
 

Аутентификация (или идентификация) прав пользователей - это процесс разграничения доступа различных пользователей (чаще всего на основе паролей) к фрагментам распределенной информации в сети, а также к набору выполняемых над ними операций.

При использовании простой аутентификации поле «Аутентификация» содержит пароль, состоящий из восьми байт. Администратор может настроить различные пароли для каждой сети. Это является хорошей гарантией защиты от случайных ошибок, например, от некорректной настройки маршрутизатора. Однако это не очень надежный метод защиты от намеренного вмешательства.

Протокол OSPF состоит из трех внутренних протоколов: Hello, Exchange и Flooding. Внутренний протокол Hello генерирует при своей работе одноименные сообщения.

Соседние маршрутизаторы обнаруживаются динамически на широковещательных и не широковещательных сетях, используя сообщения Hello. Для этого через все порты маршрутизатора посылаются сообщения, содержащие:

· приоритет маршрутизатора, который затем используется для выбора DR и BDR;

· интервал посылки сообщений Hello в секундах;

· интервал отказа маршрутизатора;

· список маршрутизаторов, от которых сообщения Hello были недавно получены;

· указания на маршрутизаторы, которые в настоящий момент являются DR и BDR.

Интервал посылки сообщения Hello и интервал отказа маршрутизатора являются наиболее важными. В сообщениях Hello маршрутизатор передает свои рабочие параметры и говорит, кого он рассматривает в качестве своих ближайших соседей. Маршрутизаторы с разными рабочими параметрами игнорируют сообщения Hello друг друга, поэтому маршрутизаторы с некорректно настроенными параметрами не будут влиять на работу сети. Маршрутизаторы посылают сообщения Hello каждому своему соседу по крайней мере один раз на протяжении интервала Hello. Если интервал отказа маршрутизатора истекает без получения сообщения Hello от соседа, то считается, что сосед неработоспособен, и рассылается новое объявление о сетевых связях для того, чтобы в сети произошел пересчет маршрутов.

Формат сообщения Hello показан на рис. 6.6. Поле «Маска подсети» устанавливается в значение маски подсети, ассоциирующейся с портом, через который посылается сообщение. Сообщения протокола Hello посылаются маршрутизатором периодически, через определенный интервал. Поля «Hello-интервал» и «Интервал отказа» - это значения параметров, устанавливаемых администратором. Поле «Приоритет» используется в процессе выбора DR и BDR. Каждый маршрутизатор настраивается с приоритетом в пределах от 0 до 255. В результате выбирается маршрутизатор, имеющий наибольший приоритет. Если маршрутизатор с наибольшим приоритетом выходит из строя или просто выключается, выбирается другой. Новый выбранный маршрутизатор будет оставаться в состоянии DR, даже если маршрутизатор с наибольшим приоритетом вновь будет функционировать. Маршрутизаторы, у которых приоритет равен нулю, никогда не будут избраны назначенными.

Начальная синхронизация баз данных нового маршрутизатора и DR выполняется с помощью протокола Exchange. Упрощенно работу данного протокола можно представить в два этапа. На первом этапе определяются роли двух маршрутизаторов: один выбирается как доминирующий, другой - как доминантный. После этого на втором этапе происходит взаимный обмен описаниями их баз данных с помощью специальных пакетов. После установления начальной синхронизации с помощью протокола Exchange ответственность за поддержку режима синхронизации баз данных состояния каналов связи всех маршрутизаторов несет протокол Flooding.

На широковещательных сетях и сетях с соединениями типа «точка-точка» сообщения протокола Hello посылаются соседям с использованием групповой адресации протокола IP. В этом случае соседние маршрутизаторы обнаруживаются динамически. В сети, у которой широковещательная передача не поддерживается, посылка сообщений Hello осуществляется на базе списка адресов всех маршрутизаторов в сети. Данный список настраивается на маршрутизаторе, который имеет потенциальную возможность стать назначенным (DR). Протокол Hello отвечает также за выбор DR, но только не в сетях типа «точка-точка». В данных сетях выбор DR не производится.

Для распространения по сети данных о состоянии каналов связи маршрутизаторы обмениваются специальным типом сообщений LSA. Они обмениваются не только своими, но и чужими объявлениями о связях, получая, в результате, информацию о состоянии всех связей в сети. Эта информация и образует граф связей сети, который является единственным для всех маршрутизаторов. Кроме информации о соседях, маршрутизатор в своем объявлении перечисляет IP- подсети, с которыми он связан непосредственно. Поэтому вычисление маршрута до каждой из подсетей производится по графу связей с использованием алгоритма Дейкстры. Маршрутизатор вычисляет путь не до подсети, а до маршрутизатора, к которому эта подсеть подключена. Каждый маршрутизатор имеет уникальный идентификатор, который передается в объявлении о состоянии связей.

Протокол OSPF использует групповую адресацию в целях обмена маршрутной информацией между маршрутизаторами в сети. Для этого зарезервированы два IP-адреса:

224.0.0.5 - все маршрутизаторы, работающие по протоколу OSPF, должны поддерживать передачу и получение дейтаграмм с данным групповым адресом;

224.0.0.6 - все маршрутизаторы DR и BDR должны поддерживать получение дейтаграмм с данным групповым адресом.

Для небольших и средних сетей базовые услуги протокола OSPF работают хорошо. Но в очень больших сетях огромное число передаваемой маршрутной информации может вызывать проблемы. Например, в смешанной сетевой топологии с сотнями маршрутизаторов изменение состояния одного канала связи (например, обрыв) вызывает распространение тысяч сообщений LSA через всю сеть от маршрутизатора к маршрутизатору. База данных состояния канала каждого маршрутизатора может быть увеличена в объеме до нескольких мегабайт.

В то же время при изменениях в сетевой топологии каждый маршрутизатор должен вновь сформировать таблицу маршрутизации. В очень больших сетях время сходимости может значительно увеличиваться, так как маршрутизаторы будут заняты обменом сообщениями по обновлению своих баз данных и вычислением новых маршрутов.

Совместно с протоколом OSPF могут использоваться другие протоколы маршрутизации, такие как EGP, BGP, RIP IP или собственные протоколы производителей.

Стек протоколов TCP/IP. Протокол OSPF и рассмотренный в лабораторной работе №5 протокол STP относятся к набору (стеку) взаимодействующих протоколов TCP/IP. Основным протоколом этого стека является протокол сетевого уровня IP (рис. 6.7). Так как стек протоколов TCP/IP был разработан до появления эталонной модели ВОС, то соответствие его уровней уровням модели ВОС достаточно условное. На практике взаимодействие уровней стека организовано гораздо сложнее, чем на рисунке.

Рассмотренный в лабораторной работе №5 протокол STP относится к уровню сетевого интерфейса (уровень IV). В стеке протоколов TCP/IP этот уровень не регламентирован. Уровень сетевого интерфейса отвечает за прием дейтаграмм и передачу их по конкретной сети. Интерфейс с сетью может быть реализован драйвером устройства или сложной системой, которая использует свой протокол канального уровня (коммутатор, маршрутизатор).


Сетевой уровень (уровень III) - это уровень межсетевого взаимодействия, управляющий взаимодействием между пользователями в сети. На этом уровне инкапсулируется пакет в дейтаграмму, заполняется ее заголовок и при необходимости используется алгоритм маршрутизации, кроме того, обрабатываются приходящие дейтаграммы и проверяется правильность поступившей информации. К этому уровню относятся все протоколы, которые создают, поддерживают и обновляют таблицы маршрутизации, в том числе и протокол OSPF.

Подробную информацию об основных протоколах стека TCP/IP можно получить из специальной литературы, в частности [2].