做者:肖宏輝
連接:https://zhuanlan.zhihu.com/p/27232535
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。node
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緩存
對於同一個路由器來講,同一個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提出了相似的,可是更簡單的另一種路由決策的方法。傳統的路由決策,路由器須要對網絡數據包進行解包,再根據目的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來進行的。 ide
從目前看,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)性能
刪除(POP)ui
添加(PUSH)翻譯
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把Label做爲IP協議報文的一部分,存儲在IP協議報文中。一般狀況下,MPLS操做在OSI的2層(數據鏈路層)和3層(網絡層)之間,所以也經常被認爲是2.5層協議。這也就是MPLS能支持Multiprotocol的緣由。Label不依賴於任何協議,直接定義在2-3層之間。固然,老司機們會說MPLS也能夠在2層,例如MPLS-ATM和MPLS-FRMRLY。這種狀況如今用的比較少,這裏就不考慮。MPLS的Label格式定義以下:
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。
爲何要Label Stack?
從前面的描述看,MPLS彷佛用一個Label就能夠知足要求了。多Label的一個應用場景就是嵌套的LSP。直接看圖吧:
對於IP1的報文來講,上層LSP就是由A->B組成。可是A並不是直接轉發給B的,而是經過另外一個子LSP C1->C2->C3轉發給的B。這麼作,首先是由於A和B沒有直接相連,沒有辦法直接轉發。另外一方面,由於IP1和IP2有一部分重合的路徑,經過定義子LSP能夠複用這部分路徑。對於IP1和IP2來講,C1,C2,C3只須要存儲一套NHLFE便可。
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)。