CCNP9:MPLS 虛擬網絡專線的【原理、配置】、MPLS的【原理、優化、配置】、MPLS解決BGP路由黑洞

CCNP9:MPLS 虛擬網絡專線 的【原理、配置】、MPLS的【原理、優化、配置】、MPLS解決BGP路由黑洞

一、MPLS(多協議標籤交換):

我們之前說過一個AS內部在運行BGP協議時,如果有AS沒有運行BGP協議,那麼該設備的存在就會導致路由黑洞,因爲在數據層面它沒有路由。

爲了更好的解決路由黑洞,我們就使用這個技術:MPLS

1、早期的MPLS:

有關名詞:
包交換:依賴報文中的IP地址進行數據轉發(基於3層IP地址進行路由)。

標籤交換:在二層與三層的中間,人爲的添加一個2.5層出來。之後路由器查看不再使用3層,而是基於2.5層進行轉發(基於2.5層標籤號路由)

在沒有CEF技術的時候,假設當要去往1.1.1.0/24這個網段,它的標籤號是17,去這個網段的出接口爲F0/0,源、目MAC分別是X、Y。這些都需要MPLS自己解決,需要看路由器的路由表、ARP表

早期的MPLS最初的意義是讓中間的設備僅僅在於查一張表,這樣能夠相對較快,隨着CPU的運算能力的不斷提升,包交換方式從原始到傳統(一次路由多次交換)、到最後的CEF快速的數據交換方式出現,MPLS在速度方面的優勢已經完全沒有了,幾年之後它就在這方面被淘汰了。

但至於今天MPLS不但保留而且非常流行的原因是:MPLS在有些方面是不可以被替代的,它有以下主要應用:
①解決BGP的路由黑洞,運營商首先要考慮。
②實現MPLS 虛擬網絡專線,它是所有 虛擬網絡專線中最接近於專線的。
③做MPLS TE 流量工程

2、相關理論:

(1)現在的MPLS使用的前提是設備基於CEF工作:
是因爲CEF有以下作用:
①啓動CEF後,表格(二進制數)可以被ASIC(硬件芯片)直接調用
②CEF解決了遞歸問題,便於MPLS生成標籤轉發表格。
③CEF工作後生成FIB表,只有FIB可以存儲標籤表。

(2)控制層面:

這個我會一會兒詳細的講,現在只有腦海中留個印象就可以了。

用於交互路由信息(路由協議收斂),進行標籤號的分發,就是爲相應的路由分對應的標籤。

(3)數據層面:
根據路由錶轉發用戶數據報文,基於標籤號進行數據轉發,壓入標籤、彈出標籤。

3、MPLS的基本工作原理:

(1)控制層面:

R4把去往B的路由給R3時(或者我們可以理解爲通過IGP/EGP交互路由條目時),R3首先生成路由表,路由表生成之後就會生成ARP表。
在這裏插入圖片描述

接着CEF基於路由表解決了遞歸問題生成FIB表。然後 TDP(私有)/LDP(公有)基於CEF表格中的每一個目標網絡號生成標籤號,進而形成一張表格LIB表,最後將FIB表和LIB表相結合生成LFIB表。

總結一下這些表:

註解
路由表 通過交互獲取路由條目時,首先生成。
FIB表 轉發信息數據庫,這個一般情況下就有,由CEF基於路由表並解決遞歸生成。
LIB表 標籤信息數據庫(本地和鄰居關於所有學習到的路由條目生成的標籤號)
LFIB表 標籤轉發信息數據庫(LFIB=FIB+LIB),包含目標網絡號、標籤號、出接口、[源、目]MAC。

但是上面的FIB表不完整,我們知道R3會把去往B網段的路由還會發給R2,同理R2也會建立一張LFIB表,R2對於該網段也會生成一個標籤,這裏假設爲20
在這裏插入圖片描述

(2)數據層面:

那麼對於完整的LFIB表來說,去往某網段,還應該包括進來的標籤號,替換的標籤號,出接口,新的源、目MAC。

例:R3的LFIB裏記錄了去1.1.1.0網段時,進來的標籤號爲20,出去替換的標籤號爲27,出接口,以及出接口的新的源、目MAC

這張圖是A訪問B的時候:
在這裏插入圖片描述
這樣子做,R2、R3就比較省事只用查一張表,R1、R4是查兩張表。

(3)MPLS工作過程總結:

當控制層面使用路由協議傳遞路由條目後,路由器上使用TDP/LDP爲本地FIB表中每一條存在的路由條目均分配一個標籤號,裝載於LIB表中,同時傳遞給鄰居。

LIB中還記錄鄰居傳遞到本地標籤號,之後路由器基於本地FIB和LIB表生成LFIB(標籤轉發信息數據庫——記錄標籤號的最佳路徑對應關係

數據層面工作時,第一跳路由器負責標籤的壓入,中間路由器基於標籤號轉發流量,進行標籤號的替換,最後一跳路由器負責標籤的彈出。

注:入標籤號爲本地分配的標號,出標籤爲下一跳(下游)分配的標籤號。基於數據層面定義,存在上下游路由器概念。

4、MPLS細化:

(1)MPLS的數據封裝:
MPLS的數據封裝與2層和3層之間,故稱爲2.5層。
在這裏插入圖片描述
(2)MPLS的數據包格式:
下面這部分就是打進去的東西,總長度爲32位(4個字節)。
在這裏插入圖片描述

位數 名字 作用
0-19 Label
標籤號
存在2^20個號碼,其中0-15號保留,一個標籤號對應一條路由。
20-22 EXP
優先級
存在2^3=8個優先級,用於QOS
23 S
棧底位
爲1標識本信息爲最後一層標籤信息,最多可以存在3層標籤
24-31 TTL
生存時間
當標籤號被壓入時,將複製3層報頭的TTL值,然後每經過一個路由器減1,當標籤號彈出時,將現在TTL的標籤號複製回 IP 報頭中。

在這裏插入圖片描述
一層標籤爲普通MPLS,主要用於解決BGP的路由黑洞。
二層標籤爲MPLS 虛擬網絡專線使用。
三層標籤爲MPLS TE 使用。

使用MPLS後,二層若依然爲以太網封裝,那麼類型號將變化:
0x8847 MPLS單播
0x8848 MPLS多播

5、有關MPLS名詞註解:

在這裏插入圖片描述

名詞 註解
MPLS domain MPLS工作的範圍
LSR
(P路由器)
標籤交換路由器,查看數據包的標籤號,然後基於LFIB表進行轉發
Edge LSR
(PE路由器)
邊界標籤路由器,在數據層面時:MPLS域的第一跳路由器負責標籤的壓入,最後一跳負責彈出。
CE
客戶端路由器
不工作於MPLS域,使用FIB錶轉發流量。

二、MPLS的優化(次末跳):

MPLS的優化,又叫做PHP的次末跳(次末跳:倒數第二跳),默認執行
在這裏插入圖片描述
最後一跳路由器,在默認情況下需要查看LFIB表後再查看FIB表(由於最後一跳路由器在LFIB表中確實找不到下一跳了,因此它需要彈標籤,彈完標籤後就會查FIB表)

之後再轉發數據,PHP次末跳可以使倒數第二跳在已知出接口、下一跳等信息時便將標籤號彈出,然後基於出接口轉發流量。導致最後一跳路由器發現沒有標籤了,那麼它就僅查看FIB表

最後一跳路由器,將本地直連路由傳遞給鄰居時使用標號3來告知對方爲倒數第二跳。

非直連路由正常分配標籤號,針對域外的非直連路由,域內的最後一跳路由器需要查詢兩張表。因此建議PE路由器直接連接用戶,不再連接其他路由器。

標識 註解
pop 標識僅彈出最上層標籤,僅僅只是倒數第二跳(PHP的另一種解釋)
untagged 彈出所有標籤,意味離開了MPLS domain。

三、MPLS的配置:

在這裏插入圖片描述
1、首先要有路由
2、Cisco默認開啓CEF:

R2(config)#ip cef

3、修改MTU,鏈路兩端需一致(可選,建議配置),凡是標籤涉及到的接口建議都配置MTU:

MPLS 建議MTU
普通MPLS 1504
MPLS 虛擬網絡專線 1508
MPLS TE 1512
R2(config)#interface s0/1
R2(config-if)#mtu 1504

4、開啓MPLS,在標籤號所有需要經過的接口上配置

R2(config)#interface s0/1
R2(config-if)#mpls ip

5、修改MPLS的封裝類型:

R2(config)#mpls label protocol ?  
  ldp  Use LDP
  tdp  Use TDP (default)

MPLS協議在工作時,存在兩種封裝:

封裝 屬性 端口號 註解
TDP Cisco私有 TCP/UDP 711 Hello包基於UDP傳輸,標籤信息基於TCP傳輸
LDP 公有 TCP/UDP 646 Hello 包基於UDP傳輸,標籤信息基於TCP傳輸

注:Cisco ios 版本12.4(3)以下設備默認使用TDP,以上使用LDP。

6、查看鄰居表:
協議開啓之後,鄰居間使用hello包建立鄰居關係,生成鄰居表。

//查看MPLS的鄰居表,鄰居存在RID,RID的選舉規則同OSPF一致
R1#show mpls ldp neighbor

在這裏插入圖片描述
注:RID同時作爲了建立TCP會話的源、目IP地址,若存在環回,那麼默認使用環回作爲RID,此時就必須將環回宣告到路由協議中,必須可達。

//修改RID爲S1/1口的地址
R2(config)#mpls ldp router-id serial 0/1 ?  
  force  Forcibly change the LDP router id   //立即生效
  <cr>                               //  重啓設備後生效

7、查看FIB、LIB、LFIB:
當鄰居關係建立後,鄰居間將會基於FIB表生成的標籤號傳遞給鄰居,保存於LIB表中:

//查看FIB表
R2#show ip cef detail  
//查看LIB表,LIB表中包含,我到該網段的 tag 編號,和鄰居到達該網段 tag 的編號。
R2#show mpls ldp bindings 

在這裏插入圖片描述
之後將LIB表和FIB表進行結合,生成LFIB表,基於該表格進行標籤流量轉發。

//查看LFIB表
R2#show mpls forwarding-table

在這裏插入圖片描述
如何驗證是否打標籤?
方法一:在打標籤的接口抓包
在這裏插入圖片描述
方法二:追蹤:
在這裏插入圖片描述

四、MPLS解決BGP路由黑洞:

在這裏插入圖片描述
接下來,我們說MPLS解決BGP的路由黑洞,首先如上配置兩兩之間建立好BGP鄰居關係。
配置好BGP鄰居關係後,將R2-R5之間處在MPLS域中的接口配置MPLS並設置MTU如下:

R2(config)#interface s0/1
R2(config-if)#mtu 1504
R2(config-if)#mpls ip

路由黑洞直接解決:
在這裏插入圖片描述
現在我們理一下整個過程是怎樣忽悠中間沒有運行BGP的R3和R4的:
①R1上ping 6.6.6.6的時候,R1需要發包,發包後查路由表下一跳是R2(此時還沒有標籤)。
②R2收到這個包後,由於該包沒有標籤,因此R2需要查詢FIB表,並貼入一個標籤17給R3。
在這裏插入圖片描述
③R3收到的路由是有標籤的,因爲這條路由是有標籤的,因此R3不再查路由表,而是查詢LFIB表。
在這裏插入圖片描述
④然後替換17號標籤爲20號,併發給R4,R4也是查詢LFIB表。
在這裏插入圖片描述
⑤R4然後彈出這個標籤,並從S0/1口將流量轉發給R5,R5由於存在路由,因此它會給R6。這樣數據層面流量就過去了。

它流量能過去的原因就在於R3、R4根本沒有查看三層IP,看的是標籤號,然後基於標籤號轉走。它到R5的環回的流量和到R6環回的流量的標籤號都是一樣的。把所有的中間黑洞設備全部都忽悠了,R3和R4以爲是到R2的下一跳R5,但卻不知道真正的目標是其它設備的。
在這裏插入圖片描述
總結:MPLS將爲FIB表中的路由條目分配標籤號,但通過BGP學習的條目不分配,而是在訪問BGP目標時,壓入到達下一跳地址的標籤號,來通過中間未運行BGP協議的網絡到達下一跳處。

五、MPLS 虛擬網絡專線(ISP技術):

MPLS 虛擬網絡專線,它是最接近於專線的虛擬網絡專線技術流量隔離、帶寬要有保障)。該技術一般由運行商(ISP)配置,運營商配置完成後,MPLS 虛擬網絡專線不能用來上網,該虛擬網絡專線只是讓兩個企業內網通。

1、MPLS原理:

在這裏插入圖片描述
圖向上面這樣,由於MPLS不能上網,因此運營商沒有必要給企業公網IP,因此我們可以看到圖中運營商的路由器和企業的路由器之間連得線所配的IP是私網IP。

具體原理是這樣:
控制層面:
(1)R1如何將自己的私有網段 192.168.2.0 交給公有設備?(可以先跳過此處)
是因爲R2上開闢了一塊VRF空間,R2在VRF空間中宣告這個私有網段,就實現了公有設備擁有私有網段了。

(2)R1、R6將自己的私有網段傳給R2,很有可能出現兩個網段是一樣的。因此R2要區分開兩家公司(CE端)來的路由,它要爲兩流量賦值,賦的值是RD值。
RD值:路由區分器,一個64位的16進制數,表示方法爲 X:X,一個源(CE端)對應一個RD值和一個接口
在這裏插入圖片描述
假設R2,爲R1來的路由RD賦值爲1:1,R6來的路由賦值爲2:2。
(3)ISP路由器(R2)不能將CE端的路由條目裝載到本地普通的路由表中,因此它需要存儲於VRF空間內。
VRF:虛擬路由轉發,基於每個RD和接口一個空間。
在這裏插入圖片描述
(4)由於VRF空間內的路由不是普通的路由條目(負責傳遞公網路由表中條目),因此必須使用MP-BGP路由協議來傳遞,因此我們還需要定義RT值。
VRF內的路由被稱爲 虛擬網絡專線v4路由 (虛擬網絡專線v4路由=IPv4路由+RD值+RT值)
在這裏插入圖片描述
之所以用MP-BGP是因爲RT值是BGP的一種社團屬性,其次該協議可非直連建鄰。

RT值,用於區分不同 目標 接受者,RT值和RD值的編寫格式一致。

(5)R4收到路由條目目後,也不能把這種路由裝到正常的路由條目中,它也需要裝到對應的VRF空間內,這個空間靠RT值和R2上的空間對上,根據RT區分不同的目標給不同的公司。
在這裏插入圖片描述
數據層面:
比如說R5 ping R1環回:
R5把流量給R4,R4到下一跳R2,R4-R2之間使用MPLS。R4爲流量封裝兩層標籤,外標籤用於穿越中間的黑洞路由器,內層標籤用於告知R2所查詢的VRP空間。

MPLS 虛擬網絡專線保證了安全與帶寬:
從上面我們看到MPLS 虛擬網絡專線的流量在中間傳的時候,不是絕對的安全,但理論上在運營上的環境內是安全的。
而帶寬的保證靠運營商做QOS策略。

2、MPLS的配置:

在這裏插入圖片描述

(1)ISP中的配置:

步驟
①單播路由表R2、R3、R4之間首先要可以通
②配置CEF
③配置MPLS,建議同時修改MTU 1508
④定義VRF空間,同時關聯所連接的CE端接口,再同時定義RD、RT值。

R2和R4都要配置:
// 創建VRF空間,名爲a1
R2(config)#ip vrf a1
R2(config-vrf)#rd 1:1    			//配置RD值
R2(config-vrf)#route-target 1:1  	//配置RT值,一般一家公司的RD和RT值是一樣的。

//進入關聯接口
R2(config)#int s1/0
//默認該接口IP地址所在直連路由處於普通路由表中,現需轉移到VRF空間內,故先將地址清洗
R2(config-if)#no ip address
//與之前創建的VRF空間進行關聯
R2(config-if)#ip vrf forwarding a1
//重新定義地址
R2(config-if)#ip add 192.168.2.2 255.255.255.0
注:此時普通路由表中將不再存在該接口的直連路由,而是裝載到了綁定的VRF空間內。

可以使用以下命令查看VRF空間內的路由表:

R2# show ip route vrf a1

在這裏插入圖片描述
默認 ping 時,使用普通路由表,若需要基於VRF空間內的條目通訊:

R2#ping vrf a1 192.168.2.1

在這裏插入圖片描述

(2)配置MP-BGP在兩個 PE端(R2、R4)配置:

R2(config)#router bgp 1
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#neighbor 4.4.4.4 remote-as 1
//先建立IPv4鄰居關係
R2(config-router)#neighbor 4.4.4.4 update-source loopback 0

//進入MP-BGP家族模式
R2(config-router)#address-family vpnv4
//建立MP-BGP鄰居關係
R2(config-router-af)#neighbor 4.4.4.4 activate
//開啓社團屬性的傳遞性
R2(config-router-af)#neighbor 4.4.4.4 send-community 

(3)將CE端(R1、R5)私網路由傳遞到PE端(R2、R4)

①使用靜態傳遞:

CE端,正常配置靜態路由即可
PE端配置到CE私網的靜態路由,必須配置到VRF空間內

R1(config)#ip route 192.168.3.0 255.255.255.0 192.168.2.2
R1(config)#ip route 192.168.4.0 255.255.255.0 192.168.2.2
R2(config)#ip route vrf a1 192.168.1.0 255.255.255.0 192.168.2.1

R5(config)#ip route 192.168.1.0 255.255.255.0 192.168.3.1
R5(config)#ip route 192.168.2.0 255.255.255.0 192.168.3.1
R4(config)#ip route vrf a2 192.168.4.0 255.255.255.0 192.168.3.2

此時,還需要BGP帶路由,因此R2、R4上都要配置:

R2(config)#router bgp 1
//將該空間的靜態、直連路由重發布到BGP中
R2(config-router)#address-family ipv4 vrf a1
R2(config-router-af)#redistribute static 
R2(config-router-af)#redistribute connected

最後我們查看一下VRF空間:

R2#show ip bgp vpnv4 vrf a1

在這裏插入圖片描述
最後檢測一下,證明控制層面和數據層面全部可達。
在這裏插入圖片描述

②使用RIP:

CE端正常啓動和宣告RIP協議即可
PE端配置:啓動後進行雙向重發布即可

R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#no auto-summary 
R2(config-router)#address-family ipv4 vrf a1
R2(config-router-af)#network 12.0.0.0
R2(config-router-af)#redistribute bgp 1 metric 1

//在BGP的VRF空間中重發布RIP:
R2(config)#router bgp 1
R2(config-router)#address-family ipv4 vrf a1
R2(config-router-af)#redistribute rip 
③使用EIGRP:

CE端正常啓動和宣告即可
PE端配置:啓動後進行雙向重發布即可

//啓動時必須配置該設備所在真實的AS號
R2(config)#router eigrp 1   
R2(config-router)#no auto-summary 
R2(config-router)#address-family ipv4 vrf a1
// 申明鄰居使用的AS號
R2(config-router-af)#autonomous-system 90  
R2(config-router-af)#network 12.0.0.0
R2(config-router-af)#redistribute bgp 1 metric 1544 100 255 1 1500

R2(config)#router bgp 1 
R2(config-router)#address-family ipv4 vrf a1
// 重發布時,使用私有的AS號
R2(config-router-af)#redistribute eigrp 90 
④使用OSPF:

CE端正常配置即可
PE端配置:啓動後雙向重發布

R2(config)#router ospf 1 vrf a1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 12.1.1.2 0.0.0.0 a 0
R2(config-router)#redistribute bgp 1 subnets 

R2(config)#router bgp 1 
R2(config-router)#address-family ipv4 vrf a1
R2(config-router-af)#redistribute ospf 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章