MPLS協議原理與配置詳解


多協議標簽交換MPLS(Multiprotocol Label Switching ),MPLS在無連接的IP網絡上引入面向連接的標簽交換概念,將第三層路由技術和第二層交換技術相結合,充分發揮了IP路由的靈活性和二層交換的便捷性

MPLS並不是一種業務或者應用,它實際上是一種隧道技術。這種技術不僅支持多種高層協議與業務,而且在一定程度上可以保證信息傳輸的安全性

MPLS

  • MP:多協議

  • LS:標簽交換(label switch)

應用場景

  • 用於早期提高轉發效率
  • 用於MPLS VPN(二層或三層標簽)
  • 用於MPLS TE流量工程
  • 用於解決路由黑洞:route recursive-lookup tunnel

MPLS是工作在“2.5”層的協議

  • 在二層頭部和IP頭部之間插入MPLS頭部(短而定長的4字節)
  • MPLS頭部可以插入多層,普通的MPLS插入一層頭部,MPLS VPN插入2層MPLS頭部

一、MPLS基本結構

1.MPLS域

能夠進行標簽轉發的區域

2.MPLS 設備角色

LER(label edge router):處於MPLS網絡的邊界設備,負責標簽的壓入push和彈出pop

LSR(label switch router):處於MPLS網絡的中間區域,負責標簽的交換swap

3.LSP標簽轉發路徑

到達同一目的地址的報文在mpls網絡中經過的路徑

數據轉發過程中的LSP是單向的

LSP需要構建成功后才能進行標簽轉發

  • 構建方式:靜態、動態

LSP的建立過程時間就是將FEC和標簽進行綁定

4.FEC轉發等價類

  • 具有相同轉發處理方式的報文,在MPLS網絡中,到達同一目的地址的所有報文就是一個FEC

  • MPLS中,一條FEC對應着一條路由

  • FEC的划分方式

    • 以源地址、目的地址、源端口、目的端口、協議類型或VPN等為划分依據
  • 設備為FEC進行標簽分配;設備對一條FEC完成標簽分配后(FEC和標簽綁定),建立一條LSP

    • 設備為FEC分發的標簽作為入標簽
    • 設備收到FEC對應的標簽作為出標簽
    • 標簽值只具有本地意義(不同設備的標簽分發是可以一致的)

5.數據流向

上游:數據源方向

下游:數據目的方向

ingress入節點:負責壓入標簽

transit中間節點:負責標簽交換

egress出節點:負責彈出標簽

標簽分發是從下游往上游方向分發

標簽動作

動作 解釋
push 壓入
swap 交換
pop 彈出
null 剝離標簽,出空標簽

二、MPLS體系結構

在這里插入圖片描述

控制層面

負責生成和維護路由信息和標簽信息

1.IP路由協議
  • 產生路由信息
2.RIB路由信息表
  • 存放路由信息
3.LDP標簽分發協議
  • Label Distribution Protocol
  • 為FEC分發標簽
4.LIB標簽信息表
  • Label Information Base

  • 由LDP生成,存放FEC和標簽的映射關系,管理標簽信息
    在這里插入圖片描述

數據層面

負責IP報文的轉發和帶MPLS標簽報文的轉發

從控制層面下發得到,形成最優表項,直接指導數據轉發

1.FIB轉發信息表
  • Forwarding Information Base

  • 基於RIB生成,指導IP報文轉發

  • 判斷數據是否需要標簽轉發

    • tunnel ID為0x0:進行IP轉發
    • tunnel ID為非0x0:查看LFIB表,進行標簽轉發
  • 在這里插入圖片描述

2.LFIB標簽轉發信息表
  • Label Forwarding Information Base

  • 基於LIB表和IP路由表生成,指導標簽報文轉發

  • 由ILM表(入標簽映射表)和NHLFE(下一跳標簽轉發表)構成

NHLFE表(下一跳轉發表項)

在這里插入圖片描述

  • 內容

    • 出接口

    • 下一跳

    • 出標簽

  • 查看方式

    • display tunnel-info tunnel-id xxx
      display mpls lsp include x.x.x.x 32 verbose
      

ILM表(入標簽映射表)

在這里插入圖片描述

  • 內容

    • 入標簽
    • 入接口
    • tunnel ID(token)
    • 標簽操作類型
  • 查看

    • display mpls lsp in-label xxxx verbose
      display mpls lsp
      

FIB表通過tunnel ID關聯到LFIB表,ILM表通過tunnel ID關聯到NHLFE表

3.轉發方式
  • 接收到IP數據包,查看目的地址對應的tunnel ID

    • tunnel ID為0x0:進行IP轉發
    • tunnel ID為非0x0:查看LFIB表,進行標簽轉發
  • 接收到帶MPLS標簽的數據包,直接查看LFIB表

    • LFIB出標簽為普通標簽進行標簽交換
    • LFIB出標簽為空標簽查看FIB進行IP轉發

三、MPLS的數據轉發流程

當數據進入MPLS域時:

根據FIB表查找相對應的轉發條目,轉發條目中包含tunnel ID字段**

查看tunnel ID字段

  • tunnel ID為0x0,進行IP轉發
  • tunnelID為非0x0,進行MPLS轉發

查看二層頭部信息中的TYPE字段

  • type=0x0800表示上層為IP
  • type=0x8847表示上層為MPLS

1.ingress的處理

查詢FIB表和NHLFE表指導報文轉發

  • 查看FIB表,根據目的IP地址找到對應tunnel ID

    • display fib 		##可以找到相關目的地的tunnel ID
      
  • 根據tunnel ID找到對應的NHLFE表項,將FIB表項和NHLFE表項相關聯起來(FTN)

    • ##查看詳細信息(出接口、下一跳、出標簽)
      display tunnel-info tunnel-id 0x3
      ##查看詳細信息(出接口、下一跳、出標簽,標簽操作類型)
      display  mpls  lsp  include 4.4.4.4 32 verbose  
      
  • 查看NHLFE表項得出接口、下一跳、出標簽和標簽操作類型

  • 在IP報文中壓入出標簽、同時處理TTL,然后將封裝好的MPLS報文從相應出接口發給下一跳

2.transit的處理

通過查詢ILM和NHLFE表指導MPLS報文轉發

  • 根據MPLS的標簽值查看對應的ILM表,可以得到tunnel ID。

    • display mpls lsp in-label 1025 verbose		##根據標簽查找tunnel id
      
  • 根據ILM表的tunnel ID找到對應的NHLFE表項

  • 查看NHLFE表項,得出出接口、下一跳、出標簽和標簽操作類型

  • 在IP報文中壓入出標簽、同時處理TTL,然后將封裝好的MPLS報文從相應出接口發給下一跳

transit節點上MPLS對不同的label有不同的處理方式

  • 如果label>=16,則用新標簽替換替換舊標簽,同時處理TTL,然后將替換完標簽的報文發送給下一跳
  • 如果label=3,直接彈出標簽,同時處理TTL,然后進行IP轉發或下一層標簽轉發(mpls vpn還有私網標簽)

3.egress的處理

通過查詢ILM表指導MPLS報文轉發,或者查找IP路由表指導IP報文轉發

  • 如果egress節點收到IP報文,查看路由表,進行IP轉發。(上游路由器有次末跳彈出3號標簽)
  • 如果egress節點收到MPLS報文,查看ILM表查看標簽操作類型,同時處理TTL
    • 如果標簽中棧底標識S=1,表明該標簽是棧底標簽,直接進行IP轉發
    • 如果標簽中的棧底標識S=0,表明還有下一層標簽,繼續進行下一層標簽轉發

NHLFE表項為什么存在下一跳?

正常情況下,根據出標簽值和出接口即可完成數據轉發

存在下一跳主要是為了完成二層頭部 目的MAC地址封裝

ILM表項為什么存在入接口?

正常情況下,根據入標簽即可查找到對應的ILM表項

但是設備中的標簽一般會有很多,添加入接口是為了加快標簽的查找時間

tunnel ID的作用?
1.在ingress節點根據tunnel id判斷是進行IP轉發還是MPLS轉發

2.通過tunnel id查找NHLFE標簽

3.標識隧道

四、MPLS的數據報文結構

標簽:短而定長,4字節

在這里插入圖片描述

MPLS報文(32bit)

內容:

1.label
  • 標簽值;20bit;范圍:0-2^20

  • 0---15:特殊標簽、保留位

    • 0:顯示空標簽
    • 3:隱式空標簽
  • 16---1023:靜態分配的標簽

  • 1024---2^20:動態分配的標簽

路由器為FEC分發標簽作為自身入標簽,同一個設備為不同FEC分發的標簽是不能相同的

路由器收到標簽作為自身出標簽,入標簽和出標簽可以相同的也可以不同

標簽值只具有本地意義(不同設備的標簽分發是可以一致的)

2.EXP
  • 實驗位;3bit;范圍:0-7
  • 表示數據優先級,用於QoS
3.S
  • 棧底位;1bit
  • 表示是否是最后一層標簽
    • S=1:表示是最后一層標簽
    • S=0:表示不是最后一層標簽
4.TTL
  • 生存時間;8bit;范圍:0-255
  • 用於MPLS數據防環
  • 兩種模式
    • uniform統一模式(默認)
      • 在入接點將IP報文TTL復制到MPLS報文的TTL中,在MPLS域中IP報文TTL不變
      • MPLS報文在MPLS域內經過一台路由器MPLS報文TTL-1
      • 最后在出節點將MPLS報文TTL重新復制回IP報文TTL
    • pipe管道模式(隱藏MPLS域設備路徑)
      • 在入接點將IP報文TTL復制到MPLS報文的TTL中,在MPLS域中IP報文TTL不變
      • MPLS報文在MPLS域內經過一台路由器MPLS報文TTL-1
      • 最后在出節點,IP報文TTL-1

管道模式下,報文將MPLS域看作一台設備,不會將MPLS報文TTL映射到IP報文TTL。報文經過MPLS域,無論MPLS域內有多少台設備,對於IP報文來說TTL只會減一。這樣可以更好的隱藏MPLS域,保證安全性

mpls		##進入MPLS視圖
entropy-label ttl-mode {uniform | pipe}		##修改模式為 統一/管道

防環

控制層面防環

  • IGP防環
  • LDP防環(默認不開啟)

數據層面防環

依靠TTL防環

五、LSP建立

靜態LSP、動態LSP兩種建立方式

靜態LSP

由用戶通過手工建立的方式為FEC分發標簽建立LSP隧道

優點:不需要交互控制報文,設備資源消耗比較小

缺點:配置麻煩、易出錯;網絡拓撲發送改變,無法動態感知,需要管理員調整

適用於拓撲結構簡單,網絡穩定場景

配置:

在這里插入圖片描述

##配置底層路由協議
##全局視圖下配置
mpls lsr-id 2.2.2.2		//配置該設備的LSR-ID(該地址需要路由可達)
mpls

##接口視圖下配置
interface g0/0/1
mpls	//接口激活MPLS,使得接口能夠發送、接收MPLS報文


##入接點設備AR2配置
static-lsp ingress 4 destination 4.4.4.4 32 outgoing-interface g0/0/1 nexthop 23.1.1.3 out-label 1020		
##傳輸結點AR3配置
static -lsp transit 4 incoming-interface g0/0/0 in-label 1020 outgoing-interface g0/0/1 nexthop 34.1.1.4 out-label 1021		
##出節點設備AR4配置
static-lsp egress 4 incoming-interface g0/0/0 in-label 1021	

檢查命令

display mpls static-lsp

動態LSP

通過交互報文形式為FEC分配標簽,並進行維護

優點:方便管理,可動態感知拓撲發生變化

缺點:交互報文,資源消耗大

有LDP協議、MP-BGP協議

  1. LDP標簽分發協議,主要是為靜態以及IGP協議路由分配標簽(默認只是為32位的主機路由分發標簽)
  2. MP-BGP多協議BGP,主要位BGP VPNv4路由分配標簽(主要用於MPLS VPN)

LDP會話建立過程

在這里插入圖片描述

LDP協議的配置
##1.底層IGP配置(ospf,static等)

##2.全局視圖下配置
MPLS lsr-id x.x.x.x		//配置該設備的LSR-ID
mpls		//開啟MPLS
mpls ldp	//激活LDP協議
##3.接口視圖下配置
interface g0/0/1
mpls 
mpls ldp	//是接口有自動分發的能力

檢查命令

display mpls lsp		//查看LSP
display mpls ldp
display mpls ldp session		//查看鄰居會話

1.LDP鄰居發現

使用hello message報文

設備激活LDP后,互相發送hello message報文

  • DIP為224.0.0.2發送
  • 基於UDP,端口號646
  • 報文攜帶LSR-ID和傳輸地址(transport address),默認一致
  • 發送間隔5s,15超時

在這里插入圖片描述

  • 報文內容
    • LSR ID
    • label space標簽空間
      • 0 基於平面標簽分發:所有接口使用同一套標簽值進行分發
      • 1 基於接口標簽分發:每個接口都存在一套獨立的標簽
    • hold time超時時間:默認15s
    • transport address傳輸地址:用來建立TCP連接

hello message報文主要用於對等體間的互相發現,互相學習傳輸地址,以便建立TCP連接

2.TCP連接

基於TCP,端口號646,保證標簽傳遞時是可靠

傳輸地址大的作為主動端發起TCP連接

以hello報文協商的傳輸地址做連接

在這里插入圖片描述

3.LDP會話建立

使用Initialization message報文和keepalive報文

1.由主動端先發出init報文進行參數協商

  • init報文內容包含:LSR ID、標簽空間ID,標簽分發方式、PDU長度、keepalive的計時器

2.被動端收到init報文。如果協商成功發送keepalive報文確認+init報文進行參數協商;如果協商失敗,發送notification報文終止會話

  • keepalive的計時器:周期15S,超時45S

3.主動端收到init報文。如果協商成功發送keepalive報文確認,會話建立成功;如果協商失敗,發送notification報文終止會話

在這里插入圖片描述

keepalive報文

在這里插入圖片描述

4.通告階段

使用address message報文、label mapping message報文

用來請求、通告及撤銷標簽綁定

Address Withdraw message、Label request message、Label mapping message、Label withdraw message、Label release message、Label abort request message

相互發送address報文

  • 用於給鄰居設備生成表項的下一跳

相互發送maping message報文

  • 用於給鄰居發送FEC+標簽的映射關系

address message
label mapping message

六、MPLS標簽管理

數據從上游(ingress)去往下游(egress)

標簽的分發是下游設備向上游設備發布,下游設備將分配的標簽作為入標簽,上游設備將收到的標簽作為出標簽

1.標簽發布方式

決定是否主動分發標簽

DU方式
  • 下游自主,下游不需要接收上游請求就可以主動向上游發送標簽映射
  • 優點:標簽分配速度快
  • 缺點:浪費內容存儲部分無用標簽
DOD方式
  • 下游按需,下游需要收到上游請求(label request報文)才會主動向上游發送標簽映射
  • 優點:只針對有用路由進行標簽請求,不會存在無用標簽
  • 缺點:分配速度較慢

修改

##兩台設備都要配置
interface g0/0/0
mpls ldp advertisement dod		##修改接口標簽分發方式為DOD

2.標簽分配控制方式

決定LSP隧道是否有序建立

independent方式
  • 獨立方式,不需要收到下游分配的標簽可以往上游分配標簽
  • 優點:LSP隧道建立速度快
  • 缺點:可能造成LSP隧道斷裂
order方式
  • 有序方式,需要收到下游分配的標簽才可以往上游分配標簽
    • FEC的出標簽不為null才會向上游分配標簽
  • 優點:保證隧道的完整性

3.標簽保持方式

Liberal方式
  • 自由方式,會保存不是最優的標簽
  • 優點:存在備份標簽,收斂速度快
conservation方式
  • 保守方式,只保存最優的標簽
  • 優點:減少內存消耗
  • 缺點:當最優標簽鏈路斷開。若存在備份鏈路,需要重新分配標簽,收斂速度忙

案例場景:

R1、R2、R3、R4在同一MPLS域,R1上會收到3.3.3.3/32這條FEC的從兩個方向(R2和R3)來的標簽

在這里插入圖片描述

1.如果是liberal方式,只保存一個最優的 1025或者1027

2.如果是conservation方式,兩個都保存,選擇最優的作為主標簽用於轉發數據,另一個作為備份標簽,當主標簽鏈路斷開,備份標簽會浮現出來

華為默認:DU+ordered+liberal

七、PHP次末跳彈出

隱式空標簽

用於解決最后一跳設備負擔大的問題

在數據發送給最后一跳路由器前提前彈出標簽,使最后一跳路由器只查看一次FIB表,減少最后一條的負擔

實現方式
  • 最后一跳路由器為上游分發特殊3號標簽
    • 最后一跳路由器:一條FEC在MPLS中的egress節點
  • 3號標簽作為倒數第二跳的出標簽
  • 當轉發MPLS數據包時,倒數第二跳發現出標簽為特殊3號標簽,提前彈出標簽,在與最后一條路由器之間的鏈路上使用IP轉發

0號標簽

顯示空白標簽

最后一跳彈出

用於QoS,保證QoS在整個鏈路中不丟失

  • MPLS報文中EXP位

實現:

  • 最后一跳路由器為上游分發特殊0號標簽
  • 0號標簽作為倒數第二跳的出標簽
  • 倒數第二跳LSR將值為0的標簽正常壓入標簽值頂部,轉發給最后一跳路由器,最后一跳路由器發現報文標簽值為0,則標簽彈出

0號標簽和3號標簽區別

0號標簽 3號標簽
名稱 顯示空標簽 隱式空標簽
彈出設備 最后一跳彈出 次末跳彈出
備注 用於有配置QoS的mpls域

華為LDP協議默認情況下置位32位的主機路由分配標簽
在這里插入圖片描述

修改可以為不是32位的主機路由分配標簽

mpls
lsp-trigger all 


免責聲明!

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



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