Протокол RIP
Протокол RIP (Routing Information Protocol — протокол маршрутной информации) был одним из первых протоколов внутренней маршрутизации, применявшихся в Интернете; он и в наши дни по-прежнему популярен. Своим происхождением и названием он обязан архитектуре XNS (Xerox Network Systems). Широкое распространение протокола RIP было во многом вызвано тем, что он был включен в версию 1982 года операционной системы Berkeley UNIX, поддерживающей стек протоколов TCP/IP. Протокол RIP версии 1 определен в RFC 1058, обратно совместимая версия 2 этого протокола определена в RFC 2453.
Протокол RIP работает по дистанционно-векторному алгоритму и очень напоминает идеализированный протокол, рассматривавшийся нами в подразделе «Алгоритм дистанционно-векторной маршрутизации» раздела «Основы маршрутизации». Версия протокола RIP, специфицированная в RFC 1058, в качестве единиц измерения стоимости маршрутов использует количество ретрансляционных участков, то есть стоимость каждой линии считается равной 1. Максимальная стоимость пути ограничена значением 15, таким образом, диаметр автономной системы, поддерживаемой протоколом RIP, не может превышать 15 ретрансляционных участков. Вспомним также, что в дистанционно-векторных протоколах соседние маршрутизаторы обмениваются друг с другом информацией о маршрутах. В протоколе RIP обмен новыми сведениями между соседними маршрутизаторами происходит приблизительно через каждые 30 с, для чего используются так называемые ответные RIP-сообщения (RIP response messages). Ответное RIP-сообщение, посылаемое маршрутизатором или хостом, содержит список, в котором указаны до 25 сетей-адресатов в пределах автономной системы, а также расстояния до каждой из этих сетей от отправителя. Ответные RIP-сообщения также иногда называют RIP-объявлениями.
Рассмотрим работу RIP-объявлений на простом примере. На рис. 4.28 показан фрагмент автономной системы. Линии, соединяющие маршрутизаторы, обозначают сети. Для удобства мы будем рассматривать только несколько выделенных маршрутизаторов (А, В, С и D) и сетей (w, х, у и z). Пунктирные линии означают, что автономная система не ограничивается помеченными маршрутизаторами и сетями, а распространяется дальше.
Предположим теперь, что таблица продвижения данных маршрутизатора D выглядит так, как показано в табл. 4.5. Обратите внимание, что в этой таблице три столбца. В первом столбце указана сеть-адресат, во втором — идентификатор следующего маршрутизатора на кратчайшем пути к сети-адресату, в третьем — количество ретрансляционных участков (хопов) до сети-адресата на кратчайшем пути, то есть количество сетей, отделяющих отправителя от получателя, включая сеть-адресат.
Видно, что для отправки дейтаграммы от маршрутизатора D в сеть w дейтаграмму сначала нужно переправить соседнему маршрутизатору А. Кроме того, сеть-адресат w находится на расстоянии двух ретрансляционных участков по самому кратчайшему пути. Аналогично, до сети z семь ретрансляционных участков через маршрутизатор В. В принципе, в таблице продвижения данных содержится по одной строке для каждой сети в автономной системе, хотя версия 2 протокола RIP допускает агрегацию маршрутов к сетям при помощи метода, схожего с теми, которые мы рассматривали в подразделе «Адресация в протоколе IPv4» раздела «Интернет-протокол». В таблице продвижения данных также содержится, по меньшей мере, по одной строке для пути к каждой сети за пределами автономной системы. Таким образом, табл. 4.5 и последующие таблицы продвижения данных, представленные в этом подразделе, являются полными только отчасти.
Теперь предположим, что 30 с спустя маршрутизатор D получает от маршрутизатора А объявление, показанное в табл. 4.6. Обратите внимание, что это объявление представляет собой не что иное, как информацию из таблицы продвижения данных маршрутизатора А! Эта информация указывает, в частности, что сеть z находится на расстоянии всего четырех ретрансляционных участков от маршрутизатора А. Получив это объявление, маршрутизатор D узнает, что теперь появился путь от маршрутизатора А до сети z, который короче, чем путь через маршрутизатор В.
Таким образом, маршрутизатор D обновляет свою таблицу продвижения данных, чтобы учесть более короткий кратчайший путь, как показано в табл. 4.7. Как же так, возможно, спросите вы, кратчайший путь к сети z стал еще короче? Возможно, децентрализованный дистанционно-векторный алгоритм все еще находился в процессе схождения (см. раздел «Основы маршрутизации») или в него были добавлены новые линии и/или маршрутизаторы, в результате чего в сети появились новые кратчайшие маршруты.
Рассмотрим теперь некоторые аспекты реализации протокола RIP. Вспомним, что использующие этот протокол маршрутизаторы обмениваются объявлениями приблизительно раз в 30 с. Если маршрутизатор не получает пакетов от своего соседа в течение 180 с, он решает, что данный сосед более недоступен. Это может означать, что сосед вышел из строя или выключен либо вышла из строя связывавшая их линия связи. Когда такое происходит, протокол RIP изменяет локальную таблицу продвижения данных, а затем распространяет эту информацию, рассылая объявления соседним маршрутизаторам (тем, которые все еще доступны). Маршрутизатор может также запросить у соседа информацию о стоимости маршрута от него до заданного адресата при помощи RIP-запроса. Маршрутизаторы пересылают друг другу RIP-запросы и RIP-ответы в UDP-пакетах через порт номер 520. UDP-пакет переносится между маршрутизаторами в стандартном IP-пакете. Тот факт, что протокол RIP пользуется протоколом транспортного уровня (UDP) поверх протокола сетевого уровня (IP), может показаться излишне сложным (так оно и есть!). Чтобы прояснить данный вопрос, необходимо несколько углубиться в реализацию протокола RIP.
На рис. 4.29 изображена схема типичной реализации протокола RIP в операционной системе UNIX, например на рабочей станции, играющей роль маршрутизатора. Протокол RIP исполняет процесс, называемый routed; он обрабатывает информацию о маршрутах и обменивается сообщениями с такими же процессами, работающими на соседних маршрутизаторах. Поскольку протокол RIP реализован как процесс прикладного уровня (хотя и весьма специфический, например, он способен управлять таблицами продвижения данных, находящихся в ядре операционной системы UNIX), он может отправлять и получать сообщения через стандартный сокет и использовать стандартный транспортный протокол. Таким образом, протокол RIP представляет собой протокол прикладного уровня (см. главу 2), работающий поверх протокола UDP.
Наконец, рассмотрим реальную таблицу продвижения данных протокола RIP (табл. 4.8), взятую с маршрутизатора _giroflee.eurecom.fr, работающего под управлением операционной системы UNIX. Если в операционной системе UNIX выполнить команду netstat -rn, вы можете увидеть таблицу продвижения данных (в действительности называемую в документации netstat «таблицей маршрутизации») для данного хоста или маршрутизатора.
Маршрутизатор giroflee соединен с тремя сетями. Вторая, третья и четвертая строки таблицы сообщают нам, что эти три сети присоединены к маршрутизатору giroflee через сетевые интерфейсы faO, LeO и gaaO. Адреса этих интерфейсов равны 192.168.2.5, 193.55.114.6 и 192.168.3.5 соответственно. Для передачи пакета любому хосту, принадлежащему одной из этих трех сетей, маршрутизатор giroflee просто посылает IP-дейтаграмму соответствующему интерфейсу. Особый интерес для нас представляет маршрут по умолчанию. Любая IP-дейтаграмма, не предназначающаяся одной из сетей, явно перечисленных в таблице продвижения данных, будет переправляться маршрутизатору с IP-адресом 193.55.114.129. Дейтаграммы посылаются этому маршрутизатору через сетевой интерфейс по умолчанию. Первая запись в таблице продвижения данных представляет собой так называемый кольцевой интерфейс. Когда протокол IP посылает дейтаграмму по кольцевому интерфейсу, пакет просто возвращается протоколу IP. Это бывает полезно при отладке. Адрес 224.0.0.0 является специальным групповым (класса D) IP-адресом. Мы рассмотрим групповую рассылку протокола IP в разделе «Групповая маршрутизация».