MPLS原理與配置
傳統IP路由轉發:
傳統的IP轉發采用的是逐跳轉發。數據報文經過每一台路由器,都要被解封裝查看報文網絡層信息,然后根據路由最長匹配原則查找路由表指導報文轉發。各路由器重復進行解封裝查找路由表和再封裝的過程,所以轉發性能低。
傳統IP路由轉發的特點:
所有路由器需要知道全網的路由。
IP頭部不定長,處理效率低。
傳統IP轉發是面向無連接的,無法提供較好的端到端QoS保證。
MPLS基本概念:
MPLS位於TCP/IP協議棧中的數據鏈路層和網絡層之間,可以向所有網絡層提供服務。
通過在數據鏈路層和網絡層之間增加額外的MPLS頭部,基於MPLS頭部實現數據快速轉發。
MPLS起源於IPv4(Internet Protocol version 4),其核心技術可擴展到多種網絡協議,包括IPv6(Internet Protocol version 6)、IPX(Internet Packet Exchange)、Appletalk、DECnet、CLNP(Connectionless Network Protocol)等。MPLS中的“Multiprotocol”指的就是支持多種網絡協議。
MPLS以標簽交換替代IP轉發。標簽是一個短而定長的、只具有本地意義的標識符。
MPLS術語介紹 - LSR與MPLS域
MPLS域(MPLS Domain):一系列連續的運行MPLS的網絡設備構成了一個MPLS域。
LSR(Label Switching Router,標簽交換路由器):支持MPLS的路由器(實際上也指支持MPLS的交換機或其他網絡設備)。位於MPLS域邊緣、連接其它網絡的LSR稱為邊沿路由器LER(Label Edge Router),區域內部的LSR稱為核心LSR(Core LSR)。
MPLS術語介紹 - LSR分類
除了根據LSR在MPLS域中的位置進行分類之外,還可以根據對數據處理方式的不同進行分類:
入站LSR(Ingress LSR):通常是向IP報文中壓入MPLS頭部並生成MPLS報文的LSR。
中轉LSR(Transit LSR):通常是將MPLS報文進行例如標簽置換操作,並將報文繼續在MPLS域中轉發的LSR。
出站LSR(Egress LSR):通常是將MPLS報文中MPLS頭部移除,還原為IP報文的LSR。
MPLS術語介紹 - FEC
FEC(Forwarding Equivalence Class,轉發等價類)是一組具有某些共性的數據流的集合,這些數據流在轉發過程中被網絡節點以相同方式處理。
在MPLS網絡中,FEC可以通過多種方式划分,例如基於目的IP地址及網絡掩碼、DSCP等特征來划分。
數據屬於哪一個LSP,由數據進入MPLS域時的Ingress LSR決定。
MPLS標簽通常是與FEC相對應的,必須有某種機制使得網絡中的LSR獲得關於某FEC的標簽信息。
在傳統的采用最長匹配算法的IP轉發中,匹配到同一條路由的所有報文就是一個轉發等價類。
在MPLS中,關於FEC最常見的例子是:目的IP地址匹配同一條IP路由的報文被認為屬於同一個FEC。
MPLS術語介紹 - LSP
LSP(Label Switched Path,標簽交換路徑)是標簽報文穿越MPLS網絡到達目的地所走的路徑。
同一個FEC的報文通常采用相同的LSP穿越MPLS域,所以對同一個FEC,LSR總是用相同的標簽轉發。
一條LSP包含一台入站LSR、一台出站LSR以及數量可變的中轉LSR,因此LSP也可以看做是這些LSR的有序集合。
LSP需要在數據轉發開始前建立完成,只有這樣報文才能順利穿越MPLS域。
LSP可通過靜態和動態兩種方式建立。
需要注意的是,LSP是一個從“起點”到“終點”的單向路徑,若需要雙向數據互通,則需要在雙方之間建立雙向的LSP。
MPLS標簽
IP報文進入MPLS域之前,會被入站LSR壓入MPLS頭部(又叫MPLS標簽),形成一個MPLS標簽報文。一個標簽報文可以包含一個或多個MPLS標簽。
標簽(Label):用於攜帶標簽值,長度20bit。
EXP(Experimental Use):主要用於CoS(Class of Service),長度3bit。
S(Bottom of Stack):棧底位,用於指示該標簽頭部是否為最后一層標簽,長度1bit。如果該字段為1,則表示當前標簽頭部為棧底;如果該字段為0,則表示當前標簽頭部之后依然還有其他標簽頭部。
TTL(Time To Live):用於當網絡出現環路時,防止標簽報文被無限制轉發,與IP報文頭部中的TTL具有相同的意義,長度8bit。
EXP字段在早期的MPLS標准中被定義,意為試驗性的字段,但實際上該字段主要被用於CoS。為了避免歧義,RFC5462重新定義了該字段,命名為流分類(Traffic Class)。
MPLS標簽棧
MPLS支持一層或多層標簽頭部,這些標簽頭部的有序集合被稱為標簽棧(Label Stack)。
當標簽棧中存在多個標簽時,這些標簽的順序是非常講究的:
最靠近二層頭部的標簽是棧頂標簽,標簽中的S字段為0。
最靠近IP頭部的標簽是棧底標簽,標簽中的S字段為1。
當上層為MPLS標簽棧時,以太網頭部中的Type字段為0x8847,PPP頭部中的Protocol字段為0x8281。
標簽空間
標簽是一個短而定長的、只具有本地意義的標識符。標簽空間就是指標簽的取值范圍。標簽值的范圍及規划如下:
只具有本地意義說明每一台LSR之間的標簽空間是相互獨立的,即每台路由器都可以使用完整的標簽空間。
MPLS標簽的處理
LSR對標簽的操作類型包括標簽壓入(Push)、標簽交換(Swap)和標簽彈出(Pop)。
MPLS轉發概述
MPLS轉發的本質就是將數據歸到對應的FEC並按照提前建立好的LSP進行轉發。
對於整個MPLS域,LSP是某一給定的FEC進入域和離開域的路徑,可以看成是LSR的有序集合。
對於單台LSR,需要建立標簽轉發表,用標簽來標識FEC,並綁定相應的標簽處理和轉發等行為。
同一個FEC,若進入MPLS域的Ingress LSR(入站LSR)不同,轉發時的LSP也不相同。
同一個FEC,LSR的處理方式相同,不論這個FEC來自哪里(進入設備的接口)。
LSR的轉發動作決定了LSP,而標簽轉發表確定轉發動作,所以建立標簽轉發表也可以理解為建立LSP。
如圖所示,因為有着相同的目的地,所以這三份數據屬於同一個轉發等價類FEC1。同時由於入站LSR不同,這些數據將分別在LSP1、LSP2和LSP3上被轉發。因為標簽僅具有本地意義,所以每台LSR上給同一FEC分配的標簽,可以相同,也可以不同。
MPLS體系結構:
MPLS的體系結構由控制平面 (Control Plane)和轉發平面 (Forwarding Plane)組成。
控制平面:
控制平面是無連接的,主要功能是負責產生和維護路由信息以及標簽信息。
控制平面包括:
路由信息表RIB(Routing Information Base):由IP路由協議(IP Routing Protocol)、靜態路由和直連路由共同生成,用於選擇路由。
標簽信息表LIB(Label Information Base):用於管理標簽信息,LIB中的表項可由標簽交換協議(LDP、RSVP等協議)或靜態配置生成。
轉發平面:
轉發平面也稱為數據平面,是面向連接的, 主要功能是負責普通IP報文的轉發以及帶MPLS標簽報文的轉發。
轉發平面包括:
轉發信息表FIB(Forwarding Information Base):從RIB提取必要的路由信息生成,負責普通IP報文的轉發。
標簽轉發信息表LFIB(Label Forwarding Information Base):簡稱標簽轉發表,負責帶MPLS標簽報文的轉發。
控制平面與轉發平面
LSP建立原則
當網絡層協議為IP協議時,FEC所對應的路由必須存在於LSR的IP路由表中,否則該FEC的標簽轉發表項不生效。
LSR用標簽標識指定FEC,所以該FEC的數據被發送至LSR時,必須攜帶正確的標簽,才能被LSR正確的處理。
LSP建立方式
MPLS需要為報文事先分配好標簽,建立一條LSP,才能進行報文轉發。LSP分為靜態LSP和動態LSP兩種。
靜態LSP
基本概念:
靜態LSP是用戶通過手工為各個FEC分配標簽而建立的。
靜態LSP不使用標簽發布協議,不需要交互控制報文,因此消耗資源比較小。
通過靜態方式建立的LSP不能根據網絡拓撲變化動態調整,需要管理員干預。
應用場景:
適用於拓撲結構簡單並且穩定的小型網絡。
標簽分配原則:
前一節點出標簽的值等於下一個節點入標簽的值。
動態LSP
基本概念:
動態LSP通過標簽發布協議動態建立。
標簽發布協議是MPLS的控制協議(也可稱為信令協議),負責FEC的分類、標簽的分發以及LSP的建立和維護等一系列操作。
常用標簽發布協議:標簽分發協議 (LDP)
全稱:Label Distribution Protocol。
定義:LDP是多協議標簽交換MPLS的一種控制協議,負責轉發等價類FEC的分類、標簽的分配以及標簽交換路徑LSP的建立和維護等操作。LDP規定了標簽分發過程中的各種消息以及相關處理過程。
應用場景:LDP廣泛地應用在VPN服務上,具有組網、配置簡單、支持基於路由動態建立LSP、支持大容量LSP等優點。
靜態LSP:
由於靜態LSP各節點上不能相互感知到整個LSP的情況,因此靜態LSP是一個本地的概念。
動態LSP:
其他標簽分布協議:
RSVP-TE:Resource Reservation Protocol Traffic Engineering,它是對RSVP的擴展,用於建立基於約束的LSP。它擁有普通LDP LSP沒有的功能,如發布帶寬預留請求、帶寬約束、鏈路顏色和顯式路徑等。
MP-BGP:Multiprotocol Border Gateway Protocol,MP-BGP是在BGP協議基礎上擴展的協議。MP-BGP支持為MPLS VPN業務中私網路由和跨域VPN的標簽路由分配標簽。
MPLS標簽轉發
LSR處理報文時主要根據FTN、 NHLFE和ILM。
Tunnel ID:為了給使用隧道的上層應用(如VPN、路由管理)提供統一的接口,系統自動為隧道分配了一個ID,也稱為Tunnel ID。該Tunnel ID的長度為32比特,只是本地有效。在MPLS轉發過程中,FIB、ILM和NHLFE表項是通過Tunnel ID關聯的。
Ingress LSR的處理
在Ingress LSR,通過查詢FIB表(得到FTN信息)和NHLFE表指導報文的轉發。
當IP報文進入MPLS域時,首先查看FIB表,檢查目的IP地址對應的Tunnel ID值是否為0x0。
如果Tunnel ID值為0x0,則進入正常的IP轉發流程。
如果Tunnel ID值不為0x0,則進入MPLS轉發流程。
Transit LSR的處理
在Transit LSR,通過查詢ILM表和NHLFE表指導MPLS報文的轉發。
Egress LSR的處理
在Egress LSR,通過查詢ILM表指導MPLS報文的轉發。
MPLS詳細轉發過程
MPLS基本配置命令:
1、配置LSR ID
[Huawei] mpls lsr-id lsr-id
mpls lsr-id命令用來配置LSR的ID。LSR ID用來在網絡中唯一標識一個LSR。LSR沒有缺省的LSR ID,必須手工配置。為了提高網絡的可靠性,推薦使用LSR某個Loopback接口的地址作為LSR ID並在配置前對網絡中所有LSR的LSR ID進行統一規划。
2、使能MPLS
[Huawei] mpls
mpls命令用來使能本節點的全局MPLS能力,並進入MPLS視圖。
[Huawei-GigabitEthernet0/0/0] mpls
在接口視圖下,使能當前接口的MPLS功能。需先使能全局MPLS能力后才能執行接口下的MPLS使能命令。
靜態LSP配置命令 (1):
1、Ingress LSR配置
[Huawei] static-lsp ingress lsp-name destination ip-address { mask-length | mask } { nexthop next-hop-address | outgoing-interface interface-type interface-number } * out-label out-label
static-lsp ingress命令用來為入口節點配置靜態LSP。
推薦采用指定next-hop的方式配置靜態LSP,確保本地路由表中存在與指定目的IP地址精確匹配的路由項,包括目的IP地址和下一跳IP地址。如果LSP出接口為以太網類型,必須配置nexthop next-hop-address參數以保證LSP的正常轉發。
out-label的取值范圍為16~1048575。
2、Transit LSR配置
[Huawei] static-lsp transit lsp-name [ incoming-interface interface-type interface-number ] in-label in-label { nexthop next-hop-address | outgoing-interface interface-type interface-number }* out-label out-label
static-lsp transit命令用來為中間轉發節點配置靜態LSP。
下一跳和出接口的配置規則和Ingress LSR保持一致。
in-label的取值范圍為16~1023。
out-label的取值范圍為16~1048575。
out-label占用的是下游LSR的標簽空間,而下游空間采用的標簽分發方式不確定,所以out-label的標簽空間為16~1048575。
in-label占用的是當前LSR的標簽空間,采用靜態LSP時,標簽空間為16~1023。
靜態LSP配置命令 (2):
3、Egress LSR配置
[Huawei] static-lsp egress lsp-name [ incoming-interface interface-type interface-number ] in-label in-label
static-lsp egress命令用來在出口節點配置靜態LSP。
in-label的取值范圍為16~1023。
4、查看靜態LSP配置
[Huawei] display mpls static-lsp [ lsp-name ] [ { include | exclude } ip-address mask-length ] [ verbose ]
display mpls static-lsp命令用來查看靜態LSP信息。
MPLS最初是為了解決傳統IP路由器查表轉發速度慢而被提出的,是一種通過標簽頭部實現快速轉發的技術。
MPLS標簽是一個短而定長的、只具有本地意義的標識符,用於唯一標識一個分組所屬的FEC。LSR對標簽的操作類型包括標簽壓入、標簽交換和標簽彈出。
MPLS包含控制平面和數據平面,控制平面主要負責路由信息的傳遞和標簽的分發,數據平面主要負責數據的轉發。
隨着技術的發展,MPLS在數據轉發速度上的優勢逐漸弱化,但其特性使其在VPN領域得到廣泛應用。