技術背景
90年代初期,網際網路流量快速增長,而由於當時硬體技術的限制,路由器採用最長匹配演演算法逐跳轉發封包,成為網路資料轉發的瓶頸;於是快速路由技術成為當時研究的一個熱點;在各種方案中,IETF確定了MPLS協定作為標準的協定;MPLS採用短而定長的標籤進行資料轉發,大大提高了硬體限制下的轉發能力(當然現在硬體已經沒有限制,MPLS更多用於營運商做MPLS VPN,流量工程和服務質量);而且MPLS可以擴充套件到多種網路協定;
傳統IP轉發示意圖
提示:如上圖所示,使用者A想要和使用者B通訊,首先封包傳送R1以後,路由器會根據封包的目標ip地址進行路由查詢,從而實現將封包最終轉發到使用者B;這種ip轉發採用最長匹配原則,需要多次查表,演演算法效率不高;況且當時路由器多采用CPU進行轉發處理,這意味著來一個封包都會上交給cpu處理,很顯然這會額外帶來效能上的開銷;從而影響路由器效能;
ATM轉發示意圖
提示:如上圖所示,使用者A想要和使用者B通訊,首先使用者A將封包傳送給R1,R1收到使用者封包,通過檢視封包攜帶的標籤,從而在ATM轉發表裡查詢對應標籤表項,然後將對應封包,從對應介面轉發出去並打上對應標籤;這種ATM轉發採用唯一匹配,一次查表,很顯然比上述的ip轉發效率要高;但是ATM控制指令複雜,成本高昂,難以普及;所以ATM技術沒能成功得到推廣;
ATM技術雖然沒能成功,但其中的心法口訣卻屬創新;首先ATM摒棄了繁瑣的路由查詢,改為簡單快速的標籤交換;即通過標籤交換來實現封包的轉發;其次ATM將具有全域性意義的路由表改為只有本地意義的標籤表;
MPLS簡介
MPLS借鑑了ATM的思想,用標籤交換來實現快速路由;MPLS是Multi-Protocol Label Switching的首字母縮寫,翻譯成中文就是多協定標籤交換;該協定是一種根據標籤轉發的技術;可承載在各種鏈路層協定之上(如,ppp、ATM、幀中繼、乙太網);同時它還能承載各種網路層報文,如ipv4、ipv6;採用無連線的控制平面,實現路由資訊的傳遞和標籤的分發,採用面向連線的資料平面,實現報文在建立的標籤轉發路徑上傳送;所以MPLS定義為2.5層,又稱2.5層技術;如下圖所示
提示:MPLS協定工作在二層之上三層之下的中間層,主要可以起到承上啟下的作用;即它能夠工作在很多二層協定之上,同時承載三層網路協定;
MPLS資料轉發過程
提示:如上圖所示,使用者A和使用者B通訊,首先使用者A傳送IP資料包文給使用者端的閘道器,使用者端閘道器收到資料包文以後,根據路由將對應封包轉發給營運商的邊界閘道器,營運商的邊界路由器收到對應封包會根據規則(lsp)給對應資料打上對應的標籤;隨後從對應的介面傳送給下一個路由器;在營運商的內部路由器中傳輸使用者A的資料,路由器不再根據目標ip地址來查詢路由表項進行資料轉發,而是根據封包的標籤和LSP(標籤路徑)來進行轉發;最終封包在來到營運商靠近B使用者側的邊界閘道器,此時邊界閘道器會根據標籤路徑表將對應資料中的標籤剝離,然後傳送給使用者;從而實現使用者A和使用者B的資料通訊;從上述過程來看,MPLS協定只關心對應封包的標籤,根據標籤和結合標籤路徑表來轉發對應封包;並不會關心對應目標ip地址是多少,是否有路由等;所以標籤的分發和lsp的建立就顯得尤為重要;
MPLS實際應用場景
隨著硬體技術的發展,ip轉發效能也大大提高,MPLS在這方面並未發揮優勢,但由於MPLS結合了IP網路強大的三層路由功能和二層網路高效的轉發機制,所以目前MPLS主要應用於VPN技術,TE(Traffic Engineering,流量工程)以及QOS(Quality of Service,服務質量);
MPLS VPN應用
提示:基於MPLS的VPN通過LSP將私有網路的不同分支連線起來,形成一個統一的網路,使用者裝置無需為VPN設定GRE、L2TP等隧道;網路延時也會被降至最低;
MPLS TE應用
提示:所謂流量工程是通過動態監控網路的流量和網路單元的負載,實時調整流量管理引數、路由引數和資源約束引數等;使網路執行狀態遷移到理想狀態,優化網路資源的使用,避免負載不均衡導致的擁塞;
MPLS報文結構
提示:Label欄位主要用於報文轉發,佔20bits;exp(experimental Use)欄位主要用於承載IP報文中的優先順序,佔3位二進位制,即有8個優先順序別,0-7;S欄位表示棧底標誌,佔1位,即表明是否是最後一個標籤(MPLS標籤可以多層巢狀),如果是最後一個標籤,對應s欄位會置為1,否則為0;TTL欄位類似ip頭部的TTL欄位,用來防止報文環路,佔8位元二進位制;
MPLS標籤
MPLS標籤有較短,定長,自由本地意義的特點,主要用於唯一標識去往同一目的地址的報文分組,標籤控制元件如下;
所謂標籤空間就是指標籤的取值範圍,不同取值範圍,對應作用不同;
0-15是特殊保留標籤
0:IPv4 Explicit NULL Label(顯示空標籤),表示該標籤必須被彈出(即標籤被剝掉),且報文的轉發必須基於IPv4。如果出節點分配給倒數第二跳節點的標籤值為0,則倒數第二跳LSR需要將值為0的標籤正常壓入報文標籤值頂部,轉發給最後一跳。最後一跳發現報文攜帶的標籤值為0,則將標籤彈出;
1:Router Alert Label 路由告警標籤,只有出現在非棧底時才有效。類似於IP報文的「Router Alert Option」欄位,節點收到Router Alert Label時,需要將其送往本地軟體模組進一步處理。實際報文轉發由下一層標籤決定。如果報文需要繼續轉發,則節點需要將Router Alert Label壓回標籤棧頂;
2:IPv6 Explicit NULL Label,表示該標籤必須被彈出,且報文的轉發必須基於IPv6。如果出節點分配給倒數第二跳節點的標籤值為2,則倒數第二跳節點需要將值為2的標籤正常壓入報文標籤值頂部,轉發給最後一跳。最後一跳發現報文攜帶的標籤值為2,則直接將標籤彈出。
3:Implicit NULL Label(隱式空標籤),倒數第二跳LSR進行標籤交換時,如果發現交換後的標籤值為3,則將標籤彈出,並將報文發給最後一跳。最後一跳收到該報文直接進行IP轉發或下一層標籤轉發;
14:OAM Router Alert Label,MPLS OAM(Operation Administration & Maintenance)通過傳送OAM報文檢測和通告LSP故障。OAM報文使用MPLS承載。OAM報文對於Transit LSR和倒數第二跳LSR(penultimate LSR)是透明的;
4-13、15:保留;
16~1023:靜態LSP和靜態CR-LSP(Constraint-based Routed Label Switched Path)共用的標籤空間;
1024及以上:LDP、RSVP-TE(Resource Reservation Protocol-Traffic Engineering)、MP-BGP(MultiProtocol Border Gateway Protocol)等動態信令協定的標籤空間;
MPLS標籤多層巢狀
提示:對於一個LSR(標籤路由器)來說,只處理第一個(最頂層)標籤;多層標籤主要應用於MPLS VPN、MPLS TE;
提示:MPLS在二層乙太網網路協定號中使用8847或8848,IP協定號為0800;
MPLS標籤轉發行為
提示:報文進入MPLS網路,Ingress LSR裝置(LSR1)發現報文的目標ip地址與其關聯的標籤轉發表項,遂進行標籤壓入(push)操作,即打標籤;報文在MPLS網路中間進行轉發時,在LSR2上進行標籤交換(SWAP),裝置只需要查詢標籤轉發表項即可完成報文轉發;報文在轉出MPLS網路時,LSR3發現自己為該LSP的最下游裝置,完成彈出標籤(POP)操作,即剝離標籤,還原為最初封包的結構;隨後通過ip路由轉發封包到達使用者主機,完成資料通訊;簡單講就是靠近傳送端使用者的MPLS路由器為ingress,做標籤壓入操作,中間路由器做標籤交換操作,靠近接收端的MPLS路由器做標籤剝離操作;通過上述的壓入,交換,彈出標籤的操作來達到封包的轉發;
LSP的建立
提示:LSP是Label Switched Path的縮寫,標籤交換路徑;即MPLS標籤路徑;作用類似ip路由表;LSP的建立有兩種方式,一種是靜態LSP,即通過手動方式為各個FEC分配標籤建立轉發隧道,類似靜態路由;一種是動態LSP,即通過標籤釋出協定動態建立轉發隧道;動態標籤釋出協定類似動態路由協定;
提示:標籤分配的方向和資料流的方向相反;
靜態LSP
提示:所謂靜態LSP是指不使用標籤釋出協定,不需要互動控制報文,資源消耗較小;通過靜態方式建立的LSP不能根據網路拓撲變化動態調整,需要管理員手動調整;這種方式適用於拓撲結構簡單且穩定的小型網路;設定靜態LSP原則是上游節點出標籤等於下游節點入標籤;設定之前應提前規劃好,避免出錯;
動態LSP
提示:動態LSP是指通過標籤釋出協定(LDP、MP-BGP、RSVP-TE)動態建立,類似動態路由協定;管理員只需要設定好標籤釋出協定即可實現對FEC的分類、標籤的分配以及LSP的建立和維護;這種方式組網設定簡單,易於管理和維護,能夠根據網路拓撲變化而即時做出對應的調整;標籤由下游LSR分配,按從下游到上游的方向分發;
MPLS轉發過程
提示:Tunnel ID是為了給使用隧道的上層協定(如VPN、路由管理)提供統一的介面;系統自動為隧道分配一個ID,也稱為Tunnel ID;該Tunnel ID的長度為32位元,只是本地有效;NHLFE是下一跳標籤轉發表項;主要用於指導MPLS報文的轉發;該表項包括Tunnel ID、出介面、下一跳、出標籤、標籤操作型別等資訊;FEC到一組NHLFE的對映成為FTN(FEC-To-NHLFE);FIB表中的Tunnel ID值不為0x0的表項,能夠獲取FTN的詳細資訊;FTN只在ingress存在;ILM,Incoming Label Map,入標籤對映;入標籤到一組下一跳標籤轉發表項的對映;包括Tunnel ID、入標籤、入介面、標籤操作型別等資訊;ILM在Transit節點的作用是將標籤和NHLFE做繫結;通過標籤索引ILM表,就相當於使用目標ip地址查詢FIB,能夠得到所有的標籤轉發資訊;MPLS轉發就是通過上述三張表項進行資料轉發;
MPLS環路檢測機制
MPLS環路檢測可以通過IGP環路檢測機制,如RIP,OSPF等各自的防環機制;除此之外也可以通過TTL環路檢測,其中幀模式的MPLS中使用TTL,信元模式的MPLS中沒有TTL,使用LDP環路檢測機制;而LDP環路檢測機制中有兩種方式,一種是距離向量法,一種最大跳數法;
MPLS對TTL的處理模式
Uniform模式
提示:這種模式MPLS TTL和IP TTL相互同步,中間節點只處理MPLS TTL;這種模式不能隱藏MPLS網路真實網路節點數量;
Pipe模式
提示:這種模式MPLS TTL設定為固定值,IP TTL只在入和出節點分別減1;這種模式可以有效隱藏MPLS網路真實節點數量;
TTL環路檢測
提示:TTL環路檢測和IP環路檢測一樣,只要TTL值為0以後,對應封包就被丟棄,從而有效阻斷環路繼續發生;
LDP環路檢測
距離向量法
提示:距離向量法,類似RIP裡的水平分割,LSR傳送標籤請求時,新增自己的LSR ID,如果收到的LSR發現了自己的LSR ID,對應封包就直接丟棄;
最大跳數法
提示:最大跳數法是LSR傳送標籤請求時,更新Hop Conut ,如果到達預定的最大值,對應封包被丟棄;類似TTL,不同於TTL的是TTL是每經過一個路由器就減1,直到TTL值為0時對應封包才被丟棄;而Hop Count是每經過一個路由器就加1,直到到達預定的最大值,對應封包才會被丟棄;