5.6.6. Протокол внутреннего шлюза OSPF
Итак, мы завершили изучение процесса передачи пакетов в Интернете. Пришло время перейти к новой теме — маршрутизации в Интернете. Как уже упоминалось, Интернет состоит из большого количества независимых сетей или автономных систем (АС), которыми управляют различные организации — компании, университеты, провайдеры. Каждая автономная система может использовать собственный внутренний, или внутридоменный, алгоритм маршрутизации (intradomain routing). Тем не менее более-менее распространенных стандартных протоколов совсем немного. В данном разделе будет рассмотрена внутридоменная маршрутизация и популярный протокол OSPF. Алгоритм маршрутизации внутри автономной системы называется протоколом внутреннего шлюза (interior gateway protocol). В следующем разделе мы обсудим вопрос маршрутизации между независимыми сетями, или междоменной маршрутизации (interdomain routing). В данном случае все сети должны использовать один и тот же алгоритм маршрутизации или протокол внешнего шлюза (exterior gateway protocol). В Интернете используется протокол BGP (Border Gateway Protocol — пограничный межсетевой протокол).
Изначально в качестве протокола внутридоменной маршрутизации использовалась схема маршрутизации по вектору расстояний, основанная на распределенном алгоритме Беллмана—Форда (Bellman—Ford) и унаследованная из ARPANET. В первую очередь это RIP (Routing Information Protocol — протокол маршрутной информации), использующийся до сих пор. Он хорошо работал в небольших системах, но по мере увеличения автономных систем стали проявляться его недостатки, такие как проблема счета до бесконечности и медленная сходимость, поэтому в мае 1979 года он был заменен протоколом состояния каналов. В 1988 году проблемная группа проектирования Интернета (IETF, Internet Engineering Task Force) начала работу над протоколом, учитывающим состояние линий, для внутридоменной маршрутизации. Этот протокол под названием OSPF (Open Shortest Path First — открытый алгоритм предпочтительного выбора кратчайшего маршрута) был признан стандартом в 1990 году. Идея была заимствована из протокола IS-IS (Intermediate System to Intermediate System — связь между промежуточными системами), ставшего стандартом ISO. Эти два протокола скорее похожи, чем различны. Более подробное описание см. в RFC 2328. Они являются основными протоколами внутридоменной маршрутизации и в настоящее время поддерживаются многочисленными производителями маршрутизаторов. OSPF чаще используется в корпоративных сетях, IS-IS — в сетях интернет-провайдеров. Ниже будет дано краткое описание работы протокола OSPF.
Учитывая большой опыт работы с различными алгоритмами, группа разработчиков согласовывала свои действия с длинным списком требований, которые необходимо было удовлетворить. Во-первых, этот алгоритм должен публиковаться в открытой литературе, откуда буква «О» (Open — открытый) в OSPF. Из этого следовало, что патентованный алгоритм, принадлежащий одной компании, не годится. Во-вторых, новый протокол должен был уметь учитывать широкий спектр различных параметров, включая физическое расстояние, задержку и т. д. В-третьих, этот алгоритм должен был быть динамическим, а также автоматически и быстро адаптирующимся к изменениям топологии.
В-четвертых (это требование впервые было предъявлено именно к OSPF), он должен был поддерживать выбор маршрутов, основываясь на типе сервиса. Новый протокол должен был уметь по-разному выбирать маршрут для трафика реального времени и для других видов трафика. В то время IP-пакет содержал поле Тип сервиса, но ни один из имевшихся протоколов маршрутизации не использовал его. Это поле было и в OSPF, но и здесь никто его не использовал. Поэтому в результате его убрали. Возможно, это требование опередило свое время, так как было выдвинуто до появления дифференцированного обслуживания, вернувшего к жизни классы обслуживания.
В-пятых, новый протокол должен был уметь распределять нагрузку на линии. Это связано с предыдущим пунктом. Большинство протоколов посылало все пакеты по одному лучшему маршруту, даже если таких маршрутов два. Следующий по оптимальности маршрут не использовался совсем. Между тем, во многих случаях распределение нагрузки по нескольким линиям дает лучшую производительность.
В-шестых, необходима поддержка иерархических систем. К 1988 году Интернет вырос настолько, что ни один маршрутизатор не мог вместить сведения о его полной топологии. Таким образом, требовалась разработка нового протокола.
В-седьмых, требовался необходимый минимум безопасности, защищающий маршрутизаторы от обманывающих их студентов-шутников, присылающих неверную информацию о маршруте. Наконец, требовалась поддержка для маршрутизаторов, соединенных с Интернетом по туннелю. Предыдущие протоколы справлялись с этим неудовлетворительно.
Протокол OSPF поддерживает двухточечные линии (например, SONET) и широковещательные сети (большинство ЛВС). Он также поддерживает сети с множественными маршрутизаторами, каждый из которых может напрямую соединяться с любым другим (сети множественного доступа — multi-access networks), даже если в них невозможно широковещание. Предыдущие протоколы не так хорошо справлялись с этой проблемой.
На рис. 5.55, а показан пример автономной системы. Здесь не указаны хосты, так как обычно они не играют большой роли в OSPF; маршрутизаторы и сети (которые могут содержать хосты) гораздо более важны. Большинство маршрутизаторов соединено с другими маршрутизаторами двухточечными линиями, а также с сетями, к хостам которых им необходим доступ. Но R3, R4 и R5 соединены широковещательной ЛВС, например коммутируемой сетью Ethernet.
Рис. 5.55. Сеть множественного доступа: а — автономная система; б — представление (а)
в виде графа
В основе работы протокола OSPF лежит обобщенное представление о множестве сетей, маршрутизаторов и связей в виде направленного графа, в котором каждой дуге поставлена в соответствие ее цена (может выражаться в таких физических параметрах, как расстояние, задержка и т. д.). Двухточечное соединение между двумя маршрутизаторами представляется в виде пары дуг, по одной в каждом направлении. Их весовые коэффициенты могут быть различными. Широковещательная сеть представляется в виде узла для самой сети, а также в виде узла для каждого маршрутизатора. Дуги, идущие от сетевого узла к узлам маршрутизаторов, обладают нулевым весом. Но они все равно важны, так как без них не будет существовать путь через сеть. Другие сети, состоящие исключительно из хостов, имеют только дуги, направленные к ним, и не имеют обратных дуг. То есть маршруты к хостам возможны, а через них — нет.
На рис. 5.55, б сеть, изображенная на рис. 5.55, а, представлена в виде графа. По сути, как раз это и делает OSPF. Когда представление в виде графа получено, маршрутизаторы могут вычислить кратчайшие пути до всех остальных узлов с помощью метода, учитывающего состояние линий. Возможно, что некоторые пути будут одинаково короткими. Тогда OSPF запоминает оба пути и использует эту информацию для разделения трафика. Это помогает распределить нагрузку более равномерно и называется ECMP (Equal Cost MultiPath — использование множества равноценных маршрутов).
Многие автономные системы в Интернете сами по себе довольно велики и управлять ими непросто. Поэтому протокол OSPF позволяет делить их на пронумерованные области, то есть на сети или множества смежных сетей. Области не должны перекрываться, но не обязаны быть исчерпывающими, то есть некоторые маршрутизаторы могут не принадлежать ни одной области. Если маршрутизатор полностью принадлежит какой-то области, он называется внутренним маршрутизатором (internal router). Область является обобщением отдельной сети. За пределами области видны ее адреса, но не ее топология. Это упрощает масштабирование процесса маршрутизации.