MPLS其它相關知識:
MPLS相關配置及抓包分析
MPLS BGP 跨域(OptionA/B/C)
MPLS VPN Hub and Spoke實驗
文章目錄
- MPLS簡介
-
- 定義
- MPLS基本結構
-
- 網絡結構
- 體系結構+工作過程
- 工作過程
- MPLS标簽
-
- 轉發等價類:
- 标簽:
- 标簽空間:
- LSP的建立
-
- 靜态LSP的建立:
- 動态LSP的建立:
- MPLS轉發
-
- MPLS基本轉發過程:
- MPLS詳細轉發過程:
- MPLS對TTL的處理:
-
- MPLS對TTL的處理模式:
MPLS簡介
定義
多協定标簽交換MPLS(Multiprotocol Label Switching)是一種IP(Internet Protocol)骨幹網技術。MPLS在無連接配接的IP網絡上引入面向連接配接的标簽交換概念,将第三層路由技術和第二層交換技術相結合,充分發揮了IP路由的靈活性和二層交換的簡捷性。
MPLS起源于IPv4(Internet Protocol version 4),其核心技術可擴充到多種網絡協定,包括IPv6(Internet Protocol version 6)、IPX(Internet Packet Exchange)和CLNP(Connectionless Network Protocol)等。MPLS中的“Multiprotocol”指的就是支援多種網絡協定。
由此可見,MPLS并不是一種業務或者應用,它實際上是一種隧道技術。這種技術不僅支援多種高層協定與業務,而且在一定程度上可以保證資訊傳輸的安全性。
标簽交換:資料包在進入到的MPLS的域内後,将在第2層和3層中間壓入标簽号;使得域内的路由器在轉發該資料包時,基于2.5層的标簽号僅需要查詢本地的一張LFIB表(标簽轉發資訊資料庫)
最初在包交換僅支援原始交換時,标簽的意義在于更快的查詢;但随着包交換的加速,使用标簽交換失去了快速查表的優勢;
當下MPLS存在的意義:
1、解決BGP的路由黑洞 2、MPLS VPN 3、MPLS TE 流量工程
另外:随着包交換的加速,使得今天的MPLS技術也開始基于FIB表工作;來提高MPLS的工作效率;
MPLS基本結構
網絡結構
MPLS網絡的典型結構如下圖所示。MPLS基于标簽進行轉發,下圖中進行MPLS标簽交換和封包轉發的網絡裝置稱為标簽交換路由器LSR(Label Switching Router);由LSR構成的網絡區域稱為MPLS域(MPLS Domain)。位于MPLS域邊緣、連接配接其他網絡的LSR稱為邊緣路由器LER(Label Edge Router),區域内部的LSR稱為核心LSR(Core LSR)。

IP封包進入MPLS網絡時,MPLS入口的LER分析IP封包的内容并且為這些IP封包添加合适的标簽,所有MPLS網絡中的LSR根據标簽轉發資料。當該IP封包離開MPLS網絡時,标簽由出口LER彈出。
IP封包在MPLS網絡中經過的路徑稱為标簽交換路徑LSP(Label Switched Path)。LSP是一個單向路徑,與資料流的方向一緻。
如上圖,LSP的入口LER稱為入節點(Ingress);位于LSP中間的LSR稱為中間節點(Transit);LSP的出口LER稱為出節點(Egress)。一條LSP可以有0個、1個或多個中間節點,但有且隻有一個入節點和一個出節點。
根據LSP的方向,MPLS封包由Ingress發往Egress,則Ingress是Transit的上遊節點,Transit是Ingress的下遊節點。同理,Transit是Egress上遊節點,Egress是Transit的下遊節點。
體系結構+工作過程
MPLS的體系結構由控制平面(Control Plane)和轉發平面(Forwarding Plane)組成。
- 控制層面:路由協定工作,生成RIB,流量的方向即為控制流量;官方點就是負責産生和維護路由資訊以及标簽資訊
-
路由資訊表RIB(Routing Information Base):由IP路由協定(IP Routing
Protocol)生成,用于選擇路由。
-
标簽分發協定LDP(Label Distribution
Protocol):負責标簽的配置設定、标簽轉發資訊表的建立、标簽交換路徑的建立、拆除等工作。
- 标簽資訊表LIB(Label Information Base):由标簽分發協定生成,用于管理标簽資訊。
- 轉發平面:即資料平面(Data Plane),負責普通IP封包的轉發以及帶MPLS标簽封包的轉發:裝置基于路由表通路目标,産生資料流量; 與控制層面方向相反;
- 轉發資訊表FIB(Forwarding Information Base):從RIB提取必要的路由資訊生成,負責普通IP封包的轉發。
-
标簽轉發資訊表LFIB(Label Forwarding Information
Base):簡稱标簽轉發表,由标簽分發協定在LSR上建立LFIB,負責帶MPLS标簽封包的轉發。
工作過程
控制層面:
1)在沒有MPLS時控制層面僅生成RIB(路由表)和FIB(轉發資訊資料庫);FIB是基于RIB生成;
2)MPLS協定會啟動TDP(cisco私有)或LDP(公有),直連裝置間将建立鄰居關系;
LDP-- 基于UDP和TCP的646端口工作;先使用udp發送多點傳播hello包發現鄰居,擷取鄰居ip位址,再和該直連鄰居建立TCP的會話;鄰居關系建立後;為了鄰居關系間的穩定,一般使用裝置的環回位址來建立tcp會話;建議設定環回位址為mpls協定的route-id,該id值将攜帶在多點傳播收發的hello封包中,之後自動進行tcp會話建立;
總結:MPLS協定需要在直連鄰居間使用router-id位址來進行TCP的會話;故前提條件為,route-id必須為裝置真實使用的ip位址,建議為環回位址—穩定; 多點傳播hello包在直連的實體接口上收發,來擷取對端的router-id,自然也要求router-id值間路由可達;
是以正常在建立LDP的鄰居關系間,路由協定已經收斂完成,RIB和FIB表已經生成;
3)MPLS在建立鄰居關系後,生成鄰居表;LDP協定再基于FIB表中學習到的路由條目生成标簽号;
cisco裝置預設基于FIB表中所有學習到的路由條目生成标簽号,華為裝置預設僅基于FIB表中32位掩碼的主機路由生成标簽号;原因在于正常32位主機路由為ospf學習的環回接口,正常工程中隻有BGP和MPLS VPN才會基于環回通訊,使用标簽轉發;其他普通流量還是基于特快包交換來進行;反觀cisco在啟動mpls以後,所有流量将基于标簽轉發,降低了轉發效率(前提為預設)
4)标簽号生成後,将存儲于本地的LIB表-标簽資訊資料庫;LIB表将在鄰居間共享;
LIB表中裝載本地及鄰居為每條路由分發的标簽号;
5)運作MPLS協定的裝置,将LIB和FIB進行結合,将标簽号和最佳路徑的關系映射生成LFIB表(标簽轉發資訊資料庫)
注:控制層面生成的表格
RIB—》FIB—》LIB—》LFIB 前兩張表為路由協定工作後生成,後兩張表為MPLS的LDP協定生成;
資料層面:
1)沒有MPLS協定,基于FIB表正常轉發即可
2)名詞:MPLS domain – MPLS的工作半徑
edge LSR(PE)即(LER) --邊界标簽交換路由器 工作mpls域的邊緣,連接配接域外裝置
LSR (P)即(core LSR) – 标簽交換路由器 整體工作MPLS域内
3)當流量進入到第一台pe裝置時, 在沒有特快交換之前,路由器基于目标IP位址查詢本地的RIB;
之後還要在LIB表中對應才能确定流量是否應該壓入标簽,需要兩張表的查詢;
在存在特快交換時,流量進入第一pe時,直接查詢FIB表,表中關聯标簽号,将直接确定是否壓入标簽;
流量再到P路由器,接收到流量中若存在标簽基于LFIB表轉發,若沒有标簽基于FIB表即可;
流量從最後一台邊界離開MPLS 域時将彈出标簽;
存在标簽号的流量,進入路由器時,入标簽表應該為本地路由器配置設定的編号,出标簽為本地的下遊(下一跳)裝置配置設定的标簽号; 上下遊的概念基于資料層面進行标定;
MPLS标簽
轉發等價類:
MPLS将具有相同特征的封包歸為一類,稱為轉發等價類FEC(Forwarding Equivalence Class)。屬于相同FEC的封包在轉發過程中被LSR以相同方式處理。
FEC可以根據源位址、目的位址、源端口、目的端口、VPN等要素進行劃分。例如,在傳統的采用最長比對算法的IP轉發中,到同一條路由的所有封包就是一個轉發等價類。
标簽:
标簽(Label)是一個短而定長的、隻具有本地意義的辨別符,用于唯一辨別一個分組所屬的FEC。在某些情況下,例如要進行負載分擔,對應一個FEC可能會有多個入标簽,但是一台裝置上,一個标簽隻能代表一個FEC。
MPLS封包與普通的IP封包相比增加了MPLS标簽資訊,MPLS标簽的長度為4個位元組。MPLS标簽封裝在鍊路層和網絡層之間,可以支援任意的鍊路層協定。MPLS标簽的封裝結構如下圖所示:
标簽被壓入在2層與3層之間,稱為2.5層 标簽的格式—32位,4個位元組
前20位為标簽号,2^20個标簽号;其中1-15号保留,作為特殊編号;
第21-23位exp,3位8個數,為優先級,用于QOS政策使用;
第24位為棧底位,該位為1辨別該标簽為最後一層标簽;MPLS最大可以在一個資料包中封裝3次标簽;
标簽棧(Label Stack)
是名額簽的排序集合。靠近二層首部的标簽稱為棧頂MPLS标簽或外層MPLS标簽(Outer MPLS label);靠近IP首部的标簽稱為棧底MPLS标簽或内層MPLS标簽(Inner MPLS label)。理論上,MPLS标簽可以無限嵌套。目前MPLS标簽嵌套主要應用在MPLS VPN、TE FRR(Traffic Engineering Fast ReRoute)中。普通的MPLS 一層标簽 MPLS VPN 兩層 MPLS TE 3層
标簽棧按後進先出方式組織标簽,從棧頂開始處理标簽。
TTL 生存時間 在第一次壓入标簽時,将目前資料包中的3層TTL複制到标簽中;之後查詢一次标簽TTL減一,在最後一跳裝置彈出标簽時将2.5層的TTL複制到3層報頭中;
标簽空間:
标簽空間就是名額簽的取值範圍。标簽空間劃分如下:
- 0~15:特殊标簽。
-
16~1023:靜态LSP和靜态CR-LSP(Constraint-based Routed Label Switched
Path)共享的标簽空間。
- 1024及以上:LDP、RSVP-TE(Resource Reservation Protocol-Traffic Engineering)、MP-BGP(MultiProtocol Border Gateway Protocol)等動态信令協定的标簽空間。
特殊标簽表:
标簽值 | 含義 | 描述 |
---|---|---|
IPv4 Explicit NULL Label | 表示該标簽必須被彈出(即标簽被剝掉),且封包的轉發必須基于IPv4。如果出節點配置設定給倒數第二跳節點的标簽值為0,則倒數第二跳LSR需要将值為0的标簽正常壓入封包标簽值頂部,轉發給最後一跳。最後一跳發現封包攜帶的标簽值為0,則将标簽彈出。 | |
1 | Router Alert Label | 隻有出現在非棧底時才有效。類似于IP封包的“Router Alert Option”字段,節點收到Router Alert Label時,需要将其送往本地軟體子產品進一步處理。實際封包轉發由下一層标簽決定。如果封包需要繼續轉發,則節點需要将Router Alert Label壓回标簽棧頂。 |
2 | IPv6 Explicit NULL Label | 表示該标簽必須被彈出,且封包的轉發必須基于IPv6。如果出節點配置設定給倒數第二跳節點的标簽值為2,則倒數第二跳節點需要将值為2的标簽正常壓入封包标簽值頂部,轉發給最後一跳。最後一跳發現封包攜帶的标簽值為2,則直接将标簽彈出。 |
3 | Implicit NULL Label | 倒數第二跳LSR進行标簽交換時,如果發現交換後的标簽值為3,則将标簽彈出,并将封包發給最後一跳。最後一跳收到該封包直接進行IP轉發或下一層标簽轉發。 |
4~13 | 保留 - | |
14 | OAM Router Alert Label | MPLS OAM(Operation Administration & Maintenance) 通過發送OAM封包檢測和通告LSP故障。OAM封包使用MPLS承載。OAM封包對于Transit LSR和倒數第二跳LSR(penultimate LSR)是透明的。 |
15 | 保留 |
LSP的建立
MPLS需要為封包事先配置設定好标簽,建立一條LSP,才能進行封包轉發。LSP分為靜态LSP和動态LSP兩種。
靜态LSP的建立:
靜态LSP是使用者通過手工為各個轉發等價類配置設定标簽而建立的。由于靜态LSP各節點上不能互相感覺到整個LSP的情況,是以靜态LSP是一個本地的概念。
靜态LSP不使用标簽釋出協定,不需要互動控制封包,是以消耗資源比較小,适用于拓撲結構簡單并且穩定的小型網絡。但通過靜态方式配置設定标簽建立的LSP不能根據網絡拓撲變化動态調整,需要管理者幹預。
配置靜态LSP時,管理者需要為各LSR手工配置設定标簽,需要遵循的原則是:前一節點出标簽的值等于下一個節點入标簽的值。
動态LSP的建立:
動态LSP的标簽釋出協定
動态LSP通過标簽釋出協定動态建立。标簽釋出協定是MPLS的控制協定(也可稱為信令協定),負責FEC的分類、标簽的分發以及LSP的建立和維護等一系列操作。
MPLS可以使用多種标簽釋出協定:
-
LDP
LDP(Label Distribution Protocol)是專為标簽釋出而制定的協定。LDP根據IGP(Interior Gateway Protocol)、BGP(Border Gateway Protocol)路由資訊通過逐跳方式建立LSP。
-
RSVP-TE
RSVP-TE(Resource Reservation Protocol Traffic Engineering)是對RSVP的擴充,用于建立基于限制的LSP。它擁有普通LDP LSP沒有的功能,如釋出帶寬預留請求、帶寬限制、鍊路顔色和顯式路徑等。
-
MP-BGP
MP-BGP(Multiprotocol Border Gateway Protocol)是在BGP協定基礎上擴充的協定。MP-BGP支援為MPLS VPN業務中私網路由和跨域VPN的标簽路由配置設定标簽。
動态LSP的基本建立過程
标簽由下遊LSR配置設定,按從下遊到上遊的方向分發。如下圖,由下遊LSR在IP路由表的基礎上進行FEC的劃分,并根據FEC配置設定标簽,通告給上遊的LSR,以便建立标簽轉發表和LSP。
MPLS轉發
MPLS基本轉發過程:
基本概念
在MPLS基本轉發過程中涉及的相關概念如下:
标簽操作類型包括标簽壓入(Push)、标簽交換(Swap)和标簽彈出(Pop),它們是标簽轉發的基本動作。
- Push:當IP封包進入MPLS域時,MPLS邊界裝置在封包二層首部和IP首部之間插入一個新标簽;或者MPLS中間裝置根據需要,在标簽棧頂增加一個新的标簽(即标簽嵌套封裝)。
- Swap:當封包在MPLS域内轉發時,根據标簽轉發表,用下一跳配置設定的标簽,替換MPLS封包的棧頂标簽。
-
Pop:當封包離開MPLS域時,将MPLS封包的标簽剝掉。
在最後一跳節點,标簽已經沒有使用價值。這種情況下,可以利用倒數第二跳彈出特性PHP(Penultimate Hop Popping),在倒數第二跳節點處将标簽彈出,減少最後一跳的負擔。最後一跳節點直接進行IP轉發或者下一層标簽轉發。
-
MPLS的次末跳 – 倒數第二跳 預設執行邊界LSR将本地的直連網段傳遞給MPLS域内鄰居後,LDP配置設定标簽号為3,告知倒數第二跳裝置它的身份;導緻倒數第二跳裝置在查詢LFIB表後,已知轉發路徑的前提下提前彈出标簽,使得最後一跳路由器均隻需要查詢FIB表;
否則最後一跳路由器在查詢LFIB表後,彈出标簽還需要查詢FIB;
- 預設情況下,裝置支援PHP特性,支援PHP的Egress節點配置設定給倒數第二跳節點的标簽值為3。
基本轉發過程:
以支援PHP的LSP為例,說明MPLS基本轉發過程。
如上圖所示,MPLS标簽已分發完成,建立了一條LSP,其目的位址為4.4.4.2/32。則MPLS基本轉發過程如下:
- Ingress節點收到目的位址為4.4.4.2的IP封包,壓入标簽Z并轉發。
- Transit節點收到該标簽封包,進行标簽交換,将标簽Z換成标簽Y。
- 倒數第二跳Transit節點收到帶标簽Y的封包。因為Egress分給它的标簽值為3,是以進行PHP操作,彈出标簽Y并轉發封包。從倒數第二跳轉發給Egress的封包以IP封包形式傳輸。
- Egress節點收到該IP封包,将其轉發給目的地4.4.4.2/32。
MPLS詳細轉發過程:
基本概念:
在MPLS詳細轉發過程中涉及的相關概念如下:
-
Tunnel ID
為了給使用隧道的上層應用(如VPN、路由管理)提供統一的接口,系統自動為隧道配置設定了一個ID,也稱為Tunnel ID。該Tunnel ID的長度為32比特,隻是本地有效。
-
NHLFE
下一跳标簽轉發表項NHLFE(Next Hop Label Forwarding Entry)用于指導MPLS封包的轉發。
NHLFE包括:Tunnel ID、出接口、下一跳、出标簽、标簽操作類型等資訊。
FEC到一組NHLFE的映射稱為FTN(FEC-to-NHLFE)。通過檢視FIB表中Tunnel
ID值不為0x0的表項,能夠獲得FTN的詳細資訊。FTN隻在Ingress存在。
-
ILM
入标簽到一組下一跳标簽轉發表項的映射稱為入标簽映射ILM(Incoming Label Map)。
ILM包括:Tunnel ID、入标簽、入接口、标簽操作類型等資訊。
ILM在Transit節點的作用是将标簽和NHLFE綁定。通過标簽索引ILM表,就相當于使用目的IP位址查詢FIB,能夠得到所有的标簽轉發資訊。
詳細轉發過程:
MPLS的詳細轉發過程如上圖所示:
當IP封包進入MPLS域時,首先檢視FIB表,檢查目的IP位址對應的Tunnel ID值是否為0x0。
- 如果Tunnel ID值為0x0,則進入正常的IP轉發流程。
- 如果Tunnel ID值不為0x0,則進入MPLS轉發流程。
在MPLS轉發過程中,FIB、ILM和NHLFE表項是通過Tunnel ID關聯的。
Ingress的處理:通過查詢FIB表和NHLFE表指導封包的轉發。
- 檢視FIB表,根據目的IP位址找到對應的Tunnel ID。
- 根據FIB表的Tunnel ID找到對應的NHLFE表項,将FIB表項和NHLFE表項關聯起來。
- 檢視NHLFE表項,可以得到出接口、下一跳、出标簽和标簽操作類型。
- 在IP封包中壓入出标簽,同時處理TTL,然後将封裝好的MPLS封包發送給下一跳。
Transit的處理:通過查詢ILM表和NHLFE表指導MPLS封包的轉發。
- 根據MPLS的标簽值檢視對應的ILM表,可以得到Tunnel ID。
- 根據ILM表的Tunnel ID找到對應的NHLFE表項。
- 檢視NHLFE表項,可以得到出接口、下一跳、出标簽和标簽操作類型。
- MPLS封包的處理方式根據不同的标簽值而不同。
- 如果标簽值>=16,則用新标簽替換MPLS封包中的舊标簽,同時處理TTL,然後将替換完标簽的MPLS封包發送給下一跳。
- 如果标簽值為3,則直接彈出标簽,同時處理TTL,然後進行IP轉發或下一層标簽轉發。
Egress的處理:通過查詢ILM表指導MPLS封包的轉發或查詢路由表指導IP封包轉發。
- 如果Egress收到IP封包,則檢視路由表,進行IP轉發。
- 如果Egress收到MPLS封包,則檢視ILM表獲得标簽操作類型,同時處理TTL。
- 如果标簽中的棧底辨別S=1,表明該标簽是棧底标簽,直接進行IP轉發。
- 如果标簽中的棧底辨別S=0,表明還有下一層标簽,繼續進行下一層标簽轉發。
MPLS對TTL的處理:
MPLS對TTL的處理包括MPLS對TTL的處理模式和ICMP響應封包這兩個方面。
MPLS對TTL的處理模式:
MPLS标簽中包含一個8比特的TTL字段,其含義與IP頭中的TTL域相同。MPLS對TTL的處理除了用于防止産生路由環路外,也用于實作Traceroute功能。
RFC3443中定義了兩種MPLS對TTL的處理模式:Uniform和Pipe。預設情況下,MPLS對TTL的處理模式為Uniform。
Uniform模式
IP封包經過MPLS網絡時,在入節點,IP TTL減1映射到MPLS TTL字段,此後封包在MPLS網絡中按照标準的TTL處理方式處理。在出節點将MPLS TTL減1後映射到IP TTL字段。如下圖所示:
Pipe模式
在入節點,IP TTL值減1,MPLS TTL字段為固定值,此後封包在MPLS網絡中按照标準的TTL處理方式處理。在出節點會将IP TTL字段的值減1。即IP分組經過MPLS網絡時,無論經過多少跳,IP TTL隻在入節點和出節點分别減1。如下圖所示:
在MPLS VPN應用中,出于網絡安全的考慮,需要隐藏MPLS骨幹網絡的結構,這種情況下,對于私網封包,Ingress上使用Pipe模式。
ICMP響應封包:
在MPLS網絡中,當LSR收到TTL為1的含有标簽的MPLS封包時,LSR生成ICMP的TTL逾時消息。
- 如果LSR上存在到達封包發送者的路由,則可以通過IP路由,直接向發送者回應TTL逾時消息。
- 如果LSR上不存在到達封包發送者的路由,則ICMP響應封包将按照LSP繼續傳送,到達LSP出節點後,由Egress節點将該消息傳回給發送者。
通常情況下,收到的MPLS封包隻帶一層标簽時,LSR可以采用第一種方式回應TTL逾時消息;收到的MPLS封包包含多層标簽時,LSR采用第二種方式回應TTL逾時消息。
但是,在MPLS VPN中,ASBR(Autonomous System Boundary Router,自治系統邊界路由器)和HoVPN組網應用中的SPE(Superstratum PE or Sevice Provider-end PE,上層PE或營運商側PE),接收到的承載VPN封包的MPLS封包可能隻有一層标簽,此時,這些裝置上并不存在到達封包發送者的路由,則采用第二種方法回應TTL逾時消息。
參考文檔:華為産品文檔