Чтобы запустить службу RIP при помощи демона маршрутизации (routed), наберите такую команду:

  • routed

Команда routed часто фигурирует без аргументов командной строки, но ключ -q может вам пригодиться. Ключ -q запрещает routed распространять маршруты и разрешает демону только принимать маршруты, распространяемые другими системами. Если машина не является шлюзом, имеет смысл использовать ключ -q.

В разделе, посвященном статической маршрутизации, мы не стали блокировать команду routed в файле inetinit, поскольку Solaris запускает routed только в случае, когда в системе установлено более одного сетевого интерфейса либо когда существует файл /etc/gateways. Если система Unix запускает routed в любом случае, для запуска службы RIP не требуется дополнительных действий - достаточно просто загрузить систему. Иначе необходимо убедиться, что команда routed присутствует в одном из загрузочных файлов и что выполнены все условия ее запуска. Простейший способ запустить routed в системе Solaris - создать файл gateways, пусть даже пустой.

routed читает файл I etc I gateways при запуске и добавляет информацию из файла в таблицу маршрутизации, routed может создать работоспособную таблицу маршрутизации на основе только обновлений RIP, полученных от прочих RIP-систем. Но иногда бывает полезно дополнить эту информацию, скажем, начальным маршрутом по умолчанию либо сведениями о шлюзе, который не распространяет данные о своих маршрутах. Такие дополнительные сведения хранятся в файле /etc/gateways.

Чаще всего файл /etc/gateways содержит определение активного маршрута по умолчанию, и это обстоятельство мы используем в наших примерах. Одного этого примера вполне достаточно, поскольку все записи файла /etc/gateways имеют однородный формат. Следующая запись определяет систему crab в качестве шлюза по умолчанию:

  • net 0.0.0.0 gateway 172.16.12.1 metric 1 active

Запись начинается ключевым словом net. Все записи начинаются ключевым словом net либо ключевым словом host: первое предшествует адресу сети, второе - адресу узла. Конечный адрес 0.0.0.0 - это адрес маршрута по умолчанию. Применяя команду route, для обозначения этого маршрута мы использовали ключевое слово default , но в файле /etc/gateways маршрут по умолчанию обозначается адресом сети 0.0.0.0.


Далее следует ключевое слово gateway и IP-адрес шлюза. В данном случае - адрес узла crab (172.16.12.1).

Затем следуют ключевое слово metric и численное значение метрики маршрутизации. Метрика определяет стоимость маршрута. В статической маршрутизации метрика почти не востребована, но в случае RIP метрики используются для принятия решений. Метрика RIP определяет число шлюзов, через которые должны пройти данные, чтобы попасть в пункт назначения. Но, как мы видели при изучении ifconfig, на деле метрика - это произвольное значение, используемое администратором для расстановки приоритетов маршрутов. (Системный администратор волен назначать маршруту любое значение метрики.) Однако имеет смысл варьировать метрику для нескольких маршрутов, ведущих к одному пункту назначения. У нас есть только один шлюз в сеть Интернет, так что верной метрикой для узла crab будет 1.

Все записи /etc/gateways заканчиваются ключевым словом passive либо active. Первое означает, что от указанного шлюза локальная система не ожидает RIP-обновлений. Используйте ключевое слово passive, чтобы запретить RIP удалять маршруты в случае, когда шлюз не присылает пакеты обновлений и не должен их присылать. Пассивные маршруты добавляются в таблицу маршрутизации и существуют в течение всего времени работы системы. По сути дела, они становятся постоянными статическими маршрутами.

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


Приведенная запись завершается ключевым словом active, то есть данный маршрут по умолчанию будет удален в случае отсутствия обновлений от узла crab. Умолчания маршрутов удобны, в особенности для статической маршрутизации. Однако при динамической маршрутизации их следует использовать осторожно, особенно если речь идет о нескольких шлюзах, предоставляющих маршруты одного направления. Пассивный маршрут по умолчанию не позволяет протоколу маршрутизации выполнять динамическое обновление и подстраиваться под изменения условий сетевой среды. Используйте активные маршруты по умолчанию, которые могут обновляться протоколом маршрутизации.

RIP легок в установке и настройке. Идеальный вариант? Не совсем так. RIP имеет три серьезных недостатка:

  • Ограниченный диаметр сети - Максимальная длина маршрута RIP - 15 транзитных участков. Маршрутизатор RIP не способен создать полную таблицу маршрутизации для сети, работающей с более длинными маршрутами. Число транзитных участков не может быть увеличено из-за следующего недостатка.
  • Медленная сходимость - Удаление неверного маршрута иногда требует многократного обмена пакетами обновлений, прежде чем стоимость маршрута достигнет значения 16. Это называется «счетом до бесконечности», поскольку RIP продолжает увеличивать стоимость маршрута, пока она не превысит максимально допустимого значения метрики в RIP. (В данном случае бесконечность представлена числом 16.) Кроме того, в RIP отсрочка удаления маршрута может достигать 180 секунд. Говоря на сетевом жаргоне, эти условия замедляют «сходимость маршрутизации», то есть требуется значительное время для того, чтобы таблица маршрутизации полностью отразила изменившееся состояние сети.
  • Классовая маршрутизация - RIP интерпретирует все адреса по правилам для классов, приведенным в главе 2. С точки зрения RIP все адреса принадлежат классам А, В и С, что делает протокол RIP несовместимым с современной практикой интерпретации адресов на основе битовых адресных масок.

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

RIP были добавлены возможности, позволяющие бороться с медленной сходимостью. Прежде чем перейти к изучению этих возможностей, мы должны понять, как возникает проблема «счета до бесконечности». На рис. 7.2 отражена сеть, в которой может возникнуть такая проблема.

111
Пример сети

Узел crab обращается к подсети 3 через horseshoe и далее через узел ога. Подсеть 3 удалена на два транзитных участка от узла crab и на один транзитный участок от узла horseshoe. Следовательно, horseshoe афиширует стоимость 1 для подсети 3, a crab - стоимость 2, и маршрутизация трафика через horseshoe продолжается. До тех пор пока не возникнут проблемы. Если неожиданно перестает работать узел ога, horseshoe ожидает обновлений от ога в течение 180 секунд. В процессе ожидания horseshoe продолжает посылать узлу crab обновления, и маршрут в подсеть 3 сохраняется в таблице маршрутизации crab. Когда интервал ожидания horseshoe наконец истекает, horseshoe удаляет все маршруты, пролегающие через ога, из своей таблицы маршрутизации, включая и маршрут в сеть 3. Затем horseshoe получает от узла crab обновление, уведомляющее, что crab находится в двух транзитных участках от подсети 3. horseshoe создает этот маршрут и объявляет, что находится в трех транзитных участках от подсети 3. crab получает это обновление, создает маршрут и объявляет, что находится в четырех транзитных участках от подсети 3. И так по кругу, пока стоимость маршрута в подсеть 3 не достигнет 16 в обеих таблицах маршрутизации. Если интервал обновления равен 30 секундам, процесс может затянуться надолго!

Механизмы Split horizon (Расщепленные горизонты) и Poison reverse (Отравленный обратный путь) - вот те две технологии, которые позволяют во многих случаях избежать счета до бесконечности:


  • Split horizon - Данный механизм не позволяет маршрутизатору афишировать маршруты через канал, по которому эти маршруты были получены, и решает описанную выше проблему счета до бесконечности. Следуя этому правилу, crab не станет уведомлять подсеть 12 о маршруте в подсеть 3, поскольку узнал этот маршрут из обновлений, полученных от узла horseshoe, расположенного в подсети 12. Механизм работает для приведенного выше примера, но не работает для всех случаев счета до бесконечности. Мы еще остановимся на этом вопросе чуть позже.
  • Poison reverse - Данный механизм является усовершенствованием механизма Split horizon. Идея та же: «Не афишировать маршруты через канал, по которому они получены». Однако к этому, по существу, негативному правилу добавляется позитивное действие. Маршрутизатору предписывается объявлять бесконечное расстояние для маршрутов такого канала. В результате узел crab должен сообщать, что стоимость пролегающих через него маршрутов в подсеть 3 равна 16. Стоимость 16 означает, что доступ к подсети 3 нельзя получить через шлюз crab.

Эти две технологии решают описанную выше проблему. Но что будет, если произойдет сбой в работе узла crab? Взгляните на рис. 7.2. Следуя правилу «split horizon», узлы aulds и smith не объявят маршрут в подсеть 12 шлюзу crab, поскольку сами узнали этот маршрут от узла crab. Однако они обмениваются маршрутом в подсеть 12 друг с другом. Если crab перестает работать, aulds и smith начинают свой счет до бесконечности, который заканчивается удалением маршрута в подсеть 12. Эту проблему призвана решить технология triggered updates (обновления по условию, или мгновенные обновления).


Triggered updates - большой шаг вперед, поскольку обновления посылаются немедленно, а не по истечении стандартного 30-секундного интервала. Таким образом, если происходит сбой маршрутизатора более высокого уровня или локального канала, маршрутизатор передает своим соседям обновления сразу после того, как внесет их в собственную таблицу маршрутизации. Без обновлений по условию счет до бесконечности может занять до восьми минут! Обновления по условию позволяют уведомить соседей за несколько секунд. Кроме того, данный механизм позволяет более эффективно использовать сетевые каналы. Обновления по условию не содержат полных таблиц маршрутизации - лишь сведения об изменившихся маршрутах.

Обновления по условию позволяют предпринимать четкие действия по уничтожению непроходимых маршрутов. Маршрутизатор объявляет маршруты, удаленные из таблицы маршрутизации, с бесконечной стоимостью, что вынуждает прочие маршрутизаторы также удалить эти маршруты. Взгляните еще раз на рисунке. При сбое шлюза crab узлы smith и aulds выжидают 180 секунд, прежде чем удалить маршруты в подсети 1, 3 и 12 из своих таблиц маршрутизации. Затем они обмениваются обновлениями по условию, содержащими метрику 16 для подсетей 1, 3 и 12. Таким образом они сообщают друг другу, что не способны общаться с этими сетями, а необходимость в счете до бесконечности исчезает. Технологии split horizons, poison reverse и triggered updates играют важную роль в уничтожении счета до бесконечности.

Последний недостаток - несовместимость RIP с сетями CIDR и подсетями переменной длины - привел к тому, что в 1996 году протокол RIP получил статус «исторического». RIP несовместим с существующим стеком протоколов TCP/IP, равно как с планами по его развитию. Для решения этой последней проблемы была разработана новая версия RIP.