原地址:https://zhuanlan.zhihu.com/p/27232535
MPLS是什么考阱?
從發(fā)展歷史來看葬凳,MPLS并非是一個非常新的技術(shù)突琳,最早可以追溯在1997年他巨,相應的IETF工作組就成立。在2001年匪蟀,相應的RFC3031就發(fā)布了椎麦。從字面意思來看,MPLS全稱是Multi-Protocol Label Switching材彪,直譯過來就是多協(xié)議標簽交換技術(shù)观挎。維基百科是這么定義MPLS的:一種在通訊網(wǎng)絡上的高性能數(shù)據(jù)傳輸技術(shù)。信息太少段化,沒法理解嘁捷,不要著急,往下看显熏。
MPLS解決了什么問題雄嚣?
傳統(tǒng)的路由網(wǎng)絡里面,當一個(無狀態(tài)的)網(wǎng)絡層協(xié)議數(shù)據(jù)包(例如IP協(xié)議報文)在路由器之間游蕩時,每個路由器都是獨立的對這個數(shù)據(jù)包做出路由決策缓升。路由決策就是路由器決定數(shù)據(jù)包如何路由轉(zhuǎn)發(fā)的過程鼓鲁。路由決策在后面會多次提到,在這里指港谊,每個路由器都需要分析包頭骇吭,根據(jù)網(wǎng)絡協(xié)議層的數(shù)據(jù)進行運算,再基于這些分析和運算歧寺,獨立的為數(shù)據(jù)包選擇下一跳(next hop)燥狰,最后通過next hop將數(shù)據(jù)包發(fā)送出去。以IP協(xié)議報文為例斜筐,路由決策是基于目的IP地址缀辩,路由器根據(jù)目的IP地址偎快,選擇路由條目暇藏,再做轉(zhuǎn)發(fā)焚刚。路由決策可以認為是由兩部分組成:
- 分類,將特定的數(shù)據(jù)包歸屬為一個等價轉(zhuǎn)發(fā)類(Forwarding Equivalence Classes蕴潦,F(xiàn)ECs)
- 查找像啼,查找FEC對應的next hop
對于同一個路由器來說,同一個FEC必然對應同一個next hop潭苞,那么屬于同一個FEC的所有網(wǎng)絡數(shù)據(jù)包必然會走同一條路徑轉(zhuǎn)發(fā)出去。(注真朗,在多鏈路負載均衡的情況下此疹,一個FEC也可能對應一組next hop,但是邏輯上還是能看成是一個next hop遮婶,因為殊途同歸;人椤)
具體到IP協(xié)議報文,當多個IP協(xié)議報文的目的地址都對應路由器的一條路由旗扑,且這條路由是所有路由里面最長匹配(longest match)的路由蹦骑,那么對于這個路由器來說,就會認為這兩個IP協(xié)議報文屬于一個FEC臀防。因此眠菇,這兩個數(shù)據(jù)包就會走同一條路徑出這個路由器。這就是我們最常見到的路由轉(zhuǎn)發(fā)袱衷。
需要注意的是捎废,這里的FEC是針對路由器的,而不是全局的致燥。舉個例子登疗,目的地址為192.168.31.1和192.168.31.100的兩個IP協(xié)議報文,第一個路由器具有192.168.31.0/24這條路由,那么在第一個路由器它們屬于同一個FEC辐益,都會被轉(zhuǎn)發(fā)到第二個路由器断傲。第二個路由器具有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協(xié)議報文在第二個路由器被認為是不同的FEC,從不同的路徑出去疾忍。這就是每個路由器都需要獨立的做路由決策的原因之一乔外。
路由器的工作原理如下圖所示:
由于每個路由器都需要獨立的路由決策(雖然會有這樣那樣的緩存機制加速決策),而路由器的收發(fā)隊列一旦滿了一罩,就會丟包杨幼。所以在一個高流量,高容量的網(wǎng)絡里面聂渊,無疑對每個路由器的要求都很高(否則就會丟包了2罟骸)
針對這個問題,MPLS提出了類似的汉嗽,但是更簡單的另外一種路由決策的方法欲逃。
傳統(tǒng)的路由決策,路由器需要對網(wǎng)絡數(shù)據(jù)包進行解包饼暑,再根據(jù)目的IP地址計算歸屬的FEC稳析。而MPLS提出,當網(wǎng)絡數(shù)據(jù)包進入MPLS網(wǎng)絡時弓叛,對網(wǎng)絡數(shù)據(jù)包進行解包彰居,計算歸屬的FEC,生成標簽(Label)撰筷。當網(wǎng)絡數(shù)據(jù)包在MPLS網(wǎng)絡中傳輸時陈惰,路由決策都是基于Label,路由器不再需要對網(wǎng)絡數(shù)據(jù)包進行解包毕籽。并且Label是個整數(shù)抬闯,以整數(shù)作為key,可以達到O(1)的查找時間影钉。大大減少了路由決策的時間画髓。這里的Label就是MPLS里面的L。需要注意的是Label在MPLS網(wǎng)絡里面平委,是作為網(wǎng)絡數(shù)據(jù)包的一部分奈虾,隨著網(wǎng)絡數(shù)據(jù)包傳輸?shù)摹?/p>
也就是說,在MPLS網(wǎng)絡里面,數(shù)據(jù)被封裝在了盒子里肉微,上面貼了標簽匾鸥,每個經(jīng)手的人只需要讀標簽就知道盒子該送到哪。而傳統(tǒng)的路由網(wǎng)絡里面碉纳,每個經(jīng)手的人都需要打開盒子勿负,看看里面的內(nèi)容,再決定送往哪劳曹。
這里提到了MPLS網(wǎng)絡奴愉,這是一個由相連的,支持MPLS的設備組成的網(wǎng)絡铁孵。打上MPLS標簽的數(shù)據(jù)可以在這個網(wǎng)絡里面?zhèn)鬏敹稹PLS的核心就是,一旦進入了MPLS網(wǎng)絡蜕劝,那么網(wǎng)絡數(shù)據(jù)包的內(nèi)容就不再重要檀头,路由決策(包括FEC歸屬的計算,next hop的查找)都是基于Label來進行的岖沛。
從目前看暑始,MPLS帶來的好處是,在MPLS網(wǎng)絡里面婴削,除了邊界路由器廊镜,其他路由器可以由一些支持Label查找替換的低性能的交換機,或者路由器來完成唉俗。這一方面降低了組網(wǎng)的成本期升,另一方面提升了同樣性能設備的轉(zhuǎn)發(fā)效率。不過互躬,隨著路由器的發(fā)展,這方面的優(yōu)勢弱化了颂郎,而且吼渡,類似的問題,也不一定需要MPLS來解決乓序。MPLS的價值更多的在于其他方面寺酪。不過初步理解MPLS,就先說這些替劈。到目前為止寄雀,MPLS里面的M,P陨献,L都介紹過盒犹,S其實也隱含的介紹過,S是Switching的意思,即基于Label做路由決策的意思急膀,或者說標簽交換里面的交換沮协。相信大家也明白了為什么說MPLS是一種高效的數(shù)據(jù)傳輸?shù)募夹g(shù)。
MPLS術(shù)語
相較于傳統(tǒng)的路由交換技術(shù)卓嫂,MPLS是一個全新的世界慷暂,因此有必要對MPLS中的一些術(shù)語和角色做一些解釋。同時晨雳,為了表述簡單行瑞,后面都用IP協(xié)議報文代替網(wǎng)絡數(shù)據(jù)包來進行描述。
FEC(Forwarding Equivalence Class):交換等價類餐禁,前面描述過血久,同樣的轉(zhuǎn)發(fā)路徑的網(wǎng)絡數(shù)據(jù)包的集合。
MPLS網(wǎng)絡:由支持MPLS的坠宴,相連的設備的構(gòu)成洋魂。
LSH(Label Switching hop):IP協(xié)議報文從一個MPLS設備發(fā)送到另一個MPLS設備,區(qū)別于傳統(tǒng)的路由交換喜鼓,LSH是基于Label的轉(zhuǎn)發(fā)副砍。
NHLFE(Next Hop Label Forwarding Entry):LSR中用來轉(zhuǎn)發(fā)條目,相當于路由表之于路由器庄岖。包含了:
下一跳:nexthop
對數(shù)據(jù)包的當前l(fā)abel需要做的操作豁翎,包括了:
替換(SWAP)
- 刪除(POP)
- 添加(PUSH)
LER(Label Edge Router):有的地方也叫做 MPLS edge node。顧名思義隅忿,MPLS網(wǎng)絡的邊緣設備心剥。
MPLS ingress node:進入MPLS網(wǎng)絡的節(jié)點,也就是MPLS網(wǎng)絡的入口路由器背桐。該設備計算出IP協(xié)議報文歸屬的FEC优烧,并把相應的Label放入IP協(xié)議報文。
MPLS egress node:出MPLS網(wǎng)絡的節(jié)點链峭,也就是MPLS的出口路由器畦娄。IP協(xié)議報文在這里回到傳統(tǒng)的路由系統(tǒng)中。
LSR(Label Switching Router):支持MPLS轉(zhuǎn)發(fā)的路由器弊仪。如果一個LSR有一個鄰接的節(jié)點在MPLS網(wǎng)絡之外熙卡,那么這個LSR就是LER。注意励饵,這里的MPLS網(wǎng)絡之外可以是:1.傳統(tǒng)路由網(wǎng)絡驳癌,2.另一個MPLS網(wǎng)絡。
LSP(Label Switching Path):特定的FEC中的IP協(xié)議報文所經(jīng)過的LSR的集合役听。LSP通常也被稱為MPLS tunnel颓鲜。
MPLS協(xié)議格式
前面說了表窘,MPLS把Label作為IP協(xié)議報文的一部分,存儲在IP協(xié)議報文中灾杰。通常情況下蚊丐,MPLS操作在OSI的2層(數(shù)據(jù)鏈路層)和3層(網(wǎng)絡層)之間,因此也常常被認為是2.5層協(xié)議艳吠。這也就是MPLS能支持Multiprotocol的原因麦备。Label不依賴于任何協(xié)議,直接定義在2-3層之間昭娩。當然凛篙,老司機們會說MPLS也可以在2層,例如MPLS-ATM和MPLS-FRMRLY栏渺。這種情況現(xiàn)在用的比較少呛梆,這里就不考慮。
MPLS的Label格式定義如下:
- Label:前面提到過多次的Label磕诊,20bit的整數(shù)填物,也就是說Labe的容量是百萬級的。雖然不是無限的霎终,但是也很多了滞磺。
- TC:之前的EXP,改名成TC莱褒,由RFC5462定義击困。
- S:bottom of stack。什么是stack广凸,一種常見的數(shù)據(jù)結(jié)構(gòu)類型阅茶,特點是后進先出。S為1表明這已經(jīng)是棧底了谅海,即當前Label是IP協(xié)議報文最后一個MPLS標簽脸哀。再執(zhí)行一個POP操作,就能變成正常的IP協(xié)議報文了扭吁。
- TTL:TTL在IP協(xié)議里面的作用主要是防止環(huán)路和用于traceroute等工具企蹭。在之前的文章Traceroute里詳細介紹過。MPLS里面的TTL作用是一樣的智末。當數(shù)據(jù)包進入MPLS網(wǎng)絡,網(wǎng)絡層中的TTL會被拷貝至MPLS的TTL徒河,每一次LSH系馆,TTL減1,數(shù)據(jù)包出MPLS網(wǎng)絡顽照,MPLS中的TTL會拷貝至網(wǎng)絡層由蘑。
剛剛提到了stack闽寡,MPLS中的Label不是指一個Label,而是由多個Label構(gòu)成的Label Stack尼酿。
為什么要Label Stack爷狈?
從前面的描述看,MPLS似乎用一個Label就可以滿足要求了裳擎。多Label的一個應用場景就是嵌套的LSP涎永。直接看圖吧:
對于IP1的報文來說,上層LSP就是由A->B組成鹿响。但是A并非直接轉(zhuǎn)發(fā)給B的羡微,而是通過另一個子LSP C1->C2->C3轉(zhuǎn)發(fā)給的B。這么做惶我,首先是因為A和B沒有直接相連妈倔,沒有辦法直接轉(zhuǎn)發(fā)。另一方面绸贡,因為IP1和IP2有一部分重合的路徑盯蝴,通過定義子LSP可以復用這部分路徑。對于IP1和IP2來說听怕,C1捧挺,C2,C3只需要存儲一套NHLFE即可叉跛。
MPLS網(wǎng)絡拓撲
看一個簡單的MPLS網(wǎng)絡:
這個圖里面的術(shù)語跟之前描述的不一樣松忍,不過其實這個圖里的術(shù)語更常見】昀澹可以簡單的翻譯一下鸣峭。
CE:前面沒有介紹過,其實就是傳統(tǒng)路由網(wǎng)絡中與LER連接的路由器酥艳,可以理解成客戶網(wǎng)絡的邊緣路由器摊溶。
PE:服務提供商的邊緣路由器,對應LER充石。
P:服務提供商的路由器莫换,對應LSR。
為什么會有這些術(shù)語上的不同骤铃,MPLS的提出本身是中立的拉岁,但是隨著發(fā)展,現(xiàn)在應用最多的是電信網(wǎng)絡惰爬,所以才有了customer provider這些概念喊暖,其實都是對應電信運營商網(wǎng)絡中的設備。上圖中間部分就是個MPLS網(wǎng)絡撕瞧,前面介紹過陵叽,MPLS網(wǎng)絡中的IP報文都是帶有MPLS標簽的狞尔。下面來過一下工作過程:
- 在所有的網(wǎng)絡流量之前,PE路由器需要通過MPLS網(wǎng)絡與遠端PE路由器建立LSP巩掺。
- 客戶網(wǎng)絡從CE發(fā)來的非MPLS 報文偏序,發(fā)送到了ingress PE路由器,也就是MPLS ingress edge node胖替。
- ingress PE 路由器通過運算得出IP協(xié)議報文歸屬于哪個FEC研儒,并把相應的Label加到了IP協(xié)議報文。
- IP協(xié)議報文沿著LSP傳輸刊殉,每個P路由器都根據(jù)自身的NHLFE殉摔,替換Label,再把報文傳給下一跳记焊。
- 在egress PE路由器逸月,Label被從IP協(xié)議報文中刪除,一個傳統(tǒng)的IP協(xié)議報文又產(chǎn)生了遍膜。
- IP協(xié)議報文被發(fā)送到了對端的CE路由器碗硬,最終進入了另一個客戶網(wǎng)絡。
到此為止瓢颅,MPLS的data plane描述完了恩尾。MPLS是個很大話題,如果還有下次的話挽懦,應該會說說LSP的建立過程翰意,也就是LDP(Label Distribution Protocol)。