1. Topoloji ve Amaç
Nokia SR OS tarafında Türkçe kaynak çok az, ben de lab’da öğrendiklerimi buraya not alıyorum. Bu yazıda sade bir MPLS çekirdeği kuruyoruz ve iki şeyi göstereceğiz:
- IGP ile LDP birlikte nasıl çalışır? OSPF loopback’leri birbirine öğretir, LDP de bu rotaların üstüne etiket (label) bindirerek PE’ler arasında bir LSP (transport tüneli) oluşturur.
- Etiketin amacı nedir? Paket çekirdekte IP lookup ile değil, etiket ile ilerler. Etiketin nerede takıldığını (push), nerede değiştiğini (swap), nerede söküldüğünü (pop) adım adım göreceğiz.
Kargo analojisi
IP routing’i, her aktarma merkezinde kolinin üzerindeki adresi okuyup “bu nereye gidiyordu?” diye düşünmeye benzetebiliriz. MPLS’te ise kolinin başlangıç merkezinde üzerine bir barkod yapıştırılır. Aradaki merkezler adresi okumaz, sadece barkoda bakar ve bandı yönlendirir. LDP de komşu merkezlerin birbirine “bu barkod bu adrese gider” bilgisini dağıttığı protokoldür.
Topoloji

| Cihaz | Rol | Loopback (System) |
|---|---|---|
| CE1 | Müşteri ucu | 1.1.1.1 |
| PE1 | Provider Edge | 2.2.2.2 |
| P | Provider (core) | 3.3.3.3 |
| PE2 | Provider Edge | 4.4.4.4 |
| CE2 | Müşteri ucu | 5.5.5.5 |
| Link | Subnet | Arayüzler |
|---|---|---|
| CE1 - PE1 | 192.168.10.0/24 | CE1 1/1/1 (.1) - PE1 1/1/1 |
| PE1 - P | 10.23.23.0/24 | PE1 1/1/2 (.2) - P 1/1/2 (.3) |
| P - PE2 | 10.34.34.0/24 | P 1/1/1 (.3) - PE2 1/1/1 (.4) |
| PE2 - CE2 | 192.168.10.0/24 | PE2 1/1/2 - CE2 1/1/2 (.2) |
Provider tarafında (PE1, P, PE2) IGP olarak OSPF çalışıyor. Hedefimiz PE1 (2.2.2.2) ile PE2 (4.4.4.4) arasında LDP ile bir LSP kurmak.
2. Mevcut Durum: OSPF ve Loopback Erişilebilirliği
LDP’nin tek başına bir yol bulma yeteneği yok. Etiket dağıtırken IGP’nin kurduğu rotalara bakar: “bu prefix’e giden next-hop kim?” sorusunun cevabını routing tablosundan alır. Yani önce IGP’nin düzgün çalışması şart. Burada üç router da tek area (0.0.0.0) içinde OSPF çalıştırıyor.
OSPF konfigürasyonu
Üç router’da da yapı aynı: tek area (0.0.0.0), system interface’i (loopback’i duyurmak için) ve core’a bakan interface’ler. Link’leri point-to-point yaptık, böylece komşulukta DR/BDR seçimi yapılmıyor ve komşuluk daha hızlı oturuyor.
PE1
A:PE1-R2>config>router>ospf# info
----------------------------------------------
area 0.0.0.0
interface "system"
no shutdown
exit
interface "toP"
interface-type point-to-point
no shutdown
exit
exit
no shutdown
----------------------------------------------
P
A:P-R3>config>router>ospf# info
----------------------------------------------
area 0.0.0.0
interface "system"
no shutdown
exit
interface "toPE1"
interface-type point-to-point
no shutdown
exit
interface "toPE2"
interface-type point-to-point
no shutdown
exit
exit
no shutdown
PE2
A:PE2-R4>config>router>ospf# info
----------------------------------------------
area 0.0.0.0
interface "system"
no shutdown
exit
interface "toP"
interface-type point-to-point
no shutdown
exit
exit
no shutdown
CE’lere bakan interface’leri (PE1 1/1/1, PE2 1/1/2) OSPF’e eklemedik. Müşteri tarafı provider IGP’sine karışmıyor.
OSPF komşulukları
PE1, P ve PE2 üzerinde komşulukların hepsi Full durumda:
A:PE1-R2# show router ospf neighbor
===============================================================================
Rtr Base OSPFv2 Instance 0 Neighbors
===============================================================================
Interface-Name Rtr Id State Pri RetxQ TTL
Area-Id
-------------------------------------------------------------------------------
toP 3.3.3.3 Full 1 0 31
0.0.0.0
-------------------------------------------------------------------------------
No. of Neighbors: 1
===============================================================================
A:P-R3# show router ospf neighbor
===============================================================================
Rtr Base OSPFv2 Instance 0 Neighbors
===============================================================================
Interface-Name Rtr Id State Pri RetxQ TTL
Area-Id
-------------------------------------------------------------------------------
toPE1 2.2.2.2 Full 1 0 33
0.0.0.0
toPE2 4.4.4.4 Full 1 0 36
0.0.0.0
-------------------------------------------------------------------------------
No. of Neighbors: 2
A:PE2-R4# show router ospf neighbor
===============================================================================
Rtr Base OSPFv2 Instance 0 Neighbors
===============================================================================
Interface-Name Rtr Id State Pri RetxQ TTL
Area-Id
-------------------------------------------------------------------------------
toP 3.3.3.3 Full 1 0 35
0.0.0.0
-------------------------------------------------------------------------------
No. of Neighbors: 1
P router’ı ortada olduğu için iki komşusu var (PE1 ve PE2), uçtaki PE’lerin ise yalnızca birer komşusu var.
Route tablosu
PE1’in route tablosuna bakalım:
A:PE1-R2# show router route-table
===============================================================================
Route Table (Router: Base)
===============================================================================
Dest Prefix[Flags] Type Proto Age Pref
Next Hop[Interface Name] Metric
-------------------------------------------------------------------------------
2.2.2.2/32 Local Local 00h01m45s 0
system 0
3.3.3.3/32 Remote OSPF 00h00m51s 10
10.23.23.3 100
4.4.4.4/32 Remote OSPF 00h00m31s 10
10.23.23.3 200
10.23.23.0/24 Local Local 00h00m55s 0
toP 0
10.34.34.0/24 Remote OSPF 00h00m51s 10
10.23.23.3 200
-------------------------------------------------------------------------------
No. of Routes: 5
Burada dikkat edeceğimiz yer şu: PE1, PE2’nin loopback’ini (4.4.4.4/32) OSPF ile öğrenmiş, next-hop 10.23.23.3 (P router’ı) ve metric 200 (iki hop, hop başına 100). LDP’nin etiket dağıtacağı FEC’ler tam olarak bu loopback prefix’leri olacak.
Ama bu noktada IP erişilebilirliği var, henüz MPLS yok. PE1’den 4.4.4.4’e giden paket P’de normal IP lookup ile yönlendiriliyor. Sıradaki bölümde LDP’yi açıp bu tabloya etiketlerin nasıl bindirildiğine bakacağız.
3. LDP Konfigürasyonu
LDP konfigürasyonu aslında çok kısa. Yapmamız gereken tek şey, LDP’yi router’da açmak ve hangi interface’lerden komşu aranacağını söylemek. Biz sadece core’a bakan interface’leri ekliyoruz, CE’ye bakan interface’lere LDP açmıyoruz. Müşteriye etiket vermenin bir anlamı yok.
LDP, session’ı kurarken varsayılan olarak system (loopback) adresini kullanır. Yani iki router birbirinin loopback’ine ulaşabilmeli. Bir önceki bölümde OSPF ile bunu sağlamıştık, LDP’nin neden IGP’ye ihtiyaç duyduğu tam olarak burada görülüyor.
LDP açıldığında router, interface-parameters altındaki her interface’i dual-stack olarak oluşturuyor. Çıktıda ipv4 bloğunu ve fec-type-capability altında IPv6 FEC’lerinin kapalı (disable) olduğunu görüyoruz. Biz sadece IPv4 kullandığımız için burası bizi ilgilendirmiyor. En alttaki targeted-session bloğu uzak (loopback’ten loopback’e) LDP session’ları içindir, servis tarafında lazım olacak.
PE1
A:PE1-R2>config>router>ldp# info
----------------------------------------------
interface-parameters
interface "toP" dual-stack
ipv4
fec-type-capability
prefix-ipv6 disable
p2mp-ipv6 disable
exit
no shutdown
exit
no shutdown
exit
exit
targeted-session
exit
no shutdown
----------------------------------------------
P
A:P-R3>config>router>ldp# info
----------------------------------------------
interface-parameters
interface "toPE1" dual-stack
ipv4
fec-type-capability
prefix-ipv6 disable
p2mp-ipv6 disable
exit
no shutdown
exit
no shutdown
exit
interface "toPE2" dual-stack
ipv4
fec-type-capability
prefix-ipv6 disable
p2mp-ipv6 disable
exit
no shutdown
exit
no shutdown
exit
exit
targeted-session
exit
no shutdown
----------------------------------------------
PE2
A:PE2-R4>config>router>ldp# info
----------------------------------------------
interface-parameters
interface "toP" dual-stack
ipv4
fec-type-capability
prefix-ipv6 disable
p2mp-ipv6 disable
exit
no shutdown
exit
no shutdown
exit
exit
targeted-session
exit
no shutdown
----------------------------------------------
Özetle her router’da iki iş yaptık: LDP’yi no shutdown ile açtık ve core’a bakan interface’leri interface-parameters altına ekledik. PE’lerde bir, P’de iki interface var.
4. LDP Durum Doğrulaması
Konfigürasyon tamam. Şimdi LDP’nin gerçekten çalıştığını üç adımda doğruluyoruz: komşuluk (hello adjacency), label dağıtımı (bindings) ve ortaya çıkan tünel (tunnel-table). Çıktıları PE1 üzerinden alıyorum.
Hello adjacency
LDP önce bağlı interface’lerden hello paketleri göndererek komşusunu bulur. Estab durumu, PE1’in P ile komşuluğunu kurduğunu gösteriyor:
A:PE1-R2# show router ldp discovery
===============================================================================
LDP IPv4 Hello Adjacencies
===============================================================================
Interface Name Local Addr State
AdjType Peer Addr
-------------------------------------------------------------------------------
toP 2.2.2.2:0 Estab
link 3.3.3.3:0
-------------------------------------------------------------------------------
No. of IPv4 Hello Adjacencies: 1
===============================================================================
AdjType link yani doğrudan bağlı komşuluk. Komşunun adresi 3.3.3.3:0, yani LDP session’ı P’nin loopback adresiyle kuruluyor. (IPv6 adjacency tablosu boş, çünkü sadece IPv4 kullanıyoruz.)
Label bindings
Komşuluktan sonra router’lar birbirine “şu prefix için şu label’ı kullan” bilgisini yollar. PE1’deki IPv4 prefix binding’leri:
A:PE1-R2# show router ldp bindings
===============================================================================
LDP IPv4 Prefix Bindings
===============================================================================
Prefix IngLbl EgrLbl
Peer EgrIntf/LspId
EgrNextHop
-------------------------------------------------------------------------------
2.2.2.2/32 131071U --
3.3.3.3:0 --
--
3.3.3.3/32 -- 131071
3.3.3.3:0 1/1/2
10.23.23.3
4.4.4.4/32 131069N 131069
3.3.3.3:0 1/1/2
10.23.23.3
-------------------------------------------------------------------------------
No. of IPv4 Prefix Bindings: 3
===============================================================================
Gerçek çıktıda IPv6, P2MP ve servis FEC tabloları da var. Hepsi
No Matching Entries Foundolduğu için burada kestim.
Sütunları okumak için:
- IngLbl (ingress label): Bu router’ın komşusuna “bu prefix’e gelmek istiyorsan bana şu label’la gel” diye verdiği label.
- EgrLbl (egress label): Komşunun bu router’a “bu prefix için bana şu label’la gönder” diye verdiği label.
- U / N:
Ulabel kullanımda,Nkullanımda değil.
Burada 131071 özel bir değer: implicit null. “Bu prefix benim, label’ı sen söküp yolla” anlamına geliyor. PE1 kendi loopback’i (2.2.2.2/32) için P’ye 131071 vermiş. P de kendi loopback’i (3.3.3.3/32) için PE1’e 131071 vermiş. Bunun neden önemli olduğunu 5. bölümde göreceğiz.
PE1’in 4.4.4.4/32 için kullanacağı egress label ise 131069, bunu P vermiş.
Tunnel table
Label’lar dağıtıldıktan sonra LDP, her FEC için bir tünel oluşturur ve bunu tunnel-table’a yazar:
A:PE1-R2# show router tunnel-table
===============================================================================
IPv4 Tunnel Table (Router: Base)
===============================================================================
Destination Owner Encap TunnelId Pref Nexthop Metric
-------------------------------------------------------------------------------
3.3.3.3/32 ldp MPLS 65537 9 10.23.23.3 100
4.4.4.4/32 ldp MPLS 65538 9 10.23.23.3 200
-------------------------------------------------------------------------------
Flags: B = BGP backup route available
E = inactive best-external BGP route
===============================================================================
İşte aradığımız şey: PE1’den PE2’nin loopback’ine (4.4.4.4/32) giden bir LDP LSP’si var. Owner ldp, encapsulation MPLS, next-hop P. Bu tünelin yolunu belirleyen OSPF (metric 200 hâlâ aynı), üzerine label’ı bindiren de LDP. Yani IGP yolu seçiyor, LDP o yola label dağıtıyor.
5. Push / Swap / Pop
Şimdi label’ın hop hop ne yaptığına bakıyoruz. Bunun için üç router’da aktif (FIB’e girmiş, kullanılan) binding’leri listeliyoruz:
show router ldp bindings active
Çıktıda Op sütunu bize o router’ın label’la ne yaptığını söylüyor.
Üç işlem
| İşlem | Ne yapar | Kargo analojisi |
|---|---|---|
| Push | Paketin üzerine label ekler | Kolinin çıkış merkezinde üzerine barkod yapıştırmak |
| Swap | Gelen label’ı, bir sonraki router’ın verdiği label ile değiştirir | Ara merkezde eski barkodu söküp bir sonraki merkezin okuyacağı yeni barkodu yapıştırmak |
| Pop | Label’ı söker | Teslimat merkezinde barkodu çıkarıp adrese göre teslim etmek |
Kritik nokta: bu işlemler PE’ler arasındaki LSP için yapılıyor. Label’ı sadece giriş PE’si (ingress PE) paketin üzerine koyar. Aradaki P router’ı (transit) IP adresine bakmaz, sadece label’a bakıp değiştirir. Çıkış tarafı (egress PE) ise label’ı söker.
Aktif binding çıktıları
PE1
A:PE1-R2# show router ldp bindings active
LDP IPv4 Prefix Bindings (Active)
===============================================================================
Prefix Op IngLbl EgrLbl
EgrNextHop EgrIf/LspId
-------------------------------------------------------------------------------
2.2.2.2/32 Pop 131071 --
-- --
3.3.3.3/32 Push -- 131071
10.23.23.3 1/1/2
4.4.4.4/32 Push -- 131069
10.23.23.3 1/1/2
4.4.4.4/32 Swap 131069 131069
10.23.23.3 1/1/2
-------------------------------------------------------------------------------
P
A:P-R3# show router ldp bindings active
LDP IPv4 Prefix Bindings (Active)
===============================================================================
Prefix Op IngLbl EgrLbl
EgrNextHop EgrIf/LspId
-------------------------------------------------------------------------------
2.2.2.2/32 Push -- 131071
10.23.23.2 1/1/2
2.2.2.2/32 Swap 131070 131071
10.23.23.2 1/1/2
3.3.3.3/32 Pop 131071 --
-- --
4.4.4.4/32 Push -- 131071
10.34.34.4 1/1/1
4.4.4.4/32 Swap 131069 131071
10.34.34.4 1/1/1
-------------------------------------------------------------------------------
PE2
A:PE2-R4# show router ldp bindings active
LDP IPv4 Prefix Bindings (Active)
===============================================================================
Prefix Op IngLbl EgrLbl
EgrNextHop EgrIf/LspId
-------------------------------------------------------------------------------
2.2.2.2/32 Push -- 131070
10.34.34.3 1/1/1
2.2.2.2/32 Swap 131070 131070
10.34.34.3 1/1/1
3.3.3.3/32 Push -- 131071
10.34.34.3 1/1/1
4.4.4.4/32 Pop 131071 --
-- --
-------------------------------------------------------------------------------
Üç router’ın çıktısını GNS3 ekranında yan yana görmek isteyenler için:

PE1’den PE2’ye giden yol (4.4.4.4/32)
Çıktılardan PE1’den PE2’nin loopback’ine (4.4.4.4/32) giden yolu adım adım çıkaralım:
| Adım | Router | İşlem | Label |
|---|---|---|---|
| 1 | PE1 (ingress) | Push | Paketin üzerine 131069 konur, 1/1/2 ile P’ye gider |
| 2 | P (transit) | Swap | Gelen 131069 değiştirilir, çıkış label’ı 131071 (implicit null), 1/1/1 ile PE2’ye gider |
| 3 | PE2 (egress) | Pop | 4.4.4.4/32 PE2’nin kendi adresi, label zaten 131071, paket düz IP olarak işlenir |
Ters yön: PE2’den PE1’e (2.2.2.2/32)
Yön tersine dönünce aynı mantık işliyor:
| Adım | Router | İşlem | Label |
|---|---|---|---|
| 1 | PE2 (ingress) | Push | 131070 konur, 1/1/1 ile P’ye gider |
| 2 | P (transit) | Swap | 131070 → 131071 (implicit null), 1/1/2 ile PE1’e gider |
| 3 | PE1 (egress) | Pop | 2.2.2.2/32 PE1’in kendisi |
Implicit null ve PHP
Yukarıdaki P satırında dikkat çekici bir şey var: egress label 131071. Bu implicit null. P router’ı label’ı gerçek bir değerle değiştirmiyor, söküp PE2’ye düz IP paketi olarak gönderiyor. Buna PHP (Penultimate Hop Popping) deniyor, yani sondan bir önceki hop’ta label sökülüyor.
Neden böyle yapılıyor? Label’ı PE2 sökseydi, PE2 önce label’a bakıp sonra bir de IP lookup yapmak zorunda kalırdı. Label P’de sökülünce PE2 sadece IP lookup yapıyor, bir iş eksiliyor.
Pratikte bunun anlamı şu: P ile PE2 arasındaki linkte (10.34.34.0/24) paket yakalarsan üzerinde label görmezsin. PE1 ile P arasındaki linkte ise 131069 label’ını görürsün. Label sadece bu LSP’nin ilk bacağında taşınıyor.
Diğer FEC’lere bakarsak (örneğin PE1’in 3.3.3.3/32 satırı) aynı şey orada da var: P’nin kendi loopback’i için verdiği label 131071, PE1 de bu yüzden label eklemeden (Push + implicit null) P’ye gönderiyor, P’de Pop olarak görünüyor.
PE1 ve PE2’de görünen ek
Swapsatırları (ör. PE1’de 4.4.4.4/32 için 131069 → 131069) bu akışın parçası değil. Tablo okurkenPush, P’dekiSwapve hedef PE’dekiPopsatırlarına odaklanmak yeterli.
6. Özet
- OSPF, PE’lerin loopback’lerini birbirine öğretti ve yolu belirledi.
- LDP, bu rotalar üzerinden label dağıttı ve PE1 ile PE2 arasında bir LSP kurdu (
show router tunnel-table). - Giriş PE’si label’ı push, P router’ı swap, çıkış tarafı pop ediyor. Implicit null sayesinde label aslında P’de sökülüyor (PHP).
- P router’ı paketin IP adresine bakmadan sadece label ile yönlendirme yapıyor, MPLS’in çekirdekte sağladığı kazanç bu.
Bir sonraki yazıda bu LSP’nin üzerine servis (Epipe/VPLS) kurup CE1 ile CE2’yi birbirine bağlayacağız.