### Протокол маршрутной информации (RIP)

Протокол маршрутной информации (RIP – Routing Information Protocol) — внутренний протокол маршрутизации, используется внутри автономной системы. Это очень простой протокол, основанный на применении дистанционного вектора маршрутизации. В этом разделе сначала рассмотрим принцип дистанционного вектора маршрутизации, так как он применяется в RIP, а затем обсудим сам протокол RIP.

#### Вектор расстояния маршрутизации

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

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

2. Распределение только соседям. Каждый маршрутизатор посылает свою информацию только к соседям. Он посылает информацию, которую получает через все интерфейсы.

3. Распределение через регулярные интервалы. Каждый маршрутизатор посылает свою информацию соседней автономной системе через фиксированные интервалы, например, каждые 30 с.

### Таблицы маршрутизации

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

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

Таблица может содержать другую информацию, такую как маску подсети (или префикс) или время, когда этот вход был обновлен. Табл ице показан пример таблицы маршрутизации.

Таблица вектора расстояния маршрутизации
Номер входа в таблицу участков | Пункт назначения | Счет участков | Следующий участок | Другая информация
0 | 163.5.0.0 | 7 | 172.6.23.4 |
1 | 197.5.13.0 | 5 | 176.3.6.17 |
2 | 189.45.0.0 | 4 | 200.5.1.6 |
3 | 115.0.0.0 | 6 | 131.4.7.19 |

#### Алгоритм обновления таблиц в RIP

Таблица маршрутизации обновляется после получения "квитанции" ответного сообщения RIP. На рис. 1 показан алгоритм модификации, использованный RIP.

Рис. 1 Алгоритм обновления таблицы маршрутизации

На рис. 2 показан пример обновления таблицы. Маршрутизатор получает RIP-сообщение от соседнего маршрутизатора.

Сообщение перечисляет сети пунктов назначения и их соответствующие счетчики участков. Первый шаг соответствует алгоритму обновления по рис. 1. Он увеличивает счетчики участков сообщения на единицу. Следующий шаг алгоритма RIP обновления: таблица, полученная в сообщении, и старая таблица маршрутов сравниваются. Результат — это таблица маршрутизации с обновленными счетчиками участков для каждого пункта назначения. Для "Сети 1" нет новой информации в сообщении, поэтому вход "Сети 1" остается без изменений.

Рис. 2 Пример обновления таблицы

Для "Сети 2" информация в таблице и сообщения определены как счетчик участков от маршрутизатора C. Хотя значения счета участков (см. рис. 2) в таблице (2) меньше, чем единица сообщения (5), алгоритм выбирает значение, полученное в сообщении, потому что исходное значение пришло от того же самого маршрутизатора C.

"Сеть 3" в таблице отсутствует, в таблицу устанавливается значение сообщения. Таблица дополняется новой сетью. Для "Сети 6" RIP-сообщение содержит меньшее значение счетчика участков, поэтому значение маршрутизатора F, содержащееся в таблице, заменяется на C (значение маршрутизатора, предоставившего более короткий путь), а в таблицу записывается значение счетчика участков, содержащееся в сообщении.

"Сеть 8" сохраняет первоначальное значение, поскольку соответствующий счетчик участков в сообщении равен значению аналогичного счетчика в таблице. "Сеть 9" в сообщении имеет большее значение, но оно не касается узла, от которого пришло сообщение, поэтому в новой таблице сохраняется старое значение.

#### Инициализация таблицы маршрутизации

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

#### Обновление таблицы маршрутизации

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

### Формат сообщения RIP

Формат сообщения RIP показан на рис. 3.

Рис. 3 Формат RIP сообщения

- Команда. Это поле 8 бит задает тип сообщения: запрос (1) или ответ (2).
- Версия. Это поле 8 бит определяет версию. В этой книге мы используем версию 1, но в конце этого раздела мы назовем некоторые особенности версии 2.
- Семейство. Это поле 16 бит определяет семейство используемых протоколов. Для TCP/IP значение равно 2.
- Адрес сети. Поле адрес определяет адрес пункта назначения. RIP отводит 14 байт для этого поля в приложении к любым протоколам. Однако IP в настоящее время использует только 4 байта. Остаток адреса заполняется нулями.
- Расстояние. Это поле 32 бита определяет счет участков для каждого объявленного маршрутизатора к сети назначения.

Заметим, что часть сообщения повторяется для каждой сети назначения. Эта часть относится к понятию вход.

#### Запрос и ответ

RIP имеет два типа сообщения: запрос и ответ.

##### Запрос

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

##### Ответ

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

#### Таймеры в RIP

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

##### Периодический таймер

Периодический таймер контролирует объявленные регулярные и сообщения обновления. Хотя протокол задает, что этот таймер может быть установлен на 30 с., работающая модель использует случайное число между 25 и 35 с. Это сделано, чтобы предотвратить любую возможную синхронизацию и, в связи с этим, перегрузку Интернета, если маршрутизаторы станут обновляться одновременно.

Каждый маршрутизатор должен иметь один периодический таймер, который устанавливается случайно между 25 и 35. Он отсчитывает время назад; когда достигается нуль, посылается сообщение обновления и таймер снова устанавливается на случайную величину.

Если RIP использует методы дополнительного таймирования для рассылки обновлений, периодический таймер не подходит. Сообщения периодического обновления выходят по их собственному расписанию, не учитывая другие сообщения обновления от других систем таймирования.

##### Таймер истечения срока

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

##### Таймер сбора мусора

Когда поступила некорректная информация о маршруте, маршрутизатор не сразу стирает маршрут из своей таблицы. Вместо этого он продолжает объявлять маршрут со значением счетчика 16. На это время таймер называется таймером сбора мусора и устанавливается на 120 с. для этого маршрута. Когда счет достигает нуля, маршрут стирается из таблицы. Это время позволяет соседям получить сведения о недействительности маршрута, прежде чем он будет изъят.

#### Медленная сходимость

Одна из проблем RIP — медленная сходимость, то есть изменения, произошедшие на одном из участков Интернета, распространяются очень медленно через остальной Интернет. Допустим, имеется изменение на "Сети 1", управляемой маршрутизатором R1. Он обновляется немедленно. Однако поскольку каждый маршрутизатор посылает свои периодические обновления каждые 30 с., то пройдет в среднем 15 с. (в пределах от 0 до 30), прежде чем изменения достигнут следующего узла (обозначим его R2). Если распространить эти рассуждения на другие участки (среднее время 15 с.), то пройдет 30 с. до того момента, когда третий маршрутизатор (R3) получит изменения, и так далее. Когда информация, в конечном счете, достигает маршрутизатора Rn, проходит 15 * (n – 1) с. Если n = 20, тогда это 285 с. За это время сеть ATM может передать более чем один миллиард бит. Если эти изменения не затронут этих передач, то будут потеряны миллиарды бит.

Один метод сокращения этого недостатка — лимитировать счетчик участков до 15. Это предотвращает пакеты данных от вечного блуждания – "зацикливания" Интернета. Автономная система, используемая RIP, ограничена числом переприемных участков 15. Поэтому число 16 означает недостижимую сеть.

#### Нестабильность

Гораздо более важная проблема RIP — нестабильность, которая означает, что сеть Интернет, работающая по протоколу RIP, может стать нестабильной.

Это случается, когда пакет от одного маршрутизатора к другому может идти по петле. Ограничение участков в 15 будет увеличивать стабильность, но не снимет все проблемы.

Для того чтобы понять проблему, предположим, что соединение к Сети 1 на рис. 4 не работает. Маршрутизатор A показывает стоимость 1 для этой сети в его таблице маршрутизации. Когда доступ определяет, что Сеть 1 повреждена, маршрутизатор A немедленно изменяет колонку стоимости Сети 1 на 16 (бесконечность). Однако он должен ждать 30 с., прежде чем послать свое обновление с этой новой информацией. Тем временем может случиться, что маршрутизатор B посылает сообщение собственного обновления к A. Маршрутизатор A теперь имеет два входа для Сети 1: от своей таблицы (стоимость равна 16) и от маршрутизатора B (стоимость равна 2). Согласно алгоритму обновления A заменяет доступ к сети Сеть 1 через более короткий путь B. Маршрутизатор A затем изменяет колонку стоимости (счетчик участков) для Сети 1 на 3 (2+1), и это обновление идет к B. Маршрутизатор B знает, что Сеть 1 доступна через маршрутизатор A, согласно алгоритму обновления изменяет свою стоимость до 4 (3+1). Это обновление "туда и обратно" продолжается, пока оба маршрутизатора достигнут стоимости 16. На этой точке маршрутизаторы останавливаются, и соединение к Сети 1 становится недостижимым.

### Рис. 4. Пример нестабильной работы сети

#### Некоторые средства увеличения стабильности

Чтобы увеличить стабильность, предлагаются некоторые средства. Однако ни одно из них не является эффективным на 100 процентов.

##### Запускаемое обновление

Если отсутствуют изменения в сети, обновление посылается обычно через 30-секундные интервалы. Однако если имеется изменение, маршрутизатор запускается в действие для немедленной рассылки новых таблиц; этот процесс называется запускаемое обновление.

Запускаемое обновление может увеличить стабильность. Каждый маршрутизатор, который получает обновление с изменениями, рассылает новые таблицы с меньшим интервалом времени, чем в среднем за 15 с. Например, на рис. 4, когда маршрутизатор A распознает, что Сеть 1 недоступна, он изменяет стоимость до 16 в таблице маршрутизации и затем немедленно посылает эти сведения к B. Маршрутизатор B затем изменяет свою таблицу, и теперь обе таблицы показывают стоимость 16 для Сети 1. Рассылаемые сообщения обновления с изменениями приращения в стоимости позволяют избежать любых проблем зацикливания.

Хотя запускаемое обновление может значительно улучшить маршрутизацию, оно не может решить все проблемы маршрутизации. Например, ошибка маршрутизатора не может быть обнаружена этим методом.

##### Расщепление горизонта

Второй метод для улучшения стабильности — "расщепленный горизонт" (spilt horizon). При этом методе данные о достижимых узлах сети передаются регулярно всем маршрутизаторам, кроме того, от которого эта информация исходит. Если маршрутизатор передал информацию, чтобы помочь обновлению, эта информация не должна быть послана назад; он уже все знает. "Расщепленный горизонт" может улучшить стабильность. Предположим, что на рис. 4 Сеть 1 недоступна маршрутизатору А. Маршрутизатор B принимает свою информацию о Сети 1 из А и не посылает информацию о Сети 1 к маршрутизатору А. Маршрутизатор поэтому имеет один сигнал для Сети 1 стоимостью 1 и не обманывается, думая, что имеет обходной доступ к Сети 1 через маршрутизатор B. Маршрутизатор А посылает свою таблицу маршрутизации к B, и оба будут иметь в таблице значение 16.

##### Поглощение ответа

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

При использовании поглощения возврата стабильность улучшается. Рассмотрим снова рис. 4 Маршрутизатор B получает информацию о Сети 1 от А. В каждом обновлении B посылает свою таблицу маршрутизации к А со значением 16 для Сети 1. Это неэффективно на А, если Сеть 1 недоступна, потому что он не будет проверять входы B для Сети 1 и устанавливать значение 16. Однако если Сеть 1 не испорчена, он будет устанавливать меньшее значение.

### RIP версии 2

RIP версии 2 был разработан для преодоления некоторых недостатков версии 1. Разработчики версии 2 не дополнили длину сообщения для каждого входа. Они только заменили те поля в версии 1, которые были заполнены нулями для TCP/IP-протокола, некоторыми новыми полями.

#### Формат сообщения

Pис. 5 показывает формат сообщения RIP версии 2. Новые поля этого сообщения приводятся ниже.

Рис. 5 Формат RIP версии 2

- Тэг маршрута. Это поле переносит такую информацию, как номер автономной системы. Он может использоваться для обеспечения возможности RIP получать информацию от внешнего протокола маршрутизации.
- Маска подсети. Это поле в 4 байта, которое несет маску к подсети (или префикс). Это означает, что RIP2 поддерживает классическую адресацию и бесклассовую междометную маршрутизацию CIDR (Classless Inter Domain Routing).
- Адрес следующего участка. Он используется, например, если две автономных системы вместе используют сеть (основную). По этому сообщению можно определить маршрутизатор той же самой системы или другой автономной системы, к которому должен пройти пакет.

#### Аутентификация

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

Рис. 6 Аутентификация

#### Множественный доступ (Multicasting)

Версия 1 RIP использует широковещательный доступ, чтобы посылать сообщения RIP к каждому соседу. При этом методе все маршрутизаторы в сети получают пакеты, так же как и хосты. В RIP версии 2 используют множественный доступ с адресом 224.0.9 для сообщений только RIP-маршрутизаторов в сети.

#### Инкапсуляция

RIP-сообщения инкапсулируется в UDP пользовательские дейтаграммы. RIP-сообщение не включает поле, которое указывает на длину сообщения. Это может быть определено из UDP пакета. Закрепленным (well-known) портом назначается для RIP в UDP порт 520.