多協議標簽交換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
- uniform統一模式(默認)
管道模式下,報文將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協議
- LDP標簽分發協議,主要是為靜態以及IGP協議路由分配標簽(默認只是為32位的主機路由分發標簽)
- 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+標簽的映射關系
六、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