MPLS(多協議卷標交換)


MPLS(多協議卷標交換)

 

一、傳統IP路由轉發的特點及缺點

  1. 使用動態路由協議傳遞路由條目
  2. 傳統IP路由只能基於數據報中的目的IP轉發數據報
  3. 每台路由器都要去查找路由表然后逐跳轉發

 

二、MPLS基本工作原理

MPLS:用標簽轉發,而不是進行IP路由表的查找

 

MPLS邊界路由器:連接了MPLS域和一個純IP網絡

只有邊界路由器才會進行路由表查找(針對純IP包)

 

LSP:卷標轉發路徑

LSR:標簽轉發路由器(MPLS域中的路由器)

 

 

 

 

MPLS數據報轉發過程的基礎理論:

邊界路由器為純IP包查路由表,並給數據報壓上一個標簽(IP數據報前面加上一個標簽5發送出去)。第二台的下游路由器不會再去查路由表,只看卷標(因為是卷標包),只需要做標簽的替換5——3(標簽3是下游路由器給它的,下游路由器只認識標簽3)。第三台路由器彈出標簽,變成純IP包,並做路由表查找,最后轉發給身后的IP網絡。

 

三、MPLS的優勢

1.轉發速度——不是主要因素

 

2.VPN服務:

MPLS把IP的路由和轉發給分離了:在入口的地方就可以決定數據報將要走的整條路徑(傳統的IP路由轉發不行,因為每一跳都要去查找),它可以為不同入口的IP數據報壓不同的標簽出去——MPLS VPN

兩個不同的VPN客戶使用相同的私網地址段,MPLS VPN可以區分這兩個不同客戶的數據報走向。根據收到的接口不同,壓不同的標簽轉發出去(傳統IP只能匹配這一條路由條目,故只能按照一種方式做錯誤的轉發)

 

 

 

 

 

 

 

傳統IP路由轉發:根據數據報要去往的目的IP地址,匹配中同一條路由條目,只能做一種轉發方式

MPLS根據標簽轉發,提供了另外一種轉發方式

 

3.MPLS-TE(流量工程)

 

 

 

 

傳統的IP轉發,例如運行的是ospf,只會選擇走cost值小(帶寬大)的路徑,當這條鏈路帶寬超載時會發生丟包,但是流量仍然不會走下面

 

MPLS卻可以在入口處強行指定路徑以實現非等價負載均衡

 

傳統IP網絡並不是只能基於目的地址轉發——使用PBR(策略路由)

但PBR不適合在互聯網上大規模應用,因為每台路由器上都要去做控制,而不是在入口處控制。使用MPLS可以只在入口處就完成控制。

 

四、MPLS包頭封裝位置和包頭格式

4.1 MPLS包頭封裝位置

MPLS包頭放在二層的幀頭和三層的IP頭之間的位置,所以MPLS也叫做2.5層的協議

MPLS標簽放在MPLS包頭中

 

 

 

 

二層的幀頭中的“類型字段”會指明上層是IP協議(0X0800)還是MPLS協議,路由器查看二層的幀頭就知道應該使用哪張表來查表轉發——FIB、LFIB

所以中間的MPLS路由器不會去看IP包頭轉發,只看MPLS包頭轉發

 

4.2 MPLS包頭格式

 

 

 

1.標簽:20位(100多萬個),為每一條路由分配一個標簽,足夠用了

 

2.EXP做QOS用的,3位

 

QOS區分服務模型:分類、標記(着色)——字段(值)

三層的IP包中的字段:TOS(早期)——DSCP(后來)

二層:802.1q的trunk中的cos字段

 

端到端的QOS

 

 

 

二層交換機的trunk(二層幀中的字段-COS5)復制到IP路由器(TOS5),進MPLS域時復制到路由器MPLS包頭中(EXP5)

 

3.S占比位,1位,多層標簽嵌套(實際上是有多個MPLS的包頭),標識我是不是最內層的標簽

 

 

 

0:外層標簽

1:內層標簽

 

MPLS VPN:2層標簽

CSC:3層標簽

 

4.TTL(生存時間): 8位(最大值為255,看從哪個操作系統發出來的初始值不一樣),每經過一個路由器減1,防環。把IP包頭里的TTL值復制到MPLS包頭的TTL字段里

 

五、MPLS架構及實現細節

5.1 控制層面

如何生成轉發層面所需要使用的表

傳統IP路由是通過動態路由協議的學習最后生成路由表

 

1.各種動態路由協議

任何IGP、BGP協議——目的是傳遞路由

 

2.分發和傳遞標簽的協議

1)專門的卷標分發協議:LDPTDP 

TDP:cisco的卷標交換技術,tag switching所使用的標簽分發協議。它是LDP的前身

LDP:被IETF共有化后演變了成現在的MPLS所使用的標簽分發協議

 

2)其他可以傳遞卷標的協議:

1.MPBGP(多協議BGP):把標簽放在BGP路由后面一起傳遞

2.ipv4-BGP:不同的AS之間傳遞卷標,用LDP傳遞卷標不好

3.RSVP(資源預留協議):出現在QOS的集成服務模型里的,用於數據網絡,去請求保留帶寬,然后可以沿着路徑分卷標——用於MPLS-TE

 

QOS的兩種模型:

1.區分服務模型:用的最多

對數據報在入口處進行分類(根據重要性),然后打標記(着色,在字段中設置一個值),繼續傳遞,其他路由器只看標記根據QOS的隊列機制讓重要的數據報每次都是優先轉發。

但是每台路由器都要去實施。

 

2.集成服務模型:類似於傳統的電話網絡,中間是二層的電話交換機——用於語音網絡

打電話時交換機會發送信令去請求下一台交換機的帶寬(需要的帶寬),整條鏈路先預留帶寬,保證語音的質量。預留不出來則通話不能建立,保證了服務質量。

但是是針對每一個流,也不能在互聯網上大規模實施

 

3.通過無序分發標簽,形成每台路由器的LIB表(標簽信息庫):

LIB中只會存儲LDP/TDP分的標簽

路由條目    自己本地分配的標簽(local)    所有別人給我的標簽(remote)

 

5.1.1 LDPTDP的聯系

可以全局或接口下修改使用的卷標分發協議:默認是LDP,兩端必須一致

int s0/0

mpls label protocal tdp

 

其實兩者可以互相兼容——MPLS分發標簽使用LDP或TDP都可以

 

5.1.2 mpls ip命令在接口上運行之后,LDP的工作過程

1.選舉LDP router-id(同ospf,選舉好后即是一個穩定狀態)

2.使用LDP router-id的地址建立直連路由器之間的LDP鄰居關系(要注意路由的可達性)

3.通過路由協議學習到路由條目后,每台路由器針對這條路由條目本地分配一個標簽(local)

4.通過LDP協議無序分發卷標(LDP/TDP的卷標分發是無序的,分發給所有LDP/TDP鄰居而不區分上下游),從而形成LIB表(local  remote)

 

5.1.3 LDP鄰居的建立過程

1.LDP使用UDP源目埠號都為646發送hello包(並通過UDP協議維持LDP的鄰居關系)

LDP的hello消息目的IP地址發往224.0.0.2

sh ip int s0/0  //查看mpls接口加組信息(224.0.0.2)

 

2.協商相關參數,如LDP router-id的大小

 

3.使用TCP 源埠隨機,目的埠為646建立LDP鄰居關系(LDP ID大的主動去發送TCP連接小的)

目的IP為對方的LDP ID

sh mpls ldp nei  //查看LDP鄰居關系

 

access-list 100 permit udp any eq 646 host 224.0.0.2 eq 646

access-list 100 permit ospf any any  //建立ospf鄰居,放行LDP ID的路由條目

access-list 100 permit tcp any host 1.1.1.1 eq 646  // LDP ID大者向小的一方發起TCP連接

access-list 100 deny  ip any any

 

TDP依靠TCP 711埠建立鄰居關系,用UDP發送hello包(維持TDP的鄰居關系)

 

5.1.4 相關命令

LDP ID:類似於OSPF的router ID,選舉規則也一樣;使用mpls ldp router-id interface force可改變LDP ID


在LDP鄰居發現時,鄰居之間的LDP ID必須IGP可達,否則在sh mpls ldp discovery的最后一行會出現no route,即鄰居發現沒有建立成功

 

 

 

全局下的MPLS命令:

mpls ldp命令(新命令)等同於tag-switching tdp(老命令)——因為LDP等同於TDP

 

控制層面小結:

  1. 每台路由器通過一種動態路由協議學習到路由條目
  2. 每台路由器先本地為這條路由條目分配一個標簽
  3. 無序分發標簽,形成每台路由器的LIB表

 

5.2 數據層面

如何去查那張表

傳統IP路由是拿目的地址去查路由表(FIB表)

 

1.FIB表(轉發信息庫,CEF——相當於路由表)

FIB表是對路由表的復制,做了一些優化,解決了遞歸查找問題

為什么要使用FIB表:因為只有FIB表才能關聯標簽,路由表是無法關聯標簽的

 

必須打開CEF才會有FIB

邊界路由器要查CEF表:三層的表,IP是三層的包

 

路由條目    出接口    下一跳路由器給的標簽(out)

 

2.LFIB表(卷標轉發信息庫)

LIB生成

中間的路由器只根據LFIB表做標簽的替換:針對的是標簽包

 

路由條目    出接口    本地分配的標簽(in)    下一跳路由器給的標簽(out) 

 

LFIBoutuntagged的情況:——彈出所有標簽

如果下一跳沒有給我標簽(沒有運行MPLS的純IP網絡,我只能給它轉發一個純IP包的情況),則out是untag

 

LFIBoutpop的情況:——只彈出一層外層標簽

每台路由器對於本地直連的路由條目本地分配的是一個“隱式空”的空標簽(local值為3),倒數第二跳路由器收到這個分發的空標簽,它的LFIB表中out為POP。然后轉發純IP包給末端路由器,末端路由器一般情況下只需要查IP路由表(FIB表)轉發,所以末端路由器對於直連路由LFIB表中是沒有這條路由條目的

 

數據層面小結:

是什么包就查什么表

 

5.3 MPLS架構小結

路由的傳遞是從下游往上游傳

標簽的分發是無序的,但只有關聯下一跳給的標簽才有意義

數據報的轉發是從上游往下游走

 

5.4 數據報轉發時的幾種可能性

收到的是IP包,只查FIB

1.壓out的標簽出去(MPLS邊界路由器)

2.不壓標簽,正常的IP包出去(末端路由器的直連路由)

 

收到的是標簽包:只查LFIB

1.更換一個標簽出去(中間的路由器)

2.彈出標簽,變成純IP包出去(倒數第二跳路由器)

 

 

六、基礎實驗

 

 

 

R3:ping 1.1.1.1

 

 

6.1 MPLS基本配置及驗證命令

1.應首先保證MPLS域中的所有路由器CEF開啟(默認開啟)

 

2.運行一種路由協議,宣告物理及環回界面

因為LDP也會建立鄰居關系(默認使用環回口建立鄰居,因此必須要環回口路由可達)

sh mpls ldp discovery

 

3.指定卷標分配的范圍——針對所有可以分卷標的協議的卷標分配范圍

運行MPLS,同時就默認啟動了LDP對每條路由條目本地分配一個標簽(local)

 

LDP分配標簽從16開始,本地有效。應該強制每台路由器對路由分配不同的標簽范圍(在啟用MPLS之前就做,因為啟用了MPLS就啟用了LDP,已經開始分配標簽了)

 

全局配置模式下:

mpls label range 16 100

 

4.MPLS域中的所有接口下啟用MPLS——默認就啟用了LDP並建立LDP的鄰居關系

int s0/0

mpls ip


sh mpls int  //查看所有啟用了LDP的接口

sh mpls ldp nei  //LDP的鄰居:LDP的TCP連接發起方——根據源埠號(隨機)和目的埠號(646)判斷

 

R3:trace 1.1.1.1  //壓標簽達到目的地址

 

查看控制層面的表(LIB)

sh mpls ldp bindings  //LIB表:路由條目、卷標local、卷標remote

對於直連路由,本地分空標簽

對於非直連路由,本地正常分標簽

 

查看數據層面的表:

show ip cef detail  //FIB表:路由條目、出接口、下游路由器給我的標簽(out)

 

show mpls forwarding-table  //LFIB表:路由條目、出接口、本地分配的標簽(in)、下游路由器給我的標簽(out)

 

 

6.2 擴展內容

1.關閉CEFno ip cef

 

1)如果邊界路由器關閉CEF

FIB空了——必須打開CEF才會有FIB

 

2)如果中間路由器關閉CEF

LIB中本地不分標簽了

FIB表空了

LFIB表也空了

 

此時則完全按照路由表查找轉發,脫離了LSP,此環境沒有任何影響,可以通,但是MPLS-VPN網絡中就不通了

 

路由器要基於FIB表本地分配標簽和形成LFIB表,所以必須在MPLS域中所有路由器上都打開CEF:ip cef

 

2.如果將R1環回口改為24位:

需要在R1上重啟mpls ip命令

 

R1通過ospf通告給R2的仍是32位路由

R2的LFIB中out全變成untag了,對於MPLS VPN就不正常了

 

問題原因:

1.R1上本地會為24位的這條直連路由分空標簽,也會把這個空標簽傳遞給R2,但R2上並沒有24位的這條路由,因此這條路由不會顯示進LFIB表中

2.R2收到的路由是32位的,但是卻收不到關於這條32位路由下一跳給它的標簽,因為R1上是直連的是24位的路由

3.R2上只有32位的路由加入到LFIB表中,因為沒有收到標簽,所以out是untag

 

解決方法:

使分標簽的路由和傳遞的路由屏蔽一致

1.將所有路由器環回口屏蔽都設置為32位——推薦

2.環回口網絡類型改為點到點,這樣宣告給鄰居的也是24位掩碼

 

3.如果MPLS域中存在路由匯總——eigrp

匯總路由在R2上產生:1.1.1.1/32-1.1.0.0/16,R2會為1.1.0.0/16這條路由本地分一個空標簽,R3壓着空標簽轉發到R2(R3到R2的包是純IP包)

 

而R2本身有明細路由,R1本地分配的空標簽分發過來,R2又壓着空標簽轉發到R1(等於還是一個純IP包轉發給R1)。因為R2上同時有匯總路由和明細路由,所以這種情況下不會有問題——eigrp、ospf

如果R1和R2之間還有一台路由器,則會重新壓一次標簽過去

 

關鍵是看底層使用的是哪種動態路由協議,做匯總時本地會不會自動生成那條匯總路由

eigrp和ospf手動匯總后本地都會自動產生一條指向空接口的匯總路由,所以MPLS-VPN沒有問題

rip本地不會自動產生匯總路由,所以MPLS-VPN有問題

另:ospf的匯總只能在ABR或ASBR上做

 

eigrip匯總:——pop

R2:連R3的界面

int s0/1

ip sum eigrp 100 1.1.0.0 255.255.0.0

 

rip匯總:接口下(同eigrp,DV型)——untag,MPLS-VPN有問題

int s0/1

ip sum rip 1.1.0.0 255.255.0.0

所以MPLS域中的底層路由協議最好不要使用rip

 

 

七、幀模式(IP)和信元模式(ATM)的區別

7.1 標簽的發配

幀模式:只要自己有路由就本地分配標簽

信元模式:下游給我標簽以后,我本地再開始自己分配標簽

 

7.2 標簽的分發

幀模式:分發是主動、無序的,不管對方要不要

信元模式:按需分發(上游向下游請求)

 

7.3 標簽的保留

幀模式:LDP鄰居傳遞給我的標簽一直保存在我的LIB中,不管是不是下一跳或下一跳是否已經down掉(對方起來后,不需要重新分發標簽進行三層的收斂,速度快)

 

7.4 LFIB表中是否關聯數據報的入向接口

 

 

 

幀模式:不關聯數據報的入向界面

優點:表小,卷標交換速度快

缺點:不安全

 

信元模式:關聯數據報的入向界面

八、MPLS的現實好處(BGP傳遞路由)

8.1 MPLS中的trace相關命令

no mpls ip propagate-ttl  //TTL值在MPLS入口處變成255,並且不遞減

此時traceroute不生效

 

8.2 通過BGP傳遞路由

 

 

 

R1和R3通過IBGP傳一條32位的環回口路由

純IP網絡中,不能通(中間路由器沒有運行IBGP,沒有這條路由),但MPLS中可以通

 

R1:sh mpls ldp bindings

本地不會為33.33.33.33這條路由分標簽(學到的是B表項),MPLS只會為IGP的路由分標簽,不會為BGP路由分標簽。但轉發數據報時會壓這條BGP路由的下一跳路由的標簽(通過3.3.3.3學來的)——sh ip cef detail

 

sh ip bgp  //去往33.33.33.33下一跳是3.3.3.3

 

R2沒有運行BGP,也沒有11和33的路由

 

好處:運營商中間的所有P路由器都不用承載BGP的路由(客戶的路由),只需要維護一個標簽即可實現客戶路由的端到端通信

 

 

8.3 擴展內容

R1重啟mpls ip后,LFIB中的out都是untag(沒有收到鄰居的標簽),LDP鄰居建立不起來了

 

因為LDP也有RID,通過RID建立鄰居,並且RID選舉好后是非搶占的,除非重啟mpls ip才重新選舉(選舉RID的方式同ospf)

R1上重新選舉RID為11.11.11.11,因為R2上沒有11.11.11.11的路由,所以R1的11.11.11.11和R2的2.2.2.2不能建立LDP鄰居

 

解決方法:

1.全局配置模式下:強制指定LDP的RID為1.1

mpls ldp router-id lo0  //只能跟界面,還是要等到mpls下一次重啟

mpls ldp router-id lo0 force  //讓其立刻生效

 

2.RID不變,讓LDP通過直連接口建立鄰居,而不是使用RID建立鄰居(如果不能修改LDP的RID的話,使用這種方法比較好)

 

int s0/0  接口下的命令

mpls ldp discovery transport-add interface  //本路由器通過本地這個物理接口地址和對方建立LDP鄰居

 

 

九、控制標簽的分發

控制路由的傳遞——發布列表

控制數據報的傳遞——ACL

 

控制標簽的分發: 

讓R2針對環回口路由2.2.2.2本地分配的標簽只傳遞給R1,而不給R3(R3上看到2.2.2.2變成untag)

 

全局配置模式下:

老命令:tag-switching advertise-tag for ACL1(匹配路由) to ACL2(允許向誰發送)

 

新命令:mpls ldp advertise-labels for ACL1(匹配路由) to ACL2(允許向誰發送)

 

mpls ldp advertise-labels for 1 to 2

ac 1 per host 2.2.2.2  //匹配32位的路由

ac 2 per host 1.1.1.1  //只給1.1.1.1的LDP鄰居分發標簽(只能匹配對方LDP的RID,匹配對方的直連界面IP是不行的)

 

結果:R1的LFIB中out是POP,R3的LFIB中out是untag

 

 

 

 

no mpls ldp advertise-labels

mpls ldp advertise-labels for 11

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM