Назад | Перейти на главную страницу

Выбор маршрутизации: специфичность vs метрика

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

Также приветствуется ссылка на подробности алгоритма выбора маршрутизации, используемого Linux.

Метрика маршрутов предназначена для установки предпочтения среди маршрутов с одинаковой специфичностью. Это верно для маршрутизации в целом (например, Cisco, Windows и т. Д.). Итак, модель работает так:

  1. Найти наиболее конкретный маршрут (он же самое длинное совпадение префикса *)
  2. Если существует несколько маршрутов с одинаковой специфичностью, выберите тот, самый низкий административное расстояние (Это различает такие вещи, как маршруты с прямым подключением, статические маршруты и различные протоколы маршрутизации).
  3. В рамках этого протокола маршрутизации и конкретного маршрута (если специфика маршрута и административное расстояние совпадают), выберите маршрут с самый низкий показатель

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

* Это называется совпадением по самому длинному префиксу, потому что подсеть в двоичном формате (например, / 24) выглядит как 11111111.11111111.11111111.00000000. Таким образом, маршрутизатор может просто сканировать префикс на предмет двоичных единиц и останавливаться, как только он достигает нуля, а затем он соответствует префиксу.

Linux предоставляет ряд инструментов для гибкого выбора маршрутизации.

Единая таблица маршрутизации

В простейшем случае есть только одна таблица маршрутизации ядра и нет маршрутов с атрибутом SRC. Эта таблица содержит количество маршрутов, которые были размещены туда вручную (ip route add), с помощью демона DHCP или демонов маршрутизации. В этом случае ядро ​​выбирает:

  • наиболее конкретный маршрут;
  • если есть несколько одинаково специфичных маршрутов, тот с наименьшей метрикой ядра.

Обратите внимание, что метрика ядра (отображается ip route show) выбирается демоном маршрутизации и не обязательно связана с метрикой какого-либо конкретного протокола маршрутизации. Например, Quagga использует одну и ту же метрику для всех маршрутов, устанавливаемых в ядре, независимо от метрики протокола.

Маршруты для конкретных источников

Linux также поддерживает маршруты с атрибутом SRC, который сопоставляет пакеты только с заданным адресом источника. SRC работает только для IPv6 и до недавнего времени был ошибочным (3.11, если не изменяет память); Я не рекомендую использовать его, если вы не знаете, что делаете.

Несколько таблиц маршрутизации

Если вам нужна большая гибкость, чем предусмотрено выше, вам нужно будет поиграть с несколькими таблицами маршрутизации и написать правила, чтобы выбрать одну конкретную таблицу маршрутизации для каждого пакета. Распространенным методом является отправка по адресу источника, чтобы имитировать маршруты, зависящие от источника. Другой метод - запускать каждый демон маршрутизации в своей собственной таблице маршрутизации и моделировать «административное расстояние» Cisco. Все это подробно описано в Глава 4 LARTC.