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

MPLS Data Plane-də əsas əməliyyatlar Push, Swap və Pop-dur. Push giriş Ingress PE-də icra olunur: təmiz IP paketə xidmət etiketi (MP-BGP ilə), sonra isə nəqliyyat etiketi (LDP və ya SR ilə) əlavə edilir. Swap tranzit P routerlərində icra olunur: daxil olan üst etiket LFIB cədvəlində tapılır və növbəti hop üçün çıxan etiketlə əvəzlənir (Swap). Pop üst etiketi silir. Əsas optimizasiya Penultimate Hop Popping (PHP, RFC 3031) mexanizmidir: sondan əvvəlki router xarici nəqliyyat etiketini vaxtından əvvəl silir. Bu, çıxış PE-nin Implicit Null (dəyəri 3) elan etməsi ilə baş verir. Nəticədə çıxış PE paketi yalnız xidmət etiketi ilə qəbul edir və ikiqat axtarış (Double Lookup) əvəzinə tək axtarış icra edir. Əgər QoS TC dəyərinin sona qədər qorunması tələb olunarsa, Explicit Null (IPv4 üçün 0, IPv6 üçün 2) elan edilir.

Etiket steki üzərində üç əməliyyat

MPLS paketi stekin üst qeydinə görə ötürür (arxitektura - RFC 3031, 32-bitlik qeydin formatı - RFC 3032: Label 20 bit, TC 3 bit, S 1 bit, TTL 8 bit). LSR-in istənilən qərarı üç əməliyyatdan birinə gəlib çıxır:

ƏməliyyatHarada icra olunurSteklə nə edirHarada baxmalı
PushIngress LER (PE1); həmçinin tunelin başlanğıcı (TE, FRR)IP paketinin və ya mövcud stekin üzərinə bir və ya bir neçə qeyd əlavə edirIngress FIB/CEF: prefiksin çıxış etiketi var
SwapTranzit LSR (P1)Üst etiketi bu FEC üçün növbəti qonşunun (downstream) elan etdiyi etiketlə əvəz edirLFIB: giriş etiketi -> çıxış etiketi, interfeys, next-hop
PopSondan əvvəlki LSR (PHP) və ya egressÜst qeydi silir; əgər o sonuncu idisə (S=1), paket adi IP kimi çıxırLFIB: çıxış qiyməti Pop Label / Pop / 3

Push barədə qərarı FIB verir (IP ünvanı üzrə longest prefix match), Swap və Pop barədə qərarı LFIB verir (etiket üzrə dəqiq uyğunluq). Buna görə tranzit P marşrutlaşdırıcısına BGP cədvəli lazım deyil: LFIB kifayətdir.

Rezerv edilmiş 0-15 etiketləri

0-15 etiketləri FEC-lərə ayrılmır (RFC 3032, RFC 7274):

QiymətAdMənası
0IPv4 Explicit NullEtiket silinməlidir, sonra IPv4 axtarışı aparılır; qeyd xətdə qalır
1Router AlertPaketi control plane-ə ver, lazım olarsa sonra irəli ötür
2IPv6 Explicit NullIPv6 üçün eyni
3Implicit NullHeç vaxt paketdə görünmür; LDP/RSVP-də siqnaldır: "upstream, etiketi özün sil"
7ELIEntropy Label Indicator (RFC 6790)
13GALGeneric Associated Channel Label (RFC 5586)
15ExtensionEtiket fəzasının genişləndirilməsi (RFC 7274)

3 etiketi "virtualdır": LDP Label Mapping-də (mesaj tipi 0x0400) o, Generic Label TLV-də (tip 0x0200) adi 20-bitlik qiymət kimi ötürülür, lakin xətdəki paketlərdə yoxdur. Dinamik etiketlər defolt olaraq Cisco IOS-XE-də 16-dan, Junos-da (LDP) təxminən 299776-dan, Huawei VRP-də 1024-dən başlayır; laboratoriyanızda dəqiq rəqəmlər fərqli olacaq, ona görə giriş -> çıxış zəncirini öz bindings-inizdən yoxlayın.

PHP: sondan əvvəlki qovşaqda nə baş verir

FEC üçün egress LSR (burada 10.255.0.2/32 üçün PE2) Label Mapping-də upstream qonşuya hansı etiketi elan edəcəyini özü seçir. Öz connected prefiksləri, o cümlədən loopback üçün defolt olaraq Implicit Null (3) elan edilir. Sondan əvvəlki qovşaq P2, 3 etiketli mapping alaraq LFIB-də "giriş etiketi -> Pop, next-hop PE2" qeydini proqramlaşdırır. Paket P2-yə çatanda o, etiketi silir və paketi PE2-yə etiketsiz göndərir (əgər altında başqa qeyd, məsələn VPN etiketi varsa, indi o üstdədir).

Niyə lazımdır. PHP olmasa egress PE2 nəqliyyat etiketli kadr alar, LFIB-də 1-ci axtarışı ("sil və IP-yə bax") və sonra FIB-də 2-ci axtarışı (IP) aparardı. PHP ilə yalnız bir axtarış qalır. L3VPN-də qazanc daha aydındır: PE2 yalnız VPN etiketi olan kadr alır və nəqliyyat etiketinə pipeline keçidi sərf etmədən dərhal lazımi VRF-ə düşür.

"FEC və elan edən üzrə" prinsipi: konkret FEC üçün hansı etiket tipinin elan olunacağını egress müəyyən edir. PE2-nin loopback-i 3 etiketi ilə, PE1-in loopback-i də 3 ilə elan olunur, lakin PHP-ni müxtəlif qovşaqlar icra edir: 10.255.0.2/32 üçün P2, 10.255.0.1/32 üçün P1. Buna görə explicit null-ın yalnız PE2-də aktivləşdirilməsi PE2 istiqamətində davranışı dəyişir və PE1 istiqamətindəki trafikə təsir etmir.

Explicit Null: xətdə nə dəyişir

Egress 0 etiketini (IPv4 Explicit Null) elan edibsə, P2 etiketi silmir, 0-a Swap edir. P2-PE2 xəttinə paket [0 | IP] kimi çıxır: EtherType 0x8847, Label=0, S=1 olan bir MPLS qeydi, TTL giriş qeydinə nisbətən bir vahid azalmış. PE2 0 etiketini görür, silir və IP axtarışı aparır; bu qeydin TC və TTL-i ona əlçatandır. Əgər sıfır etiketin altında başqa qeyd varsa (0 etiketində S=0), PE2 onu sildikdən sonra növbəti qeydlə işləyir.

Qiymət: egress əlavə pipeline keçidi icra edir, P2-PE2 xəttinə hər paket üçün 4 bayt əlavə olunur (MTU-ya diqqət edin). Fayda: egress xarici qeydin TC-sini (və TTL-ni) alır.

TC/QoS: explicit null nə üçün lazımdır

PHP ilə xarici qeyd P2-də TC sahəsi (3 bit) ilə birlikdə silinir və egress paketi nəqliyyat etiketinin provayder TC-sinə görə təsnif edə bilmir. DiffServ tunelləmə modelləri (RFC 3270):

  • Uniform: TC Push zamanı DSCP-dən kopyalanır, Pop zamanı geriyə DSCP-yə yazılır. PHP ilə işləyir, lakin müştəri markalanması provayder tərəfindən dəyişdirilə bilər.
  • Short Pipe: egress müştəri DSCP-si üzrə (IP başlığı və ya daxili qat) təsnifat aparır; provayder TC-si lazım deyil. PHP ilə uyğundur; L3VPN üçün ən çox yayılmış variantdır.
  • Pipe: egress operatorun sinfi üzrə çıxış interfeysi siyasətini müştəri DSCP-sini dəyişmədən tətbiq etmək üçün provayder TC-sini görməlidir. PHP bunun üçün uyğun deyil: explicit null lazımdır, 0 etiketi TC-ni egress-ə çatdırır.

Push, swap və pop zamanı TTL

Ingress IP TTL-i MPLS qeydinə kopyalayır (propagate), 1 azaldaraq; hər swap TTL-i 1 azaldır; pop (PHP) zamanı qiymət IP TTL-ə qaytarılır. Traceroute üçün nəticə: Uniform rejimində nüvə (P1, P2) hop kimi görünür. Propagation söndürülübsə (Cisco no mpls ip propagate-ttl, Junos no-propagate-ttl), traceroute P marşrutlaşdırıcılarını göstərmir. Tranzit LSR-də TTL 0 olduqda paket səssizcə atılmır: P ICMP Time Exceeded yaradır.

Əməliyyatları necə müşahidə etməli

  1. Ingress PE1 FIB: 10.255.0.2/32-nin çıxış etiketi var (CEF nexthop-da etiketi göstərir; Junos-da inet.3-də Push) - bu Push-dur.
  2. P1 LFIB: giriş etiketi -> çıxış etiketi, interfeys və next-hop - bu Swap-dır.
  3. P2 LFIB: çıxış qiyməti Pop Label (Cisco), Pop (Junos), 3 (Huawei) - bu PHP-dir; explicit null ilə Pop əvəzinə: explicit-n (Cisco), Swap 0 (Junos), 0 (Huawei).
  4. LDP bindings: PE2-də local binding imp-null (dəyişiklikdən sonra exp-null), P2-də PE2-dən remote binding 3-dür (dəyişiklikdən sonra 0).
  5. Capture (Wireshark, mpls filtri): PE1-P1 üzərində [17] qeydi, P1-P2 üzərində [18] qeydi, P2-PE2 üzərində explicit null olmadan MPLS-siz kadr (EtherType 0x0800), explicit null ilə Label=0 qeydi. TTL hər seqmentdə bir vahid azalır.

Platformalar və məhdudiyyətlər

  • Cisco IOS-XE: qlobal rejimdə mpls ldp explicit-null; marşrutlaşdırıcının egress kimi elan etdiyi etiketlərə tətbiq olunur. Komanda prefiks filtrini qəbul edir (for <prefix-acl>); sintaksisi öz buraxılışınızda yoxlayın.
  • Juniper Junos: set protocols ldp explicit-null. set protocols mpls explicit-null komandası RSVP siqnalizasiyasına aiddir; qarışdırmayın.
  • Huawei VRP: egress davranışı label advertise { explicit-null | implicit-null | non-null } komandası ilə təyin olunur; non-null real etiket və PHP-nin olmaması deməkdir.
  • MikroTik RouterOS v7: /mpls/ldp daxilində use-explicit-null parametri (defolt no).

Nasazlıq rejimləri

  • Son xətdəki capture "çılpaq" IP göstərir və mühəndis MPLS-in sındığını düşünür: PHP ilə bu normaldır; əvvəlki xəttə baxmaq lazımdır.
  • Explicit null yalnız bir PE-də aktivdir: TC egress-ə yalnız bir istiqamətdə çatır, QoS asimmetrik olur.
  • PE2 Implicit Null yox, adi etiket elan edir (Huawei-də non-null): P2 Pop əvəzinə Swap edir, xətdə əlavə 4 bayt və əlavə axtarış yaranır.
  • MTU-su 1500 olan və ehtiyatı olmayan P2-PE2 xətti: explicit null-a keçdikdən sonra hər paket 4 bayt artır və DF=1 olan böyük kadrlar itirilməyə başlayır.
  • İllüstrasiyalarla müqayisə: etiket nömrələri platformalar arasında fərqlidir; rəqəmləri yox, zəncirin məntiqini yoxlayın.

Memarlıq sxemi və topologiya

text
+---------+   +----------------------+   +--------------------+   +--------------------+   +--------------------+   +---------+
|  CE-1   |-->|   PE-1 (Ingress)     |-->|   P-1 (Transit)    |-->| P-2 (Penultimate)  |-->|    PE-2 (Egress)   |-->|  CE-2   |
| Cust IP |   | PUSH Service: 24001  |   | SWAP: 16002->16012 |   | POP transport(PHP) |   | POP Service: 24001 |   | Cust IP |
|         |   | PUSH Transport:16002 |   | Core LSR switching |   | sends [24001 | IP] |   | Lookup in VRF      |   |         |
+---------+   +----------------------+   +--------------------+   +--------------------+   +--------------------+   +---------+

Trafik axını və etiket steki sxemi

text
End-to-End Packet Lifecycle & Label Stack:
1. CE-1 ---> PE-1:  [IP Header: Src 192.168.10.10, Dst 192.168.20.10 | Payload]
2. PE-1 ---> P-1:   [Outer Transport: 16002 | S:0] [Inner Service: 24001 | S:1] [IP Payload] (PUSH)
3. P-1  ---> P-2:   [Outer Transport: 16012 | S:0] [Inner Service: 24001 | S:1] [IP Payload] (SWAP)
4. P-2  ---> PE-2:  [Inner Service: 24001 | S:1] [IP Payload] (Penultimate Hop Popping - PHP)
5. PE-2 ---> CE-2:  [IP Header: Src 192.168.10.10, Dst 192.168.20.10 | Payload] (Native IP)

Vəziyyətlər və parametrlər cədvəli