Для решения данной задачи используется понятие метрики. Значение метрики, определяющее стоимость передачи пакета по сети, содержится в стандартной таблице маршрутизации Linux, которая заполняется с помощью команды route. На рис. 24.2 показано содержимое простой таблицы маршрутизации (на реальных маршрутизаторах размер таблицы гораздо больше, но ее формат остается неизменным). Обратите внимание на столбец под названием Metric
. В нем указано, что число маршрутизаторов, которые пакет посетит по пути следования в сети 127.0.0.0/8 ( localhost
) и 192.168.1.0/24 (локальная сеть), равно нулю, а оставшийся маршрут проходит через один маршрутизатор. Данный пример чрезвычайно прост. Для маршрутизаторов, показанных на рис. 24.1, в таблице маршрутизации содержалась бы информация о разных маршрутах, отличающихся значениями в поле Metric
. К сожалению, стандартные средства маршрутизации системы Linux игнорируют значение метрики; для того, чтобы метрика учитывалась, необходимо использовать один из протоколов маршрутизации, рассматриваемых в данной главе.
Рис. 24.2. Значение в поле Metric
определяет стоимость передачи пакета по данному маршруту
Протоколы маршрутизации позволяют маршрутизаторам обмениваться информацией о маршрутах, в том числе передавать значения метрики. Если все маршрутизаторы, показанные на рис. 24.1, будут поддерживать протокол маршрутизации, они сообщат друг другу сведения об имеющихся маршрутах и каждый из них построит таблицу маршрутизации, в которой будут указаны реальные значения метрики. Если один из маршрутизаторов выйдет из строя, остальные маршрутизаторы получат информацию об этом и перенаправят трафик в обход неисправного участка сети.
Протоколы маршрутизации используют следующие алгоритмы.
• Дистанционно-векторный алгоритм. Этот алгоритм отслеживает число маршрутизаторов, находящихся между текущим маршрутизатором и узлом назначения. При передаче пакета в некоторую сеть выбирается такой путь, на котором число маршрутизаторов будет минимальным. Данный алгоритм используется при работе протокола RIP (Routing Information Protocol — протокол маршрутной информации).
• Алгоритм маршрутизации по состоянию канала. Данный алгоритм связывает информацию о стоимости передачи пакета с каждым соединением. Маршрутизатор, использующий такой алгоритм, выбирает путь к целевой сети, для которого значение стоимости минимально. Стоимость не обязательно должна быть равна числу маршрутизаторов, при ее определении могут также учитываться различия в быстродействии сетевых соединений. Данный алгоритм используется при работе протокола OSPF (Open Shortest Path First — первоочередное открытие кратчайших маршрутов).
В системе UNIX традиционно используется протокол RIP. В Linux он реализуется демоном routed
, входящим в состав одноименного пакета. Маршрутизаторы, поддерживающие RIP, обмениваются адресами сетей (например, 172.22.0.0) и связанными с ними метриками (в качестве метрики принимается число маршрутизаторов между маршрутизатором, который должен отправить пакет, и целевой сетью). Значения метрики могут лежать в пределах от 0 до 15. Если на пути к целевой сети лежит больше 15 маршрутизаторов, длина маршрута считается бесконечной и информация об этом маршруте удаляется из таблицы. При работе протокола RIP используется дистанционно-векторный алгоритм, а значение метрики оценивается очень грубо. Протокол RIP в основном применяется в небольших и средних сетях; для управления передачей данных по магистралям Internet он не используется.
Когда маршрутизатор получает информацию от другого маршрутизатора, он либо добавляет запись о маршруте в таблицу, либо заменяет существующую запись с более высоким значением метрики, либо удаляет маршрут, если полученное значение метрики, увеличенное на единицу, превышает 15.
При использовании программы routed
в системе Linux обычно не возникает проблем. Для ее запуска применяются средства, рассмотренные в главе 4. Работой сервера управляет конфигурационный файл /etc/gateways
, в котором содержится список начальных маршрутов. Пример записи в файле /etc/gateways
приведен ниже.
net 0.0.0.0 gateway 172.22.7.1 metric 1 active
В данном примере определяется маршрут по умолчанию ( net 0.0.0.0
), для которого задан шлюз 172.22.7.1. Метрика маршрута равна 1. Ключевое слово active
указывает на то, что этот маршрут может быть обновлен. Если вы хотите, чтобы маршрут сохранялся в таблице в неизменном виде, надо заменить ключевое слово active
на passive
. Для работы routed
можно использовать файл /etc/gateways
, поставляемый в составе пакета. В процессе работы демон routed
может, передавая широковещательные запросы, находить другие маршрутизаторы, использующие протокол RIP. После обнаружения маршрутизатора с ним начинается обмен информацией о маршрутах.
Читать дальше