14.1 Основы MPLS

14. MPLS

14.1 Основы MPLS

MPLS был разработан для быстрой обработка трафика маршрутизаторами. MPLS использует метки (label) для принятия решения о путях пересылки трафика через сеть. Основное преимущество MPLS в том, что он обеспечивает чёткое разделение между маршрутизацией (control) и пересылкой (moving data). Такое разделение позволяет развернуть единый алгоритм пересылки — MPLS, который может быть использован для различных сервисов и типов трафика. Пакетам может быть присвоен label-switched path (LSP) основываясь на различных комбинациях критериев: сеть назначения и тип приложения, сеть источника и назначения, требованиях QoS, IP multicast группы, идентификатора VPN.Заголовок MPLS

14-1-1MPLS отвечает за направление потока IP пакетов по предопределённому пути через сеть. Этот путь называется Label-Switched Path (LSP) и он обеспечивает однонаправленный путь от маршрутизатора-источника (ingress) трафика, до конечного (egress) маршрутизатора. Для каждого направления трафика необходим отдельный LSP.

Когда пакет входит в LSP, ingress-маршрутизатор изучает пакет и присваивает (push) ему метку на основании сети назначения, помещая 32-битную метку (label) сразу за L2-заголовком, т.е. между L2 и L3 заголовками, и пакет теперь передаётся не на основании IP маршрутизации, а на основе этой метки. MPLS может быть использован не только для IP пакетов, как например в L2 VPN.

Метки MPLS могут быть присвоены per-interface или per-router. Multicast и IPv6 метки присваиваются независимо от меток unicast-пакетов.

На egress-маршрутизаторе пакет восстанавливается: метка MPLS удаляется (pop) из пакета. В большинстве случаев предпоследний (penultimate) маршрутизатор удаляет стек меток.

Структура заголовка состоит из 4-ёх полей, общим размером 32 бита: 14-1-2

  • 20-bit label — сама метка; идентифицирует пакет в LSP. Значение меняется при прохождении пакета по LSP от одного LSR к другому LSR
  • Class of service (CoS) (experimental) — обозначает приоритет в очередях сети. На каждом хопе это значение определяет, какие пакеты получают «льготную» обработку в туннеле
  • Bottom of stack bit (S) — указывает, имеется ли в MPLS-пакете более одной метки. В JunOS количество меток в стеке для транзитных LSR-операций не ограничено. При входе в MPLS-сеть, на ingress-маршрутизаторе, в пакет может быть добавлено до 3-ёх меток. Значение «1» в данном бите говорит о том, что текущая метка является последней в стеке меток у пакета, т.е. изъяв (pop) эту метку из пакета, маршрутизатор должен будет обработать этот пакет на сетевом уровне (IPv4/IPv6/…)
  • Time to live (TTL) — количество L3 хопов, через которые данный MPLS-пакет может пройти. Уменьшается на 1-цу на каждом хопе; при уменьшении до «0» — пакет дропается. По-умолчанию, на ingress-маршрутизаторе в это значение копируется TTL исходного пакета.

Важные моменты про MPLS:

  • Метки MPLS могут быть установлены либо вручную, либо сигнальным протоколом, запущенным на каждом LSR на LSP-пути. Как только настроен LSP, ingress-маршрутизатор и все маршрутизаторы в LSP-пути не обращают внимания на IP маршрутную информацию в labeled-пакете, они используют метки для поиска информации в своих label forwarding tables. Метки меняются по сегментам
  • Отдельный маршрутизатор может быть ingress-, egressтранзитным маршрутизатором для нескольких LSP, и набор функций, выполняемых маршрутизатором, зависит от дизайна сети
  • LSR заменяет старую метку в пакете на новую (swap) и отправляет пакет следующему маршрутизатору в LSP. Когда пакет достигает egress-маршрутизатора, то все метки удаляются и пакет пересылается согласно IP маршрутизации
  • Метки — понятие локальное для маршрутизатора: метка 10254, обозначающая LSP на одном маршрутизаторе, на другом маршрутизаторе может означать другой LSP

Метки с номерами от 0 до 15 зарезервированы:

  • «Label 0» — IP version 4 (IPv4) explicit null label — значение легально, когда является единственным в стеке меток и обозначает, что стек меток должен быть изъят (pop) и пересылка пакета должна осуществляться на основе IPv4-маршрутизации
  • «Label 1» — Router Alert Label — значение легально, когда оно не находится внизу (bottom) стека меток. Когда у принятого пакета эта метка располагается сверху (top) стека меток, он подвергается обработке в локальном модуле программного обеспечения. Метка под Router Alert Label определяет пересылку пакета. Если пакет пересылается дальше, то Router Alert Label должна быть добавлена (push) обратно в стек меток пакета перед пересылкой. Является аналогом router alert option в IP-пакетах. По-существу, Router Alert Label предоставляет MPLS-модулям на разных маршрутизаторах возможность взаимодействия друг с другом.
  • «Label 2» — IP version 6 (IPv6) explicit null label — значение легально, когда является единственным в стеке меток и обозначает, что стек меток должен быть изъят (pop) и пересылка пакета должна осуществляться на основе IPv6-маршрутизации
  • «Label 3» — implicit null label — метка, которую LSR могут назначать и распространять, но которая никогда не появляется в инкапсуляции. Если LSR заменяет метку вверху (top) стека меток новой меткой и эта новая метка — implicit null label, то LSR удаляет (pop) весь стек меток вместо замены. Данная метка должна быть указана в  label signaling protocol
  • «Label 4–15» — зарезервированы

Label Information Base (LIB)

LIB хранится в mpls.0 routing table. Эта таблица автоматически создаётся при настройке MPLS и в неё автоматически помещаются три метки: Label 0, Label 1 и Label 2. Пакеты, полученные с этими метками отправляются в Routing Engine (RE) для обработки.

Промежуточные LSR пересылают MPLS-пакеты на основании этой таблицы. Для каждого MPLS-пакета в LIB ищется соответствие исходящей метки и next-hop’а на основании входящей метки14-1-3Слева видим 4-ре входящих (Receive) метки: три из них (0, 1 и 2) создаются автоматически. Далее видим действие для пакета с входящей меткой 1000050: «next-hop 172.20.100.14 через ge-1/0/6.0, заменить (Swap) метку на 1000515».

LSR — маршрутизаторы пересылающие MPLS-пакеты, участвуют в создании LSP. Для конкретного назначения, LSR может быть началом LSP, концом LSP или промежуточной точной LSP. Один LSR может выполнять все три роли для разных LSP, однако один LSR не может быть началом и концом одного LSP.

LSP — однонаправленный поток трафика, переносящий пакеты от источника к назначению. Пакеты входят в LSP на ingress-маршрутизаторе и выходят из LSP через egress-маршрутизатор. Пакеты не могут войти в LSP через промежуточный hop. LSP подразумевает единый MPLS домен (имеет единое административное управление).


Виды LSR

1). Ingress Router

Ingress Router располагается в начале LSP; выполняет инкапсуляцию (операция push) IP пакетов 32-ух битной меткой MPLS. Ingress Router иногда называется label edge router (LER) или head-end router. Является upstream-маршрутизатором по отношению к другим маршрутизаторам в LSP14-1-4

2). Transit Router

Transit Router пересылает MPLS-пакеты через LSP к следующему LSR; может существовать от «0» до «253» (TTL) транзитных маршрутизаторов; выполняет функцию замены (swap) MPLS-меток на основании входящей метки14-1-5

3). Penultimate Router

Penultimate Router — предпоследний маршрутизатор в LSP; обычно удаляет (pop) MPLS метки из пакета. Penultimate-hop popping (PHP) освобождает egress-маршрутизатор от излишней нагрузки по удалению меток. Маршрутизаторы Juniper работают хорошо как с использованием PHP, так и без него. Label stacking (стекирование меток) использует несколько меток в пакете для построения туннеля в туннеле. В этом случае PHP освобождают egress-маршрутизаторы об осведомлённости о туннелях14-1-6

4). Egress Router

MPLS-пакеты покидают LSP на Egress Router и далее пересылаются на основании маршрутной информации, используя обычную IP forwarding table. В LSP может существовать только один Egress Router. Во многих случаях использование PHP может устранить MPLS-операции на Egress Router’е. Egress Router часто называет label edge router (LER) или tail-end router14-1-7


Базовая настройка MPLS на Juniper

Чтобы интерфейс «воспринимал» и обрабатывал IP пакете, при его настройке указывается » family inet» вместе с IP адресом. Для «восприятия» и обработки этим же интерфейсом MPLS-пакетов, необходимо настроить на нём «family mpls«:

[edit interfaces]
user@R2# show
ge-1/0/0 {
     unit 0 {
          family inet {
               address 172.20.100.21/30;
          }
          family mpls;
     }
}

Настройка MPLS на Juniper производится в «секции» [edit protocols]:

[edit protocols]
user@R2# show
mpls {
     interface ge-1/0/0.0;
}

или же настроить MPLS на всех сразу интерфейсах:

[edit protocols]
user@R2# show
mpls {
     interface all;
     interface fxp0.0 {
          disable;
     }
}

FXP0 — это management interface, поэтому его лучше исключить из MPLS.

Настройка статического LSP на Ingress Router

Первое, что необходимо настроить — имя LSP, что позволит в перспективе настроить несколько статических LSP между двумя определёнными маршрутизаторами. Необязательно настраивать уникальные имена для static против dynamic LSP (static LSP может иметь такое же имя, как и dynamic LSP, настроенные на одном маршрутизаторе). Именованные LSP позволяют настроить single-hop static LSP, задав явно null label или не задавая метку вообще. Настройка осуществляется в «секции» [edit protocols]:

[edit protocols]
user@R2# show
mpls {
     static-label-switched-path <lsp-name> {
          ingress {
               next-hop <address-or-interface-of-next-hop-router>;
               to <address-of-egress-router>;
               push <label>;
          }
     }
}

здесь:

  • ingress — указывает, что пакет будет входить в MPLS
  • next-hop <address-or-interface-of-next-hop-router> — адрес или имя интерфейса next-hop’а для достижения следующего маршрутизатора
  • to <address-of-egress-router> — адрес следующего маршрутизатора
  • push <label> — метку можно назначить самостоятельно (от 16 до 1 048 575)

Здесь же (в ingress) можно настроить CoS, preference, node protection, link protection для пакетов.

Настройка статического LSP на Transit Router

[edit protocols]
user@R2# show
mpls {
     static-label-switched-path <lsp-name> {
          transit <incoming-label> {
               next-hop <address-or-interface-of-next-hop-router>;
               swap <outgoing-label>:
          }
     }
}

Транзитный статический LSP добавляется в таблицу маршрутизации mpls.0. Каждая статическая LSP должна иметь уникальное имя и уникальную метку на входе в маршрутизатор. Статический LSP может иметь несколько меток на входе, в таком случае каждая будет работать как независимый LSP, означая что можно настроить все связанные атрибуты LSP для каждой входящей метки. Нумерация входящих меток ограничена количеством стандартных статических LSP-меток — от 1 000 000 до 1 048 575.

Т.к. необходимо настраивать pop на penultimate-маршрутизаторе, то нет необходимости настраивать статический LSP на egress-маршрутизаторе.

Использование таблицы маршрутизации inet.3

В реализации MPLS в JunOS, по-умолчанию только BGP осведомлён о наличии LPS и только когда BGP пытается разрешить next-hop’ы, ассоциированные с объявленными префиксами.

Т.к. MPLS LSP направляют транзитный трафик через backbone провайдера, то этот внутренний трафик использует IGP маршрутизацию, которая не ассоциирована с next-hop’ом BGP. В результате, этот транзитный трафик, ассоциированный с next-hop’ом BGP, который резолвится через inet.3, подвергается пересылке через LSP, в то время как остальной трафик остаётся не осведомлён о присутствии LSP. Только BGP может «видеть» содержимое таблицы inet.3; BGP устанавливает LSP в качестве физического next-hop‘а для транзитных адресов назначения. Internal Destinations не ассоциированы с BGP next-hop’ом и по-этому не используют LSP по-умолчанию. Маршруты в inet.3 добавляет статический LSP.

14-1-8R5 изучает префикс 64.25.1.0/24 через EBGP от маршрутизатора в AS65511. R1 узнаёт об этом же префиксе от R5 через IBGP и через EBGP анонсит этот префикс маршрутизатору в AS65510. После запуска IGP внутри AS65512 и объявления R5 next-hop-self‘ом для префикса 64.25.1.0/24, получим возможность запустить MPLS внутри AS65512 и настроить статический LSP внутри AS65512:14-1-9LSP будет являться предпочтительным маршрутом в сеть 64.25.1.0/24, т.к. BGP ищет префикс в таблице inet.3 (для LSP’s) перед поиском в таблице inet.0 (используется IGP), т.к. LSP-маршрут предпочтительнее, чем IGP согласно Route Preference (если Route Preference будет одинаков для LSP и IGP маршрутов, то предпочтение отдаётся inet.3):14-1-10inet.0 используется всеми протоколами маршрутизации, а inet.3 используется BGP. Т.о. у нас 2 активных маршрута до loopback-интерфейса R5 192.168.1.5/32, один в inet.0, а второй в inet.3, и при отправке трафика к 192.168.1.5/32 будет выбран IGP-маршрут, а при отправке трафика с BGP next-hop’ом 192.168.1.5 — будет выбран LSP-маршрут.

Цель всего этого — отправить транзитный через AS65512 трафик, адресованный в 64.25.1.0/24 именно через LSP.

BGP маршрут в 64.25.1.0/24 присутствует в таблице маршрутизации inet.0 как BGP-маршрут, однако результат разрешения BGP next-hop’а через таблицу inet.3 приводит к использованию статического LSP как next-hop’а для трафика в сеть 64.25.1.0/24. Пакеты, которые будут приходить на R1 в сеть 64.25.1.0/24, будут отправлены через LSP, остальные пакеты будут передаваться с использованием BGP или IGP.

14-1-11

Алгоритм выбора next-hop’а в BGP — меньший Route Preference > inet.3inet.0

LSP информация о пересылке копируется в inet.0 когда BGP может разрешить next-hop через LSP. Однако копируется не сам LSP, а префикс BGP с next-hop’ом пересылки, который «опирается» на LSP:14-1-12Таким образом, трафик не ассоциированный с next-hop‘ом BGP «не будет осведомлён» о наличии LSP.

LSP появляется в ingress таблице inet.3 маршрутизатора. Адрес next-hop‘а указывает на egress-маршрутизатор как-будто он подключен напрямую, а не на другом конце LSP, через несколько переходов. Конечный адрес LSP — это loopback интерфейс egress-маршрутизатора.

Когда LSP функционирует, то этот next-hop используется BGP, иначе — используется IGP.

BGP использует inet.3 только тогда, когда он пытается разрешить BGP next-hop. LSP скрыт от основной таблицы маршрутизации, что позволяет не-BGP трафику продолжать использовать путь пересылки, определённый IGP. Это поведение по-умолчанию, которое можно изменить, и тогда не-BGP трафик сможет знать о присутствии LSP.


Таблицы маршрутизации, используемые MPLS

При настройке MPLS на Juniper вместе с обычными протоколами маршрутизации используются 3 таблицы маршрутизации:

  1. inet.0 — основная IP unicast таблица маршрутизации. Обычно, IGP использует только эту таблицу для определения next-hop‘ов. Можно позволить IGP получать доступ к информации LSP, доступной в inet.3 на LSP-by-LSP основе, установив префиксы LSP в inet.0, используя команду install prefix active в конфигурации для этого LSP
  2. inet.3 — таблица маршрутизации MPLS. Все LSP устанавливаются в эту таблицу, в которой только BGP может их найти. Можно добавить префиксы, ассоциированные с LSP в таблицу inet.3 используя команду  install prefix в настройке этой LSP. Это полезно делать, когда необходимо, чтобы BGP использовал LSP и next-hop self не настроен на egress-маршрутизаторе
  3. mpls.0 — MPLS label switching table. Транзитные и egress-маршрутизаторы используют содержимое этой таблицы для операций на метками swap и pop когда это необходимо.

MPLS Forwarding

1). Ingress Router

Ingress Router принимает решение о пересылке на основании адреса назначенияHext-hop для этого адреса назначения Ingress Router ищет в таблицах inet.3 и inet.0. Если next-hop определён как LSP, в пакет «вставляется» метка MPLS и пакет пересылается к соответствующему next-hop‘у14-1-13

2). Transit Router

Transit Router принимает решение о пересылке на основании входной метки и использует для этого таблицу маршрутизации mpls.0. Если Transit Router не является предпоследним в LSP, то он производит операцию swap и пересылает пакет с новой outgoing-меткой к следующему next-hop‘у в LSP. Если Transit Router является предпоследним (penultimate) в LSP, то он удаляет заголовок MPLS и отправляет пакет на egress-маршрутизатор.

3). Egress Router

Egress Router пересылает трафик на основании destination IP-адреса, используя для этого таблицы маршрутизации inet.0 и inet.3.


Таблица маршрутизации mpls.0

Таблица маршрутизации mpls.0 в Juniper содержит mapping-информацию, используемую для пересылки трафика транзитным маршрутизатором. Таблица маршрутизации mpls.0 носит ещё название LIB. Информацию, содержащуюся в LIB (mpls.0), демонстрирует следующий слайд14-1-14Здесь представлена такая информация, как:

  • значение incoming label и протокол, которым она изучена
  • локальный next-hop и интерфейс, через который он достижим
  • действие над меткой (swap в данном примере)
  • значение outgoing label

Penultimate Hop Popping (PHP)

Penultimate Hop Popping в Juniper является поведением по-умолчанию. Penultimate маршрутизатор — это предпоследний маршрутизатор в LSP. Он удаляет метки и отправляет пакет без заголовка MPLS14-1-15

Implicit NULL — поведение по-умолчанию в JunOS с точки зрения egress-маршрутизатора. Означает, что penultimate маршрутизатор должен изъять метки и переслать пакет без заголовка MPLS.

Explicit NULL — настраивается на egress-маршрутизаторе в «секции» [edit protocols mpls]. Означает, что penultimate маршрутизатор должен переслать пакет на egress-маршрутизатор с заголовком MPLS и egress-маршрутизатор сам удалит метки.

К оглавлению

Добавить комментарий