Для того, чтобы у нас работал MPLS необходимо сначала определить соседей MPLS и наладить с ними связь.
Все это происходит с помощью протокола LDP — Label Distribution Protocol.
Итак, сперва наперво на все интерфейсы MPLS отправляется Hello сообщение (каждые 5 секунд). Hello сообщение отправляется по транспортному протоколу UDP на порт 646.
Далее, сосед получивший такое сообщение пытается установить сессию. Сессия устанавливается по протоколу TCP, а порт остается тем же — 646. TDP протокол использует порт 711.
Hello сообщение отправляется всем роутерам по мультикасту: 224.0.0.2.
LPD Identifier состоит из 6 байт, 4 байта определяют router-id, а 2 последние определяют область меток.
Что такое область меток? (Label Space)
Выделяют два вида области меток:
- per-interface label space — это когда метки генерируются в зависимости от интерфейса, то есть для каждого интерфейса своя метка.
- per-platform label space — когда метка генерируется одна на весь маршрутизатор, то есть для каждого интерфейса одинаковая метка.
per-interface может использоваться например когда у нас есть линки ATM (помните, там mpls строится исходя из vpi/vci, а они на интерфейсах разные, соответсвенно разные MPLS метки).
Давайте теперь посмотрим, как согласовываются эти lable space:
LSR устанавливает одно LDP соединение на каждое Label Space. Таким образом для per-platform требуется только одно LDP соединение, даже если есть несколько параллельных линков между LSR.
Например, LPD ID: 10.1.0.1:0, последний «0» говорит о том, что используется Per-Platform, «1» укажет, что используется Per-Interface.
Соседи бывают:
- Directly connected — тоесть когда сосед имеет связь с роутером по L2.
- Non-directly connected — когда между соседями нет L2 соединения. Проводим аналогию с BGP, когда мы использовали multihop.
Для того что бы non-directly connected у нас работало, необходимо указать это через команду: mpls ldp neighpor {vrf} {ip}
То есть, мы указали, что необходимо пробросить LDP сессию на указанный IP или VRF.
Где это может понадобиться?
- MPLS Fast Reroute — это фича, которая создает бекапный LSP и в случае отказа первого, бекапный сразу начинает работать.
- MPLS Non Stop Forwarding (NSF) — в случае отказа Control Plane, форвардинг продолжается.
- MPLS LDP Session Protection — это часть Fast Reroute.
- Any Transport over MPLS (AToM)
Hello по умолчанию, ходят между разными соседями по разному, например между directly соседями по умолчанию ходит каждые 5 секунд, и holdtime = 15, между non-directly — 60 секунд, holdtime = 180.
Рекомендуется все эти линки строить по Loopback, и не только MPLS, но и BGP, OSPF и так далее.
Да, и еще очень важный момент, TCP сессию начинает тот роутер, у которого больше LDP ID.
После того, как сессия установлена, посылаются hello сообщения и keepalive, по умолчанию keepalive = 60 секунд, если через 180 секунд не будет принят keepalive, то соседство будет разорвано.
Для того, чтобы изменить таймеры, можно воспользоваться командой: mpls ldp discovery {hello | targered-hello} {holdtime | interval} XX seconds
Исходя из этого можно сказать, что hello сообщениями обмениваются per-link, а keepalive обмениваются только per-neighbor.
Теперь давайте в картинках, разберем как наполняются таблицы, начнем с LIB:
Представим, что за роутером D есть сеть X. Нам нужно от этой сетки обратиться к сетке роутера A. Как это делается ?
Роутер C у нас является edge LSR (не все интерфейсы mpls), этот роутер создает локальную метку с номером 47 для сети X, после чего эту метку по протоколу LDP распространяет своим соседям: B и E.
B создает локальную метку 25, а E — 47 и так же все это распространяется своим соседям.
Роутер А получает метку 25 от соседа B, и формирует локальную метку 12 для этого маршрута, но так как это пограничный роутер, то эта метка отбрасывается, и дальше все идет по обычному IP forwarding.
LFIB:
После того как таблица LIB заполнена, выбираются лучшие записи и помещаются в LFIB.
Лучшие маршруты определяются на основе IGP протокола.
FIB:
На edge роутерах, к маршруту мы должны привязать метку:
Далее рассмотрим сходимость MPLS.