天天看點

MPLS基礎一(上)

MPLS基礎一(上)

在上圖中,關于PC-A和PC-B之間互相通路的過程中

1、所有三層網絡裝置形成源和目的的路由條目

2、PC-A發出封包,source-IP為A,destination-IP為B

3、R1收到封包後,根據目的IP檢查自己的路由表,查詢得到出接口,将資料包從出接口發出

4、R2、R3同樣如此,一直講資料包傳遞到PC-B

5、PC-B做出回包,沿反方向傳回資料

 其中省略了二層mac位址的ARP查詢和重寫資料幀的内容  

     簡而言之:IP資料封包在傳遞的過程中,根據目的IP位址,查詢路由表,得到出接口将資料發出,源目的IP位址保持不變,mac位址逐跳改寫

上面這個是我們耳熟能詳的IP轉發原理

其中我們為了友善了解,隐藏了其在轉發過程中真實的一幕,即路由器收到IP封包時,查詢的其實并不是路由表(RIB),而是轉發表(LIB)

我們需要複習一下在NP交換部分所講過的交換工作原理

       最早期,交換機在交換資料幀時采用的交換方式我們稱之為程序交換,所有的封包在交換時都需要經過CPU查詢處理,導緻交換效率一直無法提升

       随後,新一代交換方式出現,即采用資料流的交換方式,我們将源目的IP、源目的mac、源目的端口及入接口都相同的流量稱為同一個資料流,交換機在處理這些資料時,隻需要對第一個封包使用CPU進行查詢,後續的所有封包全都按照第一個封包的交換方式進行處理,大大提高了交換效率

       而cisco根據資料流交換方式推出了自己獨有的交換方式,在程序交換中,存在一個問題,即隻有有流量觸發後才會産生出對應的交換緩存,如果是處理大量不同資料流時,其實交換效率和程序交換一樣慢;為了解決這個問題,cisco将其優化改進,利用交換機的閑時資源,提前計算出可能會收到的資料流的轉發資訊,将其載入緩存,當收到資料流時,直接使用預先緩存的轉發資訊處理封包,實作了正真的基于硬體的交換方式,cisco把這種方式成為思科特快轉發(CEF)  

       正是由于CEF的高效,cisco在新的路由産品中也移植了這個功能,是以現在大家所能接觸到的思科裝置都具備CEF功能

而我們所謂的轉發表其實就是CEF表,CEF表示根據路由表産生的,其不像路由表有大量的遞歸内容,CEF表中顯示的就是一個資料包如果比對中其下一步應該從哪個接口發出,簡單高效

比如下面的這個路由表(RIB):

MPLS基礎一(上)

路由就會出現需要遞歸查詢的情況

而我們去看一下CEF表(FIB)

MPLS基礎一(上)

路由器在閑時會根據路由表的資訊,提前計算好轉發資訊,收到去往4.4.4.4的資料包直接從出接口F0/0發出

       這張表我們就叫做FIB:轉發資訊庫

而FIB是根據路由表産生的,路由表我們稱為RIB:路由資訊庫

裝置在收到IP封包時,其查詢的其實是FIB并不是RIB,如果将CEF功能關閉,這是才會查詢RIB即路由表

       以上是我們在NA、NP中所學的IP轉發原理的内容,做一些補充

      下面,我們開始揭開MPLS的神秘面紗,來看一看内裡乾坤

MPLS(Multiprotocol Label Switch)最初是用來提高路由器的轉發速度而提出的一個協定,但随着技術發展,裝置轉發性能越來越強,其加快轉發速度的優勢逐漸弱化,而多層MPLS報頭嵌套的設計成為了其最出彩的地方

目前用得比較多的場景主要是解決BGP路由黑洞問題和MPLS VPN資料轉發

首先,我們需要對MPLS有個大概的認識,MPLS在傳遞封包時會在二層幀頭和三層報頭中間插入MPLS報頭,是以很多人叫它2.5層

MPLS基礎一(上)

他的封包結構比IP報頭簡單得多,也小地多,隻有4個位元組(32bits)

結構如下:

MPLS基礎一(上)

前20位位标簽位,用于表示目前的标簽

EXP協定中未作定義,一般用作COS

S為棧底位,用于表示該MPLS報頭是否為最後一個MPLS報頭

TTL相信不用解釋了

MPLS基礎一(上)

如此簡單的接口我相信你看過一次就能記住,同樣,裝置在處理MPLS封包時也會比IP封包處理效率更高

在MPLS中有一些專業術語必須要了解

FEC:

Forwarding Equivalence Class,FEC(轉發等價類),是在轉發過程中以等價的方式處理的一組資料分組。

可以通過位址、隧道、COS等來辨別建立FEC,

目前看到的MPLS中隻是一條路由對應一個FEC。通常在一台裝置上,對一個FEC配置設定相同的标簽。

标簽(Label)

是一個比較短的,定長的,通常隻具有局部意義的辨別(類似mac位址),這些标簽通常位于資料鍊路層的資料鍊路層封裝頭和三層資料包之間,标簽通過綁定過程同FEC相映射,即一個FEC對應一個标簽。

LSP:

标簽交換通道。一個FEC的資料流,在不同的節點被賦予确定的标簽,資料轉發按照這些标簽進行。資料流所走的路徑就是LSP。

LSR:

Label Switching Router,LSR是MPLS的網絡的核心交換機,它提供标簽交換和标簽分發功能。

LER:

Label Switching Edge Router,在MPLS的網絡邊緣,進入到MPLS網絡的流量由LER分為不同的FEC,并為這些FEC請求相應的标簽。它提供流量分類和标簽的映射、标簽的移除功能。

了解了上面這些專業術語,那麼我們研究一下資料是如何通過MPLS進行傳遞的,和IP之間有什麼差別:

MPLS基礎一(上)

在上圖中,我們需要解決幾個問題:

标簽是怎麼産生的?

IP封包是怎麼變成MPLS封包的?

封包是如何從源傳遞到目的的?

标簽是怎麼産生的?

為每一條路由産生一個唯一标簽(local标簽,也叫 in标簽)

将這些标簽傳遞給MPLS的鄰居(remote标簽,也叫out标簽)

IP封包是怎麼變成MPLS封包的?

在LER上,壓入标簽(根據IP封包的目的IP位址所對應的路由的标簽) 

封包是如何從源傳遞到目的的?

MPLS基礎一(上)

A發出IP封包,R1收到後查詢FIB,得知需要壓入标簽

R1将封包轉發給R2,R2收到MPLS封包,查詢LFIB表中in标簽,将原有的标簽替換成現在這個in标簽對應的out标簽值

到達R3後,查詢in标簽,發現對應out标簽為pop,則彈出最頂層标簽,還原成IP封包,轉發給R4 

R4收到IP封包後,查詢FIB表,将封包轉發給B

其中涉及到幾個動作:

push壓入:為封包添加MPLS報頭

swap替換:根據in标簽查詢的結果,将标簽替換成out标簽的值

pop 彈出:将最頂層的MPLS報頭移除

untag 彈出:将所有MPLS報頭都移除

PHP機制:倒數第二跳彈出,減少最後一條裝置的查表次數 

如果沒有倒數第二跳彈出機制,在最後一條裝置上才彈出标簽,則在最後一條裝置上首先需要查詢LFIB表,得知需要彈出标簽,彈出标簽後變成IP封包,需要再次查詢FIB表,共需要查詢2次,而在倒數第二跳裝置上彈出,變成IP封包後,最後一條裝置就隻需查詢FIB表即可,隻查一次