Nəzəri əsaslar və memarlıq

LDP (Label Distribution Protocol, RFC 5036) IGP prefiksləri (FEC) ilə MPLS etiketləri arasında əlaqə qurur. İş prosesi iki mərhələdən ibarətdir: Discovery (aşkarlama) və Session (sessiya). Discovery mərhələsində router interfeysdən 224.0.0.2 ünvanına UDP Hello paketləri (port 646) göndərir. Paketdə LDP Identifier (məsələn, 10.255.0.1:0) və Transport Address ötürülür. Routerlər bir-birini gördükdən sonra ikinci mərhələyə keçirlər: daha böyük ünvanlı router qonşunun Transport Address-inin TCP 646 portuna qoşulur (defolt olaraq LSR-ID, adətən Loopback0). TCP üzərindən Initialization parametrləri razılaşdırılır və Label Mapping göndərilir. Əsas xəta: əgər UDP Hello keçirsə, lakin firewall TCP 646 portunu bloklayırsa və ya Loopback ünvanı IGP-də yoxdursa, LDP sessiyası açılmayacaq!

İki mərhələ: UDP discovery və TCP sessiyası

LDP (RFC 5036) iki müstəqil mərhələdə işləyir. Əvvəlcə qovşaqlar bir-birini UDP 646 ilə tapır: Hello mesajları TTL 1 ilə 224.0.0.2 (all routers on this subnet) ünvanına göndərilir, yəni yalnız birbaşa qoşulmuş linklər üzrə (basic/link discovery). Sonra qovşaqlardan biri qonşunun transport address-inə TCP 646 açır və bu TCP kanalı ilə Initialization, KeepAlive, Address, Label Mapping, Label Withdraw/Release və Notification mesajları ötürülür. UDP Hello heç nə ilə qorunmur və etiketlər haqqında heç nə bilmir, ona görə də show mpls ldp discovery-də qonşunun görünməsi işlək sessiya demək deyil.

LDP Identifier və transport address

LDP Identifier 6 baytdır: 4 baytlıq LSR-ID (adətən Loopback0 ünvanı, bizdə 10.255.0.1) və 2 baytlıq label space ID. Ethernet üçün platform-wide label space istifadə olunur, ona görə identifikator həmişə 10.255.0.1:0 olur. Transport address - qonşuların TCP göndərdiyi ünvandır. O, Hello daxilindəki könüllü IPv4 Transport Address TLV ilə ötürülür; TLV yoxdursa, Hello-nun mənbə ünvanı (interfeys ünvanı) istifadə olunur. Cisco-da transport address standart olaraq LSR-ID-yə bərabərdir, Junos-da router-id-dir (transport-address router-id), Huawei-də LSR-ID-dir (mpls lsr-id). Nəticə: LSR-ID loopback-i IGP üzərindən hər iki istiqamətdə əlçatan olmalıdır. Tipik nasazlıq: Hello-lar gəlir, discovery qonşunu görür, lakin TCP qurulmur, çünki loopback OSPF/IS-IS-də elan edilməyib və ya VRF-dədir.

Hello: parametrlər və taymerlər

Hello Common Hello Parameters TLV daşıyır: hold time (saniyə), T bayrağı (targeted hello) və R bayrağı (qarşılıq olaraq targeted hello göndərmək xahişi). Hold dəyəri 0 "standart" deməkdir (RFC-yə görə link üçün 15 s, targeted üçün 45 s), 0xFFFF - sonsuzluq. Göndərmə intervalı adətən hold/3 olur. Praktik dəyərlər: Cisco, Junos və Huawei-də link hello 5 s / hold 15 s; Cisco-da targeted hello 10 s / hold 90 s (show mpls ldp parameters-ə görə), RFC-yə görə 15 s / 45 s. Hello adjacency Hello-lar gəldiyi müddətcə yaşayır; sessiya bu qonşu ilə sonuncu adjacency itdikdə və ya KeepAlive hold bitdikdə bağlanır. Buna görə eyni LSR cütü arasındakı iki paralel link iki adjacency və bir TCP sessiyası verir.

TCP-ni kim açır: active və passive

İki qovşağın transport address-ləri işarəsiz ədədlər kimi müqayisə olunur. Böyük ünvanlı qovşaq active-dir: o, passive qovşağın 646 portuna TCP bağlantısı açır (lokal port müvəqqətidir). Passive qovşaq yalnız 646-da dinləyir. Beləliklə, 10.255.0.1 və 10.255.0.11 cütü üçün active tərəf P1-dir (10.255.0.11), PE1 isə passive-dir. Bu diaqnostikaya təsir edir: ACL və ya CoPP müvəqqəti portdan 646-ya TCP-ni, əks istiqamətdə isə 646-dan müvəqqəti porta TCP-ni buraxmalıdır. Yarış nəticəsində iki bağlantı açılarsa, RFC yalnız birini saxlamağı tələb edir.

Sessiyanın inisializasiyası: vəziyyətlər

RFC 5036-ya görə sessiya vəziyyətləri: NON EXISTENT, INITIALIZED, OPENREC, OPENSENT, OPERATIONAL. Active qovşaq Initialization göndərir (protokol versiyası 1, KeepAlive time, A bayrağı - DU və ya DoD, D bayrağı - loop detection, Path Vector Limit, Max PDU Length - standart 4096, Receiver LDP Identifier). Passive qovşaq məhz öz LDP ID-sini aldığını yoxlayır, Initialization + KeepAlive ilə cavab verir; active tərəfdən KeepAlive-dan sonra hər iki tərəf OPERATIONAL olur və Address ilə Label Mapping mübadiləsi dərhal başlayır. Parametrlər uyğun gəlmədikdə Notification göndərilir (məsələn, Bad LDP Identifier və ya Session Rejected) və qovşaq backoff işə salır: Cisco-da interval 15-dən 120 s-ə qədər artır (mpls ldp backoff). Razılaşdırılmış KeepAlive hold standart olaraq Cisco-da 180 s (interval 60 s), Junos-da 30 s-dir (interval 10 s).

Mesaj tipləri

Hello (0x0100) UDP ilə ötürülür. TCP üzərindən: Initialization (0x0200), KeepAlive (0x0201), Address (0x0300) və Address Withdraw (0x0301), Label Mapping (0x0400), Label Request (0x0401), Label Withdraw (0x0402), Label Release (0x0403), Label Abort Request (0x0404), Notification (0x0001). Address mesajı vacibdir: o, qonşunun bütün interfeys ünvanlarını bildirir ki, LSR IGP next hop-u (link ünvanını) LDP qonşusu ilə uyğunlaşdıra bilsin. Address mesajı olmadan bindings gəlir, lakin istifadə olunmur.

Targeted LDP

Targeted Hello konkret ünvana unicast göndərilir (TTL 1 deyil), ona görə qonşu birbaşa qoşulmuş olmaya bilər. İstifadə sahələri: L2VPN pseudowire (LDP üzərindən VPWS/VPLS), LDP session protection, RSVP-TE tuneli üzərində LDP. Qəbul edən tərəf targeted hello-ya icazə verməlidir (Cisco-da mpls ldp discovery targeted-hello accept, Junos-da protocols ldp daxilində lo0 interfeysi və lazım gələrsə strict-targeted-hellos; Huawei-də mpls ldp remote-peer təşəbbüskar tərəfdə konfiqurasiya olunur). Hello-dakı R bayrağı qarşı tərəfdən öz targeted hello-su ilə cavab verməsini xahiş edir.

Autentifikasiya və təhlükəsizlik

Sessiyanın qorunması TCP MD5 option (RFC 2385) ilə həyata keçirilir, açar hər qonşu LDP ID-si üçün təyin olunur. UDP Hello-nu qorumaq mümkün deyil: açarlar üst-üstə düşmədikdə discovery adjacency-ni göstərməyə davam edir, sessiya isə qalxmır və logda yanlış MD5 digest haqqında TCP mesajları görünür. Əlavə olaraq, xarici interfeyslərdə UDP/TCP 646 filtrlənir və LDP yalnız infrastruktur interfeyslərində aktivləşdirilir.