MPLS基礎

作者:肖宏輝
鏈接:https://zhuanlan.zhihu.com/p/27232535
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

MPLS是什麼?
從發展歷史來看,MPLS並非是一個非常新的技術,最早可以追溯在1997年,相應的IETF工作組就成立。在2001年,相應的RFC3031就發佈了。從字面意思來看,MPLS全稱是Multi-Protocol Label Switching,直譯過來就是多協議標籤交換技術。維基百科是這麼定義MPLS的:一種在通訊網絡上的高性能數據傳輸技術。信息太少,沒法理解,不要着急,往下看。
MPLS解決了什麼問題?
傳統的路由網絡裏面,當一個(無狀態的)網絡層協議數據包(例如IP協議報文)在路由器之間遊蕩時,每個路由器都是獨立的對這個數據包做出路由決策。路由決策就是路由器決定數據包如何路由轉發的過程。路由決策在後面會多次提到,在這裏指,每個路由器都需要分析包頭,根據網絡協議層的數據進行運算,再基於這些分析和運算,獨立的爲數據包選擇下一跳(next hop),最後通過next hop將數據包發送出去。
以IP協議報文爲例,路由決策是基於目的IP地址,路由器根據目的IP地址,選擇路由條目,再做轉發。路由決策可以認爲是由兩部分組成:分類,將特定的數據包歸屬爲一個等價轉發類(Forwarding Equivalence Classes,FECs)查找,查找FEC對應的next hop
MPLS基礎

對於同一個路由器來說,同一個FEC必然對應同一個next hop,那麼屬於同一個FEC的所有網絡數據包必然會走同一條路徑轉發出去。(注,在多鏈路負載均衡的情況下,一個FEC也可能對應一組next hop,但是邏輯上還是能看成是一個next hop,因爲殊途同歸!)

具體到IP協議報文,當多個IP協議報文的目的地址都對應路由器的一條路由,且這條路由是所有路由裏面最長匹配(longest match)的路由,那麼對於這個路由器來說,就會認爲這兩個IP協議報文屬於一個FEC。因此,這兩個數據包就會走同一條路徑出這個路由器。這就是我們最常見到的路由轉發。需要注意的是,這裏的FEC是針對路由器的,而不是全局的。舉個例子,目的地址爲192.168.31.1和192.168.31.100的兩個IP協議報文,第一個路由器具有192.168.31.0/24這條路由,那麼在第一個路由器它們屬於同一個FEC,都會被轉發到第二個路由器。第二個路由器具有192.168.31.0/26和192.168.31.0/24兩條路由,並且兩條路由的next hop不一樣。因爲192.168.31.0/26能更精確的匹配192.168.31.1,所以192.168.31.1匹配第一條路由,而192.168.31.100匹配第二條路由,最終,這兩個IP協議報文在第二個路由器被認爲是不同的FEC,從不同的路徑出去。這就是每個路由器都需要獨立的做路由決策的原因之一。路由器的工作原理如下圖所示:

MPLS基礎

由於每個路由器都需要獨立的路由決策(雖然會有這樣那樣的緩存機制加速決策),而路由器的收發隊列一旦滿了,就會丟包。所以在一個高流量,高容量的網絡裏面,無疑對每個路由器的要求都很高(否則就會丟包了!)針對這個問題,MPLS提出了類似的,但是更簡單的另外一種路由決策的方法。傳統的路由決策,路由器需要對網絡數據包進行解包,再根據目的IP地址計算歸屬的FEC。
而MPLS提出,當網絡數據包進入MPLS網絡時,對網絡數據包進行解包,計算歸屬的FEC,生成標籤(Label)。當網絡數據包在MPLS網絡中傳輸時,路由決策都是基於Label,路由器不再需要對網絡數據包進行解包。並且Label是個整數,以整數作爲key,可以達到O(1)的查找時間。大大減少了路由決策的時間。這裏的Label就是MPLS裏面的L。需要注意的是Label在MPLS網絡裏面,是作爲網絡數據包的一部分,隨着網絡數據包傳輸的。

也就是說,在MPLS網絡裏面,數據被封裝在了盒子裏,上面貼了標籤,每個經手的人只需要讀標籤就知道盒子該送到哪。而傳統的路由網絡裏面,每個經手的人都需要打開盒子,看看裏面的內容,再決定送往哪。 這裏提到了MPLS網絡,這是一個由相連的,支持MPLS的設備組成的網絡。打上MPLS標籤的數據可以在這個網絡裏面傳輸。MPLS的核心就是,一旦進入了MPLS網絡,那麼網絡數據包的內容就不再重要,路由決策(包括FEC歸屬的計算,next hop的查找)都是基於Label來進行的。

從目前看,MPLS帶來的好處是,在MPLS網絡裏面,除了邊界路由器,其他路由器可以由一些支持Label查找替換的低性能的交換機,或者路由器來完成。這一方面降低了組網的成本,另一方面提升了同樣性能設備的轉發效率。不過,隨着路由器的發展,這方面的優勢弱化了,而且,類似的問題,也不一定需要MPLS來解決。MPLS的價值更多的在於其他方面。
不過初步理解MPLS,就先說這些。到目前爲止,MPLS裏面的M,P,L都介紹過,S其實也隱含的介紹過,S是Switching的意思,即基於Label做路由決策的意思,或者說標籤交換裏面的交換。相信大家也明白了爲什麼說MPLS是一種高效的數據傳輸的技術。

MPLS術語
相較於傳統的路由交換技術,MPLS是一個全新的世界,因此有必要對MPLS中的一些術語和角色做一些解釋。同時,爲了表述簡單,後面都用IP協議報文代替網絡數據包來進行描述。
FEC(Forwarding Equivalence Class):交換等價類,前面描述過,同樣的轉發路徑的網絡數據包的集合。
MPLS網絡:由支持MPLS的,相連的設備的構成。
LSH(Label Switching hop):IP協議報文從一個MPLS設備發送到另一個MPLS設備,區別於傳統的路由交換,LSH是基於Label的轉發。
NHLFE(Next Hop Label Forwarding Entry):LSR中用來轉發條目,相當於路由表之於路由器。包含了: 下一跳:nexthop 對數據包的當前label需要做的操作,包括了:
替換(SWAP)
MPLS基礎

刪除(POP)
MPLS基礎

MPLS基礎

添加(PUSH)
MPLS基礎

MPLS基礎

LER(Label Edge Router):有的地方也叫做 MPLS edge node。顧名思義,MPLS網絡的邊緣設備。

MPLS ingress node:進入MPLS網絡的節點,也就是MPLS網絡的入口路由器。該設備計算出IP協議報文歸屬的FEC,並把相應的Label放入IP協議報文。
MPLS egress node:出MPLS網絡的節點,也就是MPLS的出口路由器。IP協議報文在這裏回到傳統的路由系統中。
LSR(Label Switching Router):支持MPLS轉發的路由器。如果一個LSR有一個鄰接的節點在MPLS網絡之外,那麼這個LSR就是LER。
注意,這裏的MPLS網絡之外可以是:1.傳統路由網絡,2.另一個MPLS網絡。LSP(Label Switching Path):特定的FEC中的IP協議報文所經過的LSR的集合。
LSP通常也被稱爲MPLS tunnel。

MPLS基礎

MPLS協議
格式前面說了,MPLS把Label作爲IP協議報文的一部分,存儲在IP協議報文中。通常情況下,MPLS操作在OSI的2層(數據鏈路層)和3層(網絡層)之間,因此也常常被認爲是2.5層協議。這也就是MPLS能支持Multiprotocol的原因。Label不依賴於任何協議,直接定義在2-3層之間。當然,老司機們會說MPLS也可以在2層,例如MPLS-ATM和MPLS-FRMRLY。這種情況現在用的比較少,這裏就不考慮。MPLS的Label格式定義如下:

MPLS基礎

Label:前面提到過多次的Label,20bit的整數,也就是說Labe的容量是百萬級的。雖然不是無限的,但是也很多了。
TC:之前的EXP,改名成TC,由RFC5462定義。
S:bottom of stack。什麼是stack,一種常見的數據結構類型,特點是後進先出。
S爲1表明這已經是棧底了,即當前Label是IP協議報文最後一個MPLS標籤。再執行一個POP操作,就能變成正常的IP協議報文了。
TTL:TTL在IP協議裏面的作用主要是防止環路和用於traceroute等工具。在之前的文章Traceroute裏詳細介紹過。MPLS裏面的TTL作用是一樣的。當數據包進入MPLS網絡,網絡層中的TTL會被拷貝至MPLS的TTL,每一次LSH,TTL減1,數據包出MPLS網絡,MPLS中的TTL會拷貝至網絡層。剛剛提到了stack,MPLS中的Label不是指一個Label,而是由多個Label構成的Label Stack。

MPLS基礎

爲什麼要Label Stack?
從前面的描述看,MPLS似乎用一個Label就可以滿足要求了。多Label的一個應用場景就是嵌套的LSP。直接看圖吧:
MPLS基礎

對於IP1的報文來說,上層LSP就是由A->B組成。但是A並非直接轉發給B的,而是通過另一個子LSP C1->C2->C3轉發給的B。這麼做,首先是因爲A和B沒有直接相連,沒有辦法直接轉發。另一方面,因爲IP1和IP2有一部分重合的路徑,通過定義子LSP可以複用這部分路徑。對於IP1和IP2來說,C1,C2,C3只需要存儲一套NHLFE即可。

MPLS網絡拓撲

看一個簡單的MPLS網絡:

MPLS基礎

這個圖裏面的術語跟之前描述的不一樣,不過其實這個圖裏的術語更常見。可以簡單的翻譯一下。

CE:前面沒有介紹過,其實就是傳統路由網絡中與LER連接的路由器,可以理解成客戶網絡的邊緣路由器。
PE:服務提供商的邊緣路由器,對應LER。
P:服務提供商的路由器,對應LSR。
爲什麼會有這些術語上的不同,MPLS的提出本身是中立的,但是隨着發展,現在應用最多的是電信網絡,所以纔有了customer provider這些概念,其實都是對應電信運營商網絡中的設備。
上圖中間部分就是個MPLS網絡,前面介紹過,MPLS網絡中的IP報文都是帶有MPLS標籤的。下面來過一下工作過程:在所有的網絡流量之前,PE路由器需要通過MPLS網絡與遠端PE路由器建立LSP。客戶網絡從CE發來的非MPLS 報文,發送到了ingress PE路由器,也就是MPLS ingress edge node。ingress PE 路由器通過運算得出IP協議報文歸屬於哪個FEC,並把相應的Label加到了IP協議報文。IP協議報文沿着LSP傳輸,每個P路由器都根據自身的NHLFE,替換Label,再把報文傳給下一跳。在egress PE路由器,Label被從IP協議報文中刪除,一個傳統的IP協議報文又產生了。IP協議報文被髮送到了對端的CE路由器,最終進入了另一個客戶網絡。到此爲止,MPLS的data plane描述完了。MPLS是個很大話題,如果還有下次的話,應該會說說LSP的建立過程,也就是LDP(Label Distribution Protocol)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章