antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 26 Декабрь , 2011

Перед тем как переходить к описанию технологии, давайте вспомним, как происходит передача данных в сетях с традиционной 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

 

Метки:
Опубликовано: Маршрутизаторы и коммутаторы

 

4 комментария “MPLS, основы”

comment rss - Trackback

  1. […] этого пакета на тот или иной интерфейс (при этом Читать далее Tweet VK.init({apiId: 2672059, onlyWidgets: true}); VK.Widgets.Like('vk_like_8099', {type: […]

  2. S0s:

    Как вовремя! Благодарю!

  3. Нахожу много полезной информации как на вашем блоге, так и в статьях на 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
    Может, кому пригодится.
    Предлагаю сотрудничество в написаниях статей 🙂

  4. Vilos:

    Очень жаль, что части картинок нет…

» Оставить комментарий

Вы должны войти чтобы прокомментировать.