Протокол предпочтения кратчайшего пути OSP F (Open Shortest Path First), определенный документом RFC 2328, является протоколом состояния канала и в корне отличается от протокола RIP. Маршрутизатор, использующий RIP, делится информацией обо всей сети со своими соседями.
Напротив, маршрутизатор, использующий OSPF, делится информацией о своих соседях со всей сетью. «Вся сеть» означает максимум одну автономную систему. RIP не пытается получить полные сведения о сети Интернет, a OSPF не пытается распространить информацию по всей сети Интернет. Задача этих протоколов в другом. Протоколы внутренней маршрутизации призваны решать вопросы маршрутизации в рамках отдельных автономных систем. OSPF подходит к задаче более скрупулезно, определяя иерархию областей маршрутизации автономной системы:
- Области (Areas) Область - это произвольный набор взаимосвязанных сетей, узлов и маршрутизаторов. Обмен информацией маршрутизации между областями одной автономной системы происходит посредством пограничных маршрутизаторов областей.
- Магистраль (Backbone) - Магистраль - это особая область, объединяющая все прочие области автономной системы. Каждая область должна быть связана с магистралью, поскольку магистраль отвечает за распространение информации маршрутизации между областями.
- Оконечная область (Stub area) - Оконечная область имеет лишь один пограничный маршрутизатор, то есть из области существует единственный маршрут. В данном случае пограничный маршрутизатор области может не сообщать о внешних маршрутах прочим маршрутизаторам оконечной области. Достаточно заявить о себе как о точке, через которую пролегает маршрут по умолчанию.
Деление на области необходимо лишь для крупных автономных систем. Сеть, показанная на рис. 7.2, невелика, нет смысла делить ее на области. Тем не менее она может послужить иллюстрацией различных областей. Мы можем разделить данную автономную систему на любые области - как нам заблагорассудится. Предположим, мы разделили ее на три области: область I содержит подсеть 3; область 2 содержит подсети 1 и 12; область 3 содержит подсети 25 и 36, а также каналы РРР. Далее, мы можем определить область 1 в качестве оконечной, поскольку она имеет лишь один пограничный маршрутизатор - ога. Кроме того, мы можем определить область 2 в качестве магистральной, поскольку она объединяет две оставшиеся области и передает всю информацию маршрутизации между областями 1 и 3. Область 2 содержит два пограничных маршрутизатора, crab и ога, плюс один внутренний маршрутизатор - horseshoe. Область 3 содержит три маршрутизатора: crab, smith и aulds.
Очевидно, OSPF обеспечивает высокую гибкость в плане разграничения автономной системы. Для чего же нужна такая гибкость? Одной из проблем протоколов, анализирующих состояние каналов, является большой объем данных, накапливаемых в базе данных состояний каналов, и объем времени, необходимый для вычисления маршрутов на основе этих данных. Сейчас станет ясно, почему возникает такая проблема.
Каждый OSPF-маршрутизатор выполняет построение ориентированного графа всей сети при помощи алгоритма Дейкстры, служащего для обнаружения кратчайшего пути (Shortest Path First, SPF). Ориентированный граф - это карта сети с точки зрения маршрутизатора. То есть корнем графа является маршрутизатор. Построение графа выполняется на основе данных из базы данных состояния каналов, содержащей информацию о каждом маршрутизаторе сети и обо всех соседях каждого маршрутизатора. Эта база данных для автономной системы, представленной на рис. 7.2, содержит пять маршрутизаторов и десять соседей: у ога один сосед, horseshoe; у horseshoe дв а соседа , ога и crab; у crab тр и соседа - horseshoe, aulds и smith-, у aulds - два соседа, crab и smith; у smith - два соседа, aulds и crab. Граф этой автономной системы в представлении маршрутизатора ога отражен на рис. 7.3.
Алгоритм Дейкстры создает карту следующим образом:
- Локальная система устанавливается в качестве корня карты и получает нулевую стоимость.
- В карту добавляются соседи только что установленной системы. Стоимость сообщения с соседями представлена суммой стоимости сообщения с только что установленной системой и стоимостью, которую эта система афиширует для каждого из соседей. Например, предположим, что crab афиширует стоимость 20 для aulds, а стоимость сообщения с crab - 15. Тогда стоимость aulds на карте ога - 35.
- Выполняется обход карты с выбором самых дешевых маршрутов для всех направлений. Например, когда в карту добавляется aulds, среди его соседей находится smith. Путь к узлу smith через aulds временно добавляется в карту. На третьем шаге алгоритма стоимость сообщения с узлом smith через crab сравнивается со стоимостью сообщения с узлом smith через aulds. Выбор делается в пользу более дешевого пути. На рис. 7.3 отброшенные маршруты представлены пунктирными линиями. Шаги 2 и 3 алгоритма повторяются для каждой системы из базы данных.
Информация базы данных состояния каналов накапливается и распространяется по простым и эффективным правилам. OSPF-маршрутизатор выполняет обнаружение своих соседей при помощи пакетов Hello. Он отправляет пакеты Hello и ожидает получения пакетов Hello от соседствующих маршрутизаторов. Пакет Hello идентифицирует локальный маршрутизатор и перечисляет соседние маршрутизаторы, от которых были получены пакеты. Получив пакет Hello с информацией о себе в качестве соседствующего, маршрутизатор понимает, что обнаружил соседа. И это вполне логично - ведь он может получать пакеты от этого соседа, а сосед считает его своим соседом - и, значит, может получать ответные пакеты. Обнаруженные соседи добавляются в соответствующий локальный список системы.
Затем OSPF-маршрутизатор передает сведения обо всех своих соседях, а именно выполняет веерную рассылку (flooding) по сети пакетов LSA (Link-State Advertisement). Пакет LSA содержит адрес каждого соседа и стоимость сообщения с этим соседом для локальной системы. Веерная рассылка означает, что маршрутизатор передает пакет LSA с каждого интерфейса и что каждый маршрутизатор, получивший пакет, передает его с каждого интерфейса - за исключением того, через который пакет был изначально получен. Чтобы предотвратить распространение дубликатов пакетов LSA, маршрутизаторы хранят экземпляры полученных пакетов и удаляют дубликаты.
Обратимся к рис. 7.2 за очередным примером. Когда протокол OSPF запускается на horseshoe, то посылает пакет Hello в подсеть 1 и еще один - в подсеть 12. ога и crab получают приветствие и отвечают пакетами Hello, в которых horseshoe указан соседствующим маршрутизатором, horseshoe, получив эти пакеты Hello, добавляет ога и crab в список своих соседей. Затем horseshoe создает пакет LSA, в котором каждому из соседей (ога и crab) поставлена в соответствие стоимость. Например, horseshoe может присвоить ога стоимость 5, a crab - стоимость 10. horseshoe рассылает пакеты LSA в подсетях 1 и 12.
ога получает LSA и рассылает его в подсети 3. crab получает LSA и рассылает его через оба своих канала РРР. aulds рассылает LSA по каналу к smith, a smith - по тому же каналу aulds. aulds и smith, получив вторую ко- пию LSA, удаляют ее, поскольку она дублирует уже полученную от узла crab. Таким образом, каждый маршрутизатор всей сети получает LSA-паке- ты всех других маршрутизаторов.
OSPF-маршрутизаторы отслеживают состояние своих соседей, принимая пакеты Hello. Пакеты Hello генерируются всеми маршрутизаторами периодически. Если маршрутизатор перестал генерировать пакеты, он, или связанный с ним канал, переходит в разряд неработоспособных. Соседи этого маршрутизатора обновляют свои записи LSA и посылают их в сеть. Новые LSA включаются в базу данных состояний каналов на каждом маршрутизаторе сети, и каждый маршрутизатор заново выполняет построение карты сети, исходя из новых сведений. Очевидно, ограничение размера сети и, как следствие, количества маршрутизаторов снижает нагрузки, связанные с построением карт. Для одних сетей вся автономная система оказывается достаточно невелика. Другим требуется разделение автономной системы на области.
Еще одной чертой OSPF, благоприятно влияющей на производительность, является возможность определить назначенный маршрутизатор. Назначенный маршрутизатор - это один из маршрутизаторов сети, который считает соседями все остальные маршрутизаторы, тогда как все остальные маршрутизаторы сети считают соседом только его. Назначенный маршрутизатор позволяет сократить размер базы данных состояний каналов и повышает скорость работы алгоритма вычисления кратчайшего пути. Рассмотрим для примера широковещательную сеть с пятью маршрутизаторами. Пять маршрутизаторов - по четыре соседа на каждого - являются источником базы данных с двадцатью записями. Но если один из маршрутизаторов является назначенным, тогда у него четыре соседа, а у каждого из его соседей - всего по одному.
В общей сложности получается десять записей базы данных. И хотя в столь маленькой сети назначенный маршрутизатор не нужен, чем крупнее сеть, тем выше экономия. Например, широковещательная сеть с 25 маршрутизаторами, один из которых является назначенным, имеет базу данных состояний каналов из пятидесяти записей, тогда как в отсутствие обозначенного маршрутизатора размер базы данных - шестьсот записей.
OSPF дает маршрутизатору полную картину маршрута из конца в конец - сравните с ограниченным видом следующего транзитного участка в RIP. Рассылка LSA позволяет быстро распространить информацию по сети. Ограничение размера базы данных при помощи разделения на области и отметки маршрутизаторов ускоряет вычисление кратчайших путей. В целом, OSPF оказывается весьма эффективным протоколом маршрутизации.
OSPF предоставляет также функции, которых нет в RIP. Простая аутентификация по паролю, состоящему из восьми символов и передаваемому открытым текстом, позволяет убедиться, что обновление исходит от доверенного маршрутизатора. Кроме того, реализован более надежный механизм аутентификации на основе контрольных сумм MD5 (Message Digest 5).
OSP F поддерживае т многолучевую маршрутизацию для лучей равной стоимости (equal-cost multi-path routing). Эт а неудобоварима я фраз а означает, что маршрутизаторы OSPF способны работать более чем с одним маршрутом определенного направления. При соблюдении определенных условий такая возможность может использоваться для распределения нагрузки по ряду сетевых каналов. Однако многие системы не смогут воспользоваться этим вариантом из-за своих собственных недостатков. Чтобы определить, поддерживает ли ваш маршрутизатор распределение нагрузки посредством равноценных маршрутов OSPF, обратитесь к соответствующей документации.
С учетом описанных возможностей, OSPF является предпочтительным протоколом внутренней маршрутизации TCP/IP для выделенных маршрутизаторов.