Протокол LDP (Label Distribution Protocol) встречается в конфигурации почти любой сети провайдера, где используется MPLS: без него маршрутизаторы не смогут обменяться метками, и трафик между узлами пойдёт по обычной IP-маршрутизации или не пойдёт вовсе. Если на стыке двух LSR-соседей сессия LDP не поднимается, типичный симптом — VPN-сервисы поверх MPLS перестают работать, хотя IGP-соседство и связность по IP при этом в порядке.
Разберёмся, что именно делает этот протокол, какие сообщения он использует, как проверить его состояние на оборудовании и где чаще всего кроются причины проблем. Материал ориентирован на тех, кто впервые сталкивается с MPLS-сетями или диагностирует отказ LDP на маршрутизаторах Cisco, Juniper, Huawei или MikroTik.
Назначение LDP в архитектуре MPLS
MPLS (Multiprotocol Label Switching) пересылает пакеты не по IP-адресу назначения, а по короткой метке, которую маршрутизаторы навешивают на пакет. Но чтобы коммутация по меткам работала, каждый узел сети должен знать, какая метка соответствует какому префиксу. Именно эту задачу решает LDP — он распределяет привязки «метка ↔ префикс» между соседними маршрутизаторами.
Протокол описан в RFC 5036 и работает поверх двух транспортов: обнаружение соседей идёт через UDP (multicast-hello), а сама сессия устанавливается по TCP между адресами соседей. После установления сессии маршрутизаторы начинают обмениваться сообщениями о метках для всех префиксов, известных из таблицы маршрутизации.
Важно понимать границу ответственности: LDP не строит маршруты сам. Он опирается на таблицу, которую сформировал IGP-протокол (OSPF или IS-IS). Поэтому метки распределяются строго вдоль путей, выбранных внутренним протоколом маршрутизации, — это называется «hop-by-hop» распределение.
LDP не маршрутизирует трафик, а лишь распределяет метки по путям, которые уже выбрал IGP (OSPF или IS-IS). Без работающего IGP сессии LDP бесполезны.
Как устанавливается сессия LDP
Процесс состоит из двух этапов: обнаружение соседей и установление сессии. На первом этапе маршрутизатор рассылает Hello-сообщения на multicast-адрес из включённых интерфейсов. Получив ответное Hello, узлы узнают друг о друге и переходят ко второму этапу — установлению TCP-сессии между своими LSR ID (обычно это адрес loopback-интерфейса).
После установления сессии соседи обмениваются сообщениями инициализации, согласуя параметры: версию протокола, таймеры keepalive, диапазон меток. Дальше начинается собственно обмен привязками меток.
- 🔍 Discovery — периодические UDP Hello для поиска соседей на линке.
- 🤝 Session establishment — TCP-сессия между LSR ID соседей.
- 🏷️ Label advertisement — рассылка привязок меток к префиксам.
- ⏱️ Keepalive — поддержание сессии, разрыв при истечении таймера.
Если TCP-сессия не устанавливается, хотя Hello проходят, в первую очередь проверьте доступность loopback-адресов друг друга по IGP — это самая частая причина «полурабочего» состояния, когда соседи видятся, а сессии нет.
Режимы распределения и удержания меток
LDP поддерживает несколько режимов работы, и их понимание помогает читать чужие конфигурации и предсказывать поведение сети.
- 📤 Downstream Unsolicited (DU) — маршрутизатор сам рассылает метки соседям, не дожидаясь запроса. Стандартный режим на большинстве платформ.
- 📥 Downstream on Demand (DoD) — метка выдаётся только по запросу. Встречается редко, в основном на старых ATM-коммутаторах.
- 🗂️ Liberal / Conservative retention — хранить ли метки от соседей, которые не являются next-hop. Liberal-режим ускоряет сходимость при смене маршрута.
На практике почти везде используется связка DU + Liberal + Independent control. Если на двух соседях режимы совместимы, сессия поднимется без дополнительной настройки — несовпадение режимов анонсирования обычно не блокирует сессию, но может менять поведение при перестроении путей.
Базовая настройка и проверка
Точный синтаксис зависит от вендора и версии ОС, поэтому сверяйтесь с документацией на вашу модель. Общая логика везде одинаковая: включить MPLS/LDP глобально, задать router-id (loopback), активировать LDP на транзитных интерфейсах.
Пример для Cisco IOS (минимальная конфигурация):
mpls ip
mpls ldp router-id Loopback0
!
interface GigabitEthernet0/0
mpls ip
После настройки обязательно проверьте состояние соседства и привязок. На Cisco это делается командами show mpls ldp neighbor и show mpls ldp bindings, на Juniper — show ldp session и show ldp database. Отсутствие соседа в выводе при корректной конфигурации — повод проверять фильтры и маршрутизацию loopback-адресов.
☑️ Диагностика LDP-сессии
⚠️ Внимание: LDP использует порты
UDP 646(hello) иTCP 646(сессия). Если между соседями есть ACL или файрвол, блокирующий эти порты, сессия не поднимется, причём Hello могут проходить, а TCP — нет. Проверяйте фильтры в обе стороны.
Типичные проблемы и их диагностика
Самая частая жалоба звучит так: «IGP работает, LDP — нет». Разложим возможные причины по вероятности. Первая — недоступность адресов, на которых строится TCP-сессия: loopback не анонсируется в IGP или попал под summarization. Вторая — фильтрация портов 646 на промежуточных устройствах или на самом маршрутизаторе. Третья — несовпадение паролей, если включена MD5-аутентификация сессии.
Отдельный класс проблем — рассинхронизация LDP и IGP. Когда линк восстанавливается, IGP может сойтись раньше, чем LDP обменяется метками, и трафик начнёт дропаться, потому что меток ещё нет. Для этого существует механизм LDP-IGP synchronization, который заставляет IGP ждать готовности LDP, прежде чем объявлять линк рабочим.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Сосед виден, сессии нет | Недоступен LSR ID соседа | Маршрут до loopback в IGP |
| Сессия постоянно падает | Ошибка MD5-пароля или таймеров | Логи, настройки аутентификации |
| Сессия есть, меток нет | Фильтрация анонсов (label filtering) | Настройки advertisement ACL |
| Трафик дропается после аварии | Рассинхронизация LDP и IGP | Включён ли LDP-IGP sync |
| Сосед не обнаруживается | LDP не включён на интерфейсе | Конфигурация интерфейса с двух сторон |
При первичной диагностике всегда начинайте с простого: ping до loopback-адреса соседа с source loopback. Если пинг не проходит — проблема в IGP или фильтрах, а не в самом LDP.
LDP и альтернативы: RSVP-TE, BGP-LU, SR
LDP — не единственный способ распределения меток. Для инженерии трафика (TE) применяется RSVP-TE, который строит туннели с резервированием и явными путями. Метки для междоменных сценариев может раздавать BGP-LU (labeled unicast). А относительно новый подход — Segment Routing, где метки распространяются самим IGP и отдельный протокол сигнализации вообще не нужен.
Это не значит, что LDP устарел: он остаётся основой огромного числа действующих сетей благодаря простоте. Но при проектировании новой сети стоит оценить, не проще ли сразу использовать SR-MPLS — он убирает целый класс проблем с рассинхронизацией протоколов.
Почему LDP называют «unsolicited downstream»
Термин означает, что маршрутизатор, находящийся «ниже по потоку» (ближе к получателю префикса), сам инициирует рассылку метки «вверх» — всем соседям, не дожидаясь запросов. Входящий маршрутизатор затем выбирает метку от того соседа, который является next-hop по таблице IGP.
Безопасность LDP
Базовый LDP не шифрует и не подписывает сообщения. Любой узел, получивший доступ к транзитному сегменту, теоретически может попытаться установить фальшивую сессию и подменить привязки меток, перенаправив трафик. Поэтому в реальных сетях применяют несколько защитных мер.
Во-первых, MD5-аутентификация TCP-сессий (TCP-AO или классический TCP MD5) между известными соседями. Во-вторых, фильтрация: принимать Hello и сессии только с ожидаемых адресов. В-третьих, на границах сети LDP вообще не должен быть включён на клиентских интерфейсах — это базовая гигиена конфигурации.
⚠️ Внимание: не включайте LDP на интерфейсах, выходящих за пределы вашего домена доверия (клиентские порты, пиринговые стыки). Посторонний сосед сможет повлиять на таблицу меток и перехватить или нарушить трафик.
Минимальный набор защиты LDP: MD5-аутентификация сессий, ACL на порты 646 и отключение протокола на всех нетранзитных интерфейсах.
FAQ: частые вопросы про LDP
Чем LDP отличается от MPLS?
MPLS — это общая технология коммутации по меткам, а LDP — лишь один из протоколов, которые эти метки распределяют. MPLS может работать и с RSVP-TE, и с BGP-LU, и с Segment Routing без LDP.
Работает ли LDP без OSPF или IS-IS?
Технически сессия может подняться и при статических маршрутах, но так делать не принято: LDP следует за таблицей маршрутизации, и без динамического IGP сеть теряет отказоустойчивость и предсказуемость.
Какие порты использует LDP?
Обнаружение соседей — UDP-порт 646 на multicast-адрес, сама сессия — TCP-порт 646 между LSR ID соседей. Оба должны быть открыты на пути между узлами.
Что такое LSR ID и зачем он нужен?
Это идентификатор маршрутизатора в LDP, обычно адрес loopback-интерфейса. На него устанавливается TCP-сессия, поэтому адрес должен быть уникальным, стабильным и доступным через IGP.
Почему сессия LDP не поднимается, хотя сосед обнаружен?
Чаще всего недоступен loopback-адрес соседа (проверьте IGP), заблокирован TCP 646 фильтром или не совпадают пароли MD5-аутентификации. Начните диагностику с ping до LSR ID соседа.