Введение
В предыдущих частях серии статей были рассмотрены теоретические основы протокола OSPF, типы областей и типы LSA, распространяемых протоколом.
В третьей части будут описаны механизмы преобразования маршрутной информации, полученной в служебных сообщениях OSPF, в записи таблицы маршрутизации для перенаправления пакетов.
Заполнение таблицы маршрутизации
После синхронизации LSDB в рамках каждой области, устройства запускают процесс вычисления дерева кратчайших путей (SPF), результатом которого должен стать расчёт маршрутов к каждой из известных сетей с определённой метрикой.
На следующем этапе вычисленные маршруты должны экспортироваться в таблицу маршрутизации FIB, однако на данной стадии учитывается ряд других факторов, таких как наличие других источников маршрутной информации, тип маршрута и метрика.
Параметр distance
Как упоминалось выше, у маршрутизатора может быть несколько источников маршрутной информации и, в случае если маршрут в одну и ту же сеть принят от разных источников, то помещение того или иного маршрута в FIB будет регулироваться параметров distance.
Рассмотрим пример, в котором демонстрируется использование нескольких источников маршрутов:
Конфигурация устройств:
R1:
/routing ospf instance set [ find default=yes ] router-id=1.1.1.1 /ip address add address=172.16.50.1/24 interface=ether1 network=172.16.50.0 add address=172.16.100.1/24 interface=ether2 network=172.16.100.0 /routing ospf network add area=backbone network=172.16.100.0/24 /system identity set name=R_1
R2:
/routing ospf instance set [ find default=yes ] redistribute-connected=as-type-1 router-id=2.2.2.2 /ip address add address=172.16.50.2/24 interface=ether1 network=172.16.50.0 add address=172.16.100.2/24 interface=ether2 network=172.16.100.0 add address=10.0.0.2/8 interface=ether4 network=10.0.0.0 /routing ospf network add area=backbone network=172.16.100.0/24 /system identity set name=R_2
Метрика OSPF
Проанализируем таблицу маршрутизации R1:
Обратим внимание, что пакет в сеть 10.0.0.0/8 будет отправлен в сторону устройства с ip-адресом 172.16.100.2, т.е. на R2, c интерфейса eth2.
Добавим статический маршрут к сети 10.0.0.0/8 через шлюз 172.16.50.2, выполнив на R1 команду /ip route add dst-address=10.0.0.0/8 gateway=172.16.50.2, и проанализируем изменения в таблице маршрутизации:
По результатам вывода, после внесённых в конфигурацию изменений, все пакеты в сеть 10.0.0.0/8 будут отправлены с eth1-интерфейса. Это объясняется тем, что в базе данных маршрутов (RIB) R1 присутствует два маршрута к сети 10.0.0.0/8 от двух источников: один получен через OSPF (distance = 110), а другой из статических записей (distance = 1). Сравнив параметры distance этих маршрутов, R1 помещает в таблицу маршрутизации оба, однако активным (флаг A) делает только статический маршрут, т.к. его distance меньше.
Аналогичную ситуацию можно наблюдать для маршрута в сеть 172.16.50.0/24: один маршрут в эту сеть является непосредственно подключенным (distance = 0), а второй маршрут сообщает R2, т. к. eth1-интерфейс R2 ассоциирован с этой сетью (distance – 110).
Конфигурация устройств:
Основной метрикой, используемой в OSPF для выбора лучшего маршрута, является стоимость: в таблицу маршрутизации будет добавлен маршрут с меньшим значением стоимости.
Значение стоимости указывается в качестве параметра каждого интерфейса, ассоциированного с OSPF и может принимать значения от 1 до 65535. Стоимость пути в сеть равна сумме стоимостей исходящих интерфейсов на пути распространения LSA с этой маршрутной информацией. Значение стоимости маршрута равная 16777215 считается недостижим для OSPF и данный маршрут не будет добавлен в таблицу маршрутизации.
В RFC 2328 отсутствует описание методики расчёта стоимости интерфейсов, поэтому при построении сетей с применением оборудования нескольких вендоров необходимо учитывать разницу в алгоритмах расчёта метрики OSPF. В RouterOS по умолчанию для всех интерфейсов используется стоимость 10, однако её можно задать вручную. Используя гибкую настройку стоимостей возможно реализовать схемы с асимметричной маршрутизацией и балансировкой трафика.
Рассмотрим схему с асимметричной маршрутизацией, рисунок 32. Пусть маршрутизаторы R1 и R2 соединены двумя каналами связи, на которые выделены сети 172.16.50.0/24 и 172.16.100.0/24. Кроме того, за каждым из маршрутизаторов есть сеть: 10.0.1.0/24 за R1 и 10.0.2.0/24 за R2. Все интерфейсы маршрутизаторов ассоциированы с backbone area.
Конфигурация устройств:
R1:
/routing ospf instance set [ find default=yes ] router-id=1.1.1.1 /ip address add address=172.16.50.1/24 interface=ether1 network=172.16.50.0 add address=172.16.100.1/24 interface=ether2 network=172.16.100.0 add address=10.0.1.1/24 interface=ether4 network=10.0.1.0 /routing ospf network add area=backbone network=172.16.50.0/24 add area=backbone network=172.16.100.0/24 add area=backbone network=10.0.1.0/24 /system identity set name=R_1
R2:
/routing ospf instance set [ find default=yes ] router-id=2.2.2.2 /ip address add address=172.16.50.2/24 interface=ether1 network=172.16.50.0 add address=172.16.100.2/24 interface=ether2 network=172.16.100.0 add address=10.0.2.2/24 interface=ether4 network=10.0.2.0 /routing ospf network add area=backbone network=172.16.50.0/24 add area=backbone network=172.16.100.0/24 add area=backbone network=10.0.2.0/24 /system identity set name=R_2
Конфигурация устройств:
Проанализируем таблицу маршрутизации R1 и R2.
Таблица маршрутизации к сети 10.0.2.0/24 на R1:
Таблица маршрутизации к сети 10.0.1.0/24 на R2:
На представленных выводах таблицы маршрутизации видно, что для сетей назначения создан ECMP-маршрут, который будет распределять проходящий трафик между двумя каналами связи. Подобная конфигурация была получена, поскольку стоимости каналов равны между собой.
Для получения схемы с асимметричной маршрутизацией изменим стоимости интерфейсов, добавив в конфигурацию устройств следующие команды:
R1: /routIng ospf interface add interface=ether1 cost=30
R2:/ routing ospf interface add interface=ether2 cost=30
Таблица маршрутизации к сети 10.0.2.0/24 на R1:
Таблица маршрутизации к сети 10.0.1.0/24 на R2:
Пусть PC_1 запускает проверку доступности PC_2. Сформированный пакет попадает на R1 и, согласно таблице маршрутизации на иллюстрации 35, будет отправлен через интерфейс eth2. R2 получает пакет и передаёт его в сторону PC_2 через интерфейс eth4. PC_2 обрабатывает сообщение и отправляет его в сторону R2. R2, получив ответное icmp-сообщение, в соответствии с таблицей маршрутизации на рисунке 36, отправляет пакет через интерфейс eth1. Маршрутизатор R1 получает ответный пакет и передаёт его в сеть PC_1. Таким образом, пакеты посылаемые от R1 к R2 передаются по нижнему каналу связи, а пакеты от R2 к R1 – по верхнему, т.е асимметрично.
Типы маршрутов
При экспорте маршрутов из OSPF в RIB, помимо стоимости учитывается тип маршрута. В порядке убывания приоритета выделяют следующие типы маршрутов:
- Intra-area (маршрутная информация о сетях в данной области, передаваемая в LSA type 1,2);
- Inter-area (маршрутная информация о сетях в соседних областях, которые сообщает ABR в LSA type 3);
- External type 1 (маршрутная информация о внешних, относительно OSPF, сетях);
- External type 2 (аналогично external type 1, но с другим методом расчёта стоимости).
Оценка типа маршрута при вычислении SPT имеет больший вес, чем метрика, т. е. если в LSDB маршрутизатора присутствует intra-area и inter-area маршруты в одну сеть, то будет выбран более приоритетный тип маршрута, т.е. intra-area, даже если метрика inter-area маршрута будет ниже.
Рассмотрим следующую схему:
В схеме представлено четыре маршрутизатора, находящихся в backbone area. Маршрутизаторы R2, R3 и R4 имеют интерфейс в сеть 10.0.0.0/8, однако R2 помещает интерфейс eth4 в backbone area со стоимостью 100, R4 – в area 10 со стоимостью 50, а R3 является ASBR и интерфейс eth4 является внешним со значением стоимости по умолчанию.
Конфигурация устройств:
R1:
/routing ospf instance set [ find default=yes ] router-id=1.1.1.1 /ip address add address=172.16.100.1/24 interface=ether2 network=172.16.100.0 add address=192.168.20.1/24 interface=ether4 network=192.168.20.0 add address=192.168.10.1/24 interface=ether3 network=192.168.10.0 /routing ospf network add area=backbone network=172.16.100.0/24 add area=backbone network=192.168.10.0/24 add area=backbone network=192.168.20.0/24 /system identity set name=R_1
R2:
/routing ospf instance set [ find default=yes ] router-id=2.2.2.2 /ip address add address=172.16.100.2/24 interface=ether1 network=172.16.100.0 add address=10.0.0.2/8 interface=ether4 network=10.0.0.0 /routing ospf interface add cost=100 interface=ether4 /routing ospf network add area=backbone network=172.16.100.0/24 add area=backbone network=10.0.0.0/8 /system identity set name=R_2
R3:
/routing ospf instance set [ find default=yes ] redistribute-connected=as-type-1 router-id=3.3.3.3 /ip address add address=192.168.10.3/24 interface=ether1 network=192.168.10.0 add address=10.0.0.3/8 interface=ether4 network=10.0.0.0 /routing ospf network add area=backbone network=192.168.10.0/24 /system identity set name=R_3
R4:
/routing ospf area add area-id=0.0.0.10 name=area_10 /routing ospf instance set [ find default=yes ] router-id=4.4.4.4 /ip address add address=192.168.20.4/24 interface=ether1 network=192.168.20.0 add address=10.0.0.4/8 interface=ether4 network=10.0.0.0 /routing ospf interface add cost=50 interface=ether4 /routing ospf network add area=backbone network=192.168.20.0/24 add area=area_10 network=10.0.0.0/8 /system identity set name=R_4
Проанализируем LSDB на маршрутизаторе R1.
Фрагмент детального вывода LSDB на R1:
На иллюстрации видно, что R1 получает три LSA с маршрутной информацией о сети 10.0.0.0/8: R2 формирует LSA type 1 с метрикой 100, R4 – LSA type 3 с метрикой 50 и R3 – LSA type 5 с метрикой 20.
Таблица маршрутизации и SPT на R1:
Если руководствоваться только стоимостью маршрутов, то в таблицу маршрутизации должен быть добавлен маршрут к сети 10.0.0.0/8 через R3, однако, как показано на рисунке 39, в таблицу маршрутизации добавлен маршрут через R2, поскольку intra-area маршруты являются более приоритетными.
Выключим интерфейс eth2 на R1 в сторону R2 и проанализируем таблицу маршрутизации (команда /interface ether set ether2 disabled=yes).
Таблица маршрутизации и SPT на R1 при недоступности R2:
В таблицу маршрутизации добавлен маршрут к 10.0.0.0/8 через R4, как inter-area, поскольку такой тип маршрутов имеет приоритет относительно E1.
Выключим интерфейс ether4 на маршрутизаторе R1, убедившись, что сеть 10.0.0.0/8 станет доступна через R3 (команда /interface ether set ether4 disabled=yes).
Таблица маршрутизации и SPT на R1 при недоступности R2 и R4:
Типы внешних маршрутов
В OSPF выделяют два типа внешних маршрутов: external type 1 (E1) и external type 2 (E2), отличающиеся между собой методом расчёта стоимости.
В E1-маршрутах стоимость складывается из стоимости внешнего маршрута на ASBR и стоимости пути до ASBR, а в E2 используется только стоимость маршрута на ASBR и не изменяется при передаче вдоль OSPF-домена. Если в LSDB присутствует два E2-маршрута к одной и той же сети, то лучшим будет признан маршрут с меньшей стоимостью пути до ASBR.
Тип external-маршрута и его стоимость указываются в конфигурации instance на ASBR, который инжектирует эти маршруты в OSPF.
Для сравнения E1- и E2- маршрутов, рассмотрим следующую схему:
В схеме участвуют три маршрутизатора, помещённые в backbone area, причём R2 и R3 имеют внешний канал к сети 10.0.0.0/8, которые они инжектируют в OSPF как E1 и E2 соответственно.
Конфигурация устройств:
R1:
/routing ospf instance set [ find default=yes ] router-id=1.1.1.1 /ip address add address=192.168.10.1/24 interface=ether2 network=192.168.10.0 add address=192.168.20.1/24 interface=ether3 network=192.168.20.0 /routing ospf network add area=backbone network=192.168.10.0/24 add area=backbone network=192.168.20.0/24 /system identity set name=R_1
R2:
/routing ospf instance set [ find default=yes ] redistribute-connected=as-type-1 router-id=2.2.2.2 /ip address add address=192.168.10.2/24 interface=ether1 network=192.168.10.0 add address=10.0.0.2/8 interface=ether2 network=10.0.0.0 /routing ospf network add area=backbone network=192.168.10.0/24 /system identity set name=R_2
R3:
/routing ospf instance set [ find default=yes ] redistribute-connected=as-type-2 router-id=3.3.3.3 /ip address add address=192.168.20.3/24 interface=ether1 network=192.168.20.0 add address=10.0.0.3/8 interface=ether2 network=10.0.0.0 /routing ospf network add area=backbone network=192.168.20.0/24 /system identity set name=R_3
Проанализируем LSDB и FIB на маршрутизаторе R1:
Маршрутизатор R1 получает два LSA type 5 о сети 10.0.0.0/8 от R2 и R3 с одинаковой метрикой, но разных типов. При этом в таблицу маршрутизации помещается маршрут через R2, поскольку маршруты типа E1 приоритетней E2.
Следует обратить внимание, что метрика в LSA равна 20, но в SPT к метрике прибавляется стоимость пути до ABR R2, после чего метрика равняется 30.
Отключим интерфейс в сторону R2, убедившись в том, что в таблицу маршрутизации добавится маршрут к сети 10.0.0.0/8 через R3, причём метрика этого маршрута будет равна изначальной (команда /interface ether set ether2 disabled=yes).
Импорт маршрутной информации из OSPF в FIB
Хотелось бы отдельно заострить внимание на экспорте маршрутной информации из OSPF в FIB и резюмировать данный раздел.
Экспорт маршрутной информации из OSPF происходит в несколько этапов:
- Синхронизация LSDB между маршрутизаторами домена:
- /routing ospf lsa print
- /routing ospf lsa print detail
- Расчёт дерева кратчайших путей. К каждой сети, представленной в LSA, должен быть найден кратчайший путь. При выборе из нескольких маршрутов к одной сети, маршрутизатор в первую очередь руководствуется типом маршрута и только во-вторую – стоимостью. Важно, что маршрутизатор сравнивает сети назначения по адресу сети назначения и маске, т.е. сети 192.168.0.0/24 и 192.168.0.0/30 являются разными:
- /routing ospf route print
- /routing ospf route print detail
- Экспорт маршрутов из SPT в FIB. На данном этапе маршрутизатор не учитывает тип маршрута и его стоимость, а всем маршрутам из SPT присваивает определённое значение distance (по умолчанию 110). При экспорте маршруты из SPT сравниваются с маршрутами из других источников и, в случае если сети назначения совпали, маршрутизатор, руководствуясь параметром distance, помещает в FIB маршрут с меньшим значением distance:
- /ip route print
- /ip route print detail
Заключение
В третьей части серии статей были рассмотрены основные принципы, заложенные в процесс импорта маршрутной информации из OSPF в таблицу маршрутизации устройства. Рассмотрены различные типы внутренних и внешних маршрутов и их приоритеты в процедуре импорта в RIB.