MPLS(多協議標簽交換) 顧名思義,它不考慮協議(多協議),使用標簽(標簽交換)在網絡中移動數據包。多年來,MPLS 一直是網絡運營商確保實時應用程序可靠連接的首選技術。
MPLS 通過將標簽應用于數據包的報頭來封裝傳入的數據包。MPLS 域中的每個路由器都會查看 MPLS 標簽以了解如何處理每個數據包,但其不查看或關心數據包中的內容,它只關心標簽。當數據包離開 MPLS 域時,標簽將被移除,由標準 IP 路由接管。
可以看出,MPLS技術的核心就是標簽交換。本文我們將從標簽入手,逐步了解什么是MPLS。
MPLS 為什么要使用標簽?
MPLS 為什么要添加標簽?什么是標簽?
我們先看看VLAN 標簽是什么樣,大概就知道什么是 MPLS 標簽了。標簽本身基本上只是數字,如下圖所示,第 4 行寫著“Label:299776”。
在此數據包捕獲中,標簽被插入到“第 2 層”以太網報頭和“第 3 層”IP 報頭之間。這就是為什么有人說 MPLS 工作在“第2層半”。
這些數字,也就是這些標簽,只對接收數據包的路由器有意義。本質上,標簽就像一條指令,這條指令通常做兩件事:
它告訴接收路由器如何轉發數據包
或者,它告訴接收路由器該數據包是特定 VPN 的一部分
當一個標簽用于在特定方向轉發數據包時,我們稱之為傳輸標簽。當一個標簽用于告訴路由器該數據包屬于一個特定的 VPN 時,它被稱為服務標簽,有時也稱為VPN 標簽。MPLS VPN 讓許多客戶都可以使用相同的私有 IP 范圍,因為接收路由器不會查看目標 IP 地址。相反,VPN 標簽會告訴路由器數據包屬于哪個客戶。
路由器如何學習這些標簽?
IP 是一種尋址方案,需要其他協議在各處實際通告 IP。我們可以以類似的方式考慮 MPLS:MPLS 是一種標簽方案,需要其他協議在各處實際通告這些標簽。
先說說如何通告MPLS傳輸標簽。有四種常見的方法,這四種協議以完全不同的方式工作,并且有不同的用例。
LDP(Label Distribution Protocol)代表標簽分發協議。這是一個非常基本的協議,并且易于配置。流量將始終遵循 OSPF/IS-IS 指定的最佳路徑。在 MPLS 網絡中,兩個標簽交換路由器(LSR)必須用在它們之間或通過它們轉發流量的標簽上達成一致。
RSVP是資源預留協議。RSVP 相比LDP 需要手動配置,但優勢在于它提供了大量的流量工程功能,能夠按照路由協議的要求以不同的方式移動流量,例如繞過帶寬問題進行路由,或明確避免網絡中的某些鏈路。
分段路由是一種在 OSPF 或 IS-IS 內部發布標簽的方法,這意味著不需要運行額外的協議來通告標簽。它可以實時告訴路由器使用哪個標簽到達哪個目的地。通過將決策置于中央控制器中,可以獲得真正的網絡全局視圖,甚至在 OSPF 區域或 IS-IS 級別,以及不同的自治系統之間。
BGP-Labelled Unicast是一個特殊的 BGP 地址族,往往只用于一些非常特地的、更高級的場景。
MPLS VPN 標簽幾乎都是在 BGP 中通告的。畢竟,如果不能在兩個路由器之間傳輸數據包,就不能在它們之間運行 VPN。
路由器如何處理這些標簽?
兩個路由器之間的對話可能是這樣的,路由器 B 對路由器 A 說“如果你想讓我將數據包轉發給路由器Z,包裹寄給我的時候貼上標簽123456”。然后路由器 B 會對自己編程,如果數據包帶有標簽 123456,則該數據包會始終從特定接口發送出去。
路由器 B 并不知道這個傳出接口是不是通往路由器 Z 的“最佳”路徑。當路由器 B 將此數據包發送到路由器 C 時,路由器 C 也將根據標簽知道如何處理該數據包,路由器 D 和路由器 E 等也會如此,一直到終點目的地。只要從一端到另一端有一個標簽交換路徑,沿途的路由器就能夠成功地將數據包從 A 傳輸到 Z 。
路由器 B 甚至可能在發送標簽時將標簽更改為其他內容。在 LDP 和 RSVP 中,標簽通常只對路由器本身有意義,沿途的每個路由器都可以自己決定它希望前一跳使用什么標簽。當標簽沿途發生變化時,我們稱之為“交換”標簽。例如,路由器 A 將標簽為 123456 的數據包發送到路由器 B ,路由器 B 在將其發送到路由器 C 之前可以將其“交換”為標簽 345678。
(相比之下,Segment Routing 中的某些標簽是全局的,因此它不是MPLS 的通用規則。)
上面的例子要理解的關鍵是,當路由器 B 收到數據包并將其轉發到路由器 C 時,路由器 B 根本沒有查看目標 IP。相反,是傳輸標簽告訴路由器 B 如何處理數據包。
因為沒有查看底層目標地址,所以協議可以是 IP、IPv6 或任何其他協議,所以說是多協議標簽交換。
向數據包添加標簽有何意義?
到目前為止所說的一切聽起來都非常像常規 IP 路由。如果沒有 MPLS,路由器也會查看目標 IP 地址,然后將數據包發送到下一跳。那么MPLS 有什么意義呢?
如果將網絡設置為每個路由器都知道整個網絡中的每個 IP 地址,那么路由器 B 肯定可以從路由器 A 接收數據包,查看目標地址,檢查自己的路由表,找到“最佳”路線,然后發送數據包。
但這里有一個問題:如果不想讓一切都發送到所謂的“最佳”路徑,會發生什么?
例如,如果所有內容都沿著一條“最佳”路徑發送,則該鏈接可能會開始被大量使用,甚至可能達到極限。很可能會有其他根本沒有被使用的潛在路徑,最好將一些選擇性流量發送到次優路徑,以充分利用網絡。
當存在另一條不太好且帶寬可用的路徑時,該如何解決鏈路飽和的問題?
如果從路由協議的角度來看,有兩條或多條到達目的地的路徑同樣“好”,那么可以利用ECMP 或等價多路徑,對流量進行負載平衡,并充分利用鏈接。
SD-WAN可以根據目的 IP 地址以外的質量,有選擇地將流量路由到不同的鏈路,也許是基于應用程序本身,也可能是源 IP 地址。這對分支機構來說非常好,但對于每秒有很多千兆流量的服務提供商規模的網絡,以及數以萬計的用戶前往數百萬目的地的網絡來說,很難真正的擴展。
我們需要的是某種可擴展的、功能豐富的協議,它允許以選擇的任何方式發送流量,而不總是遵循“最佳”路徑。
幾十年前,這個問題正是服務提供商和大型企業面臨的問題之一,而MPLS 就是解決答案。
標簽交換路徑
基于標簽轉發數據包的系統的優點在于,中轉路由器不需要知道,甚至不需要關心數據包上的 IPv4 或 IPv6 地址。它們只關心數據包進入了帶有標簽 X 的接口,因此應該從帶有標簽 Y 的不同接口發送出去,以便路徑上的下一個路由器知道如何處理它。
我們稱這個端到端標記路徑為LSP,或標簽交換路徑。
從路由器 1 開始檢查 LSP ,一直到路由器 10。為了方便起見,我們假設它是通過RSVP創建的。給 RSVP LSP 一個名字和一個目的地,結果如下所示:
LSP 是單向的,如果要使流量在真實網絡中正常工作,需要在相反的方向上建立第二個 LSP。但為了簡單演示,我們只關注一個 LSP 。
如上圖所示:
路由器 1 和路由器 10 是PE 路由器,或Provider Edge。
路由器 2、3、4 和 5 都是中轉路由器,簡稱為P(Provider)路由器。
路由器 1 稱為首端或入口路由器,將 LSP 想象成流量進入的隧道。
同樣,路由器 10 稱為尾端或出口路由器。
假設R1 和 R10 正在進行BGP,R10 對 R1 說:“如果你想到達 69.69.69.0/24,請將流量發送給我。”之后,R10 會將通告其環回為該前綴的下一跳。LSP 進入R10 的環回。
路由器 2、3、4 和 5 不需要運行 BGP,它們只查看數據包上的標簽,不查看 IP 地址。然后計算出需要從哪個接口傳出,相應地交換標簽。
MPLS VPN
假設客戶需要為其各個辦公室購買 100 個 WAN 鏈接,但要求將其放在自己的專用網絡中,不要放在公共互聯網上。服務提供商該如何實現這一點?
可以通過在 WAN 鏈接的末端添加一些額外的配置。
服務提供商會在一個路由器內部創建多個“虛擬”路由表,這些路由表相互獨立,互不通信。客戶有自己專門的路由表,稱為 VRF,代表Virtual Routing and Forward。
除了客戶和服務提供商之外,沒有人可以“看到”流量。客戶之間無法相互通信,因為他們在完全獨立的路由表中。
核心路由器不運行 BGP,它們不知道涉及的 IP,甚至不查看 IP 標頭。它們只看標簽,然后進行相應地轉發。MPLS VPN 的工作方式完全相同。VPN 只需要被邊緣路由器知道即可。可以沿著標簽交換路徑發送 VPN 流量,這意味著核心設備甚至不需要知道 VPN 的存在,它們只需要知道將流量發送到哪個遠程 PE。
但這里有一個問題:在剛才看到的拓撲中,如果 R1 發送一個數據包到私有 IP 地址 10.0.6.9,在數百個 VPN 客戶中,R10 如何知道這個前綴屬于哪一個?
這就是標簽堆棧思想由來。我們可以在數據包內添加第二個標簽,告訴 R10 該數據包屬于哪個 VPN。數據包捕獲如下:
以太網報頭
外層傳輸標簽<--逐跳更改
內部 VPN 標簽 <–僅對 R10 有意義
IP報頭
TCP/UDP 等報頭
有效載荷
沿途的每一跳只查看外部標簽,然后當數據包到達 R10 時,該 PE 可以查看內部 VPN 標簽并確定它的真正目的地。
這個 MPLS 標簽保留在服務提供商核心中,從 PE 到現場客戶路由器的實際 WAN 鏈路將是純 IP。只有在穿過服務提供商網絡時才需要標簽:從服務提供商到客戶的流量沒有標簽。
編輯:何安
-
網絡
+關注
關注
14文章
7567瀏覽量
88794 -
MPLS
+關注
關注
0文章
131瀏覽量
24150 -
數據包
+關注
關注
0文章
261瀏覽量
24396
原文標題:一文讀懂MPLS
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論