Перед тем как переходить к описанию технологии, давайте вспомним, как происходит передача данных в сетях с традиционной IP-маршрутизацией: каждый маршрутизатор сети на пути следования пакета от точки А к точке Б анализирует заголовок 3го уровня, сравнивает его со своей таблицей маршрутизации и принимает решение о перенаправлении этого пакета на тот или иной интерфейс (при этом следует отметить, что процедура route lookup происходит на каждом маршрутизаторе сети независимо).
Как видим, вышеописанный процесс довольно ресурсоемкий. В MPLS предлагается помечать каждый пакет с данными специальным идентификатором (меткой, label) и перейти от маршрутизации к коммутации по меткам. Наличие метки (или стека меток) позволяют маршрутизаторам определять следующий хоп в процессе передачи пакета по сети без выполнения поиска адреса. Сегодня существуют три области применения MPLS:
- Управление траффиком (Traffic engineering, TE)
- QoS
- VPN
Прим. : основной упор в данном цикле статей будет сделан на реализацию MPLS VPN.
Что же такое метка? Метка это специальный идентификатор фиксированной длины. Она используется для пересылки пакетов от одного маршрутизатора к следующему. Метка передается в составе каждого пакета, который проходит через MPLS-домен (при этом место в пакете зависит от технологии канального уровня сети).
Размер метки составляет 4 байта: 20 бит отводятся под непосредственную идентификацию, 3 бита задействованы под CoS, также есть 1 стоповый бит и 8 бит отведены под поле TTL.
Одним из преимуществ технологии MPLS (что, кстати, и отражено в названии) является возможность использования одинаковых меток в различных канальных средах. Достигается это за счет инкапсуляции протокола третьего уровня внутрь MPLS.
Прим. Поскольку MPLS-метки «вклиниваются» внутрь существующего фрейма, необходимо следить за MTU
Как же маршрутизаторы узнают о том, какую метку куда необходимо скоммутировать? Для управления метками в MPLS-среде существуют три протокола:
- Tag Distribution Protocol (TDP)
- Label Distribution Protocol (LDP)
- Resource Reservation Protocol (RSVP)
Протокол RSVP сейчас мы рассматривать не будем (он используется только для MPLSTE). Протоколы TDP и LDP идентичны по своей сути, разница лишь в том, что LDP является открытым протоколом, а TDP – Cisco proprietary. Рассмотрим вопрос, как работает LDP.
Маршрутизаторы обмениваются Hello-сообщениями (по-умолчанию раз в 5 секунд) с помощью multicast-рассылки на адрес 224.0.0.2 по 646му udp порту. Соседский маршрутизатор (Label Switch Router, LSR), который получил Hello-сообщение, отвечает открытием unicast TCP-сессии на порт 646. При этом следует отметить, что между маршрутизаторами устанавливается только одна TCP-сессия, при этом ее инициатором является маршрутизатор с наибольшим LDP ID (параметр LDP ID передается внутри Hello-сообщения). После установления LDP-сессии маршрутизаторы продолжают обмениваться сообщениями keepalive для проверки доступности соседа (интервал 60 сек).
Распределение меток в кадровом режиме MPLS
LDP в плоскости управления (control plane) обменивается метками с соседними маршрутизаторами и запоминает их в базе данных LIB (Label Information Base). Эта информация затем используется в плоскости данных (Data Plane):
- Метка добавляется в FIB (Forwarding Information Base) для связки IP-префикса и соответствующего ему Next-хопа
- Локально сгенерированная MPLS метка добавляется в LFIB (Label Forwarding Information Base) и отображается на Next-хоп метку
Рассмотрим пример как передается пакет за отсутствием меток:
- Маршрутизатор от OSPF-соседа узнает маршрут на сеть 172.16.1.0/24 с адресом следующего хопа 10.1.34.4
- Полученная по OSPF информация попадает в базу данных RIB (Routing Information Base)
- Информация из RIB в плоскости управления передается в область данных в таблицу FIB, которая и используется для передачи пакетов на сеть назначения.
Прим. LIB таблица содержит локальные метки, в LFIB хранятся метки, которые используются для коммутации пакетов
Если же на маршрутизаторе запущен процесс LDP, то схема передачи пакетов несколько модифицируется:
- Маршрутизатор добавляет локально сгенерированную метку (например, 100) к IP-префиксу 172.16.1.0/24 и далее передается ко всем LDP-соседям
- Информация из LIB передается в LFIB
- После этого метки из LFIB используются таблицей FIB для коммутации пакетов
Прим. Перед тем как сгенерировать метку для какого-либо IP-префикса, необходимо, чтобы это префикс появился в таблице RIB. Это условие означает, что MPLS «накладывается» поверх протокола IGP (RIP, EIGRP, OSPF) – т.е. внутри MPLS-домена необходимо предварительное IP connectivity. Для стабильности технологии рекомендую маршрутизаторы в IGP объявлять через интерфейс типа Loopback
После того как маршрутизаторы обменялись метками для всех IP-префиксов можно передавать трафик. Рассмотрим что происходит когда пакет на 172.16.1.1 передается от R1:
- Поскольку R3 сообщил маршрутизатору R1 о своей локальной метке посредством LDP, то R1 использует метку 100 при передаче пакета к маршрутизатору R3
- R3 получает пакет с меткой 100, изменяет ее на 50 и передает пакет дальше на маршрутизатор R4
- Маршрутизатор R4 получает пакет с меткой 50, принимает решение и передаче этого пакета на сеть 172.16.1.0 (в соответствие со своей локальной таблицей). Поскольку интерфейс в сети 172.16.1.0 не принадлежит MPLS-домену, то маршрутизатор снимает метку и передает чистый IP пакет в сеть назначения
Рассмотренный механизм коммутации по меткам довольно простой и прозрачный. Однако он обладает определенными недостатками. Какие это недостатки рассмотрим на следующем примере: рабочей станции 192.168.1.1 требуется передать пакет на сервер 172.16.1.1
Когда маршрутизатор R1 получает пакет от РС, то он понимает, что в пакет необходимо добавить метку, поскольку сеть назначения достижима через MPLS облако. В соответствии с информацией, полученной от R2, маршрутизатор R1 добавляет метку 20 и передает пакет на R2. R2 получает пакет, заменяет метку на 50 и коммутирует пакет на R3. R3 проделывает аналогичную операцию. Ситуация несколько меняется когда пакет с меткой достигает граничного маршрутизатора в MPLS домене (R4 на примере): ему необходимо произвести сразу две операции:
просмотреть LIB и увидеть, что выходной интерфейс не принадлежит домену, а следовательно, принять решение о необходимости удаления метки из пакета
просмотреть RIB, узнать адрес next-хопа и передать чистый IP-пакет
Такое поведение маршрутизатора R4 нельзя считать оптимальным. Чтобы убрать двойной просмотр таблиц, метку для сети 172.16.1.0/24 можно убирать не на граничном R4, а на маршрутизаторе, который ему предшествует (т.е. на R3): в этом случае на R4 не будет необходимости просматривать таблицу LFIB. Такая технология называется Penultimate Hop Popping (PHP, не путать с языком web-программирования)
Конфигурирование MPLS
После того как мы рассмотрели базовую функциональность MPLS, попрактикуемся в настройке данной технологии на Cisco.
———— R1 ————
ip cef
interface Serial 1/0
mpls label protocol ldp; включаем LDP наинтерфейсе
mpls ip; включаем технологию MPLS на интерфейсе
———— R2 ————
ip cef
interface Serial 1/2
mpls label protocol ldp
mpls ip
interface range FastEthernet 0/0 — 1
mpls label protocol ldp
mpls ip
———— R3 ————
ip cef
interface Serial 1/0
mpls label protocol ldp
mpls ip
interface range FastEthernet 0/0 — 1
mpls label protocol ldp
mpls ip
———— R4 ————
ip cef
interface Serial 1/0
mpls label protocol ldp
mpls ip
Для проверки настройки можно использовать следующие команды:
*********** VERIFY ***********
show mpls interfaces (просмотр всех интерфейсов в MPLS домене)
show mpls ldp neighbor (просмотр LDP соседей)
show mpls ip binding (просмотр таблицы LIB)
show mpls forwarding table
Метки: MPLS
Опубликовано: Маршрутизаторы и коммутаторы
[…] этого пакета на тот или иной интерфейс (при этом Читать далее Tweet VK.init({apiId: 2672059, onlyWidgets: true}); VK.Widgets.Like('vk_like_8099', {type: […]
Как вовремя! Благодарю!
Нахожу много полезной информации как на вашем блоге, так и в статьях на habrahabr. Спасибо большое!!!
Хотел написать вам, что по ним и по множесту другой информации стараюсь все реализовать и съэмулировать в GNS3.
Вот что у меня получилось (помойму неплохо):
http://go-to-easyit.blogspot.com/2012/04/mpls-cisco-1.html
http://go-to-easyit.blogspot.com/2012/03/mpls-cisco-2.html
Может, кому пригодится.
Предлагаю сотрудничество в написаниях статей 🙂
Очень жаль, что части картинок нет…