1. 程式人生 > >MPLS VPN 實現技術原理詳解

MPLS VPN 實現技術原理詳解

傳統的IP資料轉發是基於逐跳式的,每個轉發資料的路由器都要根據IP包頭的目的地址查詢路由表來獲得下一跳的出口,這是個繁瑣又效率低下的工作,主要的原因是兩個:

  1、有些路由的查詢必須對路由表進行多次查詢,這就是所謂的遞迴搜尋;
  2、由於路由匹配遵循最長匹配原則,所以迫使幾乎所有的路由器的交換引擎必須用軟體來實現,用軟體實現的交換引擎和ATM交換機上用硬體來實現的交換引擎在效率上無法相抗衡。

    當今的網際網路應用需求日益增多,對頻寬、對時延的要求也越來越高。如何提高轉發效率,各個路由器生產廠家做了大量的改進工作,如Cisco在路由器上提供CEF(Cisco Express Forwarding)功能、修改路由表搜尋演算法等等。但這些修補並不能完全解決目前網際網路所面臨的問題。IP和ATM曾經是兩個互相對立的技術,各個IP裝置製造商和ATM裝置製造商都曾努力想吃掉對方,想IP一統天下,或者ATM一家獨秀!但是最終是這兩種技術的融合,那就是MPLS(Multi-Protocol Label Switching)技術的誕生!MPLS技術結合和IP技術信令簡單和ATM交換引擎高效的優點!

一、MPLS技術的實現細節

    1.標籤結構
    IP裝置和ATM裝置廠商實現MPLS技術是在各自原來的基礎上做的,對於IP裝置商,它修改了原來IP包直接封裝在二層鏈路幀中的規範,而是在二層和三層包頭之間插了一個標籤(Label),而ATM裝置製造商利用了原來ATM交換機上的VPI/VCI的概念,在使用Label來代替了VPI/CVI,當然ATM交換機上還必修改信令控制部分,引入了路由協議,ATM交換使用了路由協議來和其他裝置交換三層的路由資訊。 標籤的結構如下:



    20位元的LABEL欄位用來表示標籤值,由於標籤是定長的,所以對於路由器來說,可以分析定長的標籤來做資料包的轉發,這是標籤交換的最大優點,定長的標籤就意味這可以用硬體來實現資料轉發,這種硬體轉發方式要比必須用軟體實現的路由最長匹配轉發方式效率要高得多。3位元的EXP用來實現QOS;1位元S值用來表示標籤棧是否到底了,對於VPN,TE等應用將在二層和三層頭之間插入兩個以上的標籤,形成標籤棧;8位元TTL值用來防止資料在網上形成環路。這樣完整的帶有標籤的二層幀就成了如下形式:



在ATM信元模式下,信元的結構如下形式:



    2.LSR裝置的體系結構
    通過修改,能支援標籤交換的路由器為LSR(Label Switch Router),而支援MPLS功能的ATM交換機我們一般稱之為ATM-LSR。 LSR裝置的體系結構如下:



    LSR的體系結構分為兩塊:

  1.控制平面(Control Plane)
    該模組的功能是用來和其他LSR交換三層路由資訊,以此建立路由表;和交換標籤對路由的繫結資訊,以此建Label Information Table(LIB)標籤資訊表。同時再根據路由表和LIB生成Forwarding Information Table(FIB)表和Label Forwarding Information Table(LFIB)表。控制平面也就是我們一般所說的路由引擎模組。

  2.資料平面(Data Plane)
    資料平面的功能主要是根據控制平面生成的FIB表和LFIB錶轉發IP包和標籤包。對於控制平面中所使用的路由協議,可以使用以前的任何一種,如OSPF、RIP、BGP等等,這些協議的主要功能是和其他裝置交換路由資訊,生成路由表。這是實現標籤交換的基礎。在控制平面中匯入了一種新的協議—LDP,該協議的功能是用來針對本地路由表中的每個路由條目生成一個本地的標籤,由此生成LIB表,再把路由條目和本地標籤的繫結通告給鄰居LSR,同時把鄰居LSR告知的路由條目和標籤幫定接收下來放到LIB表裡,最後在網路路由收斂的情況下,參照路由表和LIB表的資訊生成FIB表和LFIB表。 

二、標籤的分配和分發
    上面敘述說,MPLS技術是IP技術和ATM技術的融合。LSR和ATM-LSR上實現標籤的生成和分發是有點不同的。

  1.包模式(Packet Mode)下標籤的分配和分發

    對於實現包模式MPLS網路中,是下游LSR獨立生成路由條目和標籤的繫結,並且是主動分發出去的。如下圖,所有LSR上啟動了LDP協議。以LSR-B為例,它已經通過路由協議獲得網路X的路由了,一旦啟動LDP協議,LSR-B立即查詢路由表,如果X網路的路由是由IGP路由協議學到的,則在LIB表中為通向X網路的路由生成一個本地標籤25,由於LSR-B和LSR-A、LSR-C、LSR-E形成了LDP鄰居關係,所以下游LSR-B會主動給所有的鄰居傳送這個X=25的路由條目和標籤的繫結。LSR-A、LSR-E、LSR-C會把該路由條目和標籤的繫結放置到本地的LIB表中,再結合本地的路由表,在FIB表中生成有關X網路的“網路地址->出標籤”條目,在LFIB中生成有關X網路的“進標籤->出標籤”條目。所有的LSR上都如此操作。最終的結果使整個MPLS網路內部所有LSR上達到路由表、LIB表、FIB表、LFIB表的動態平衡。



    如果LSR-A接收到要去X網段的資料,由於LSR-A處在MPLS網路的邊緣,必須查詢FIB表,對接收到的IP包,做標籤插入操作。對於LSR-B,LSR-C則純粹是分析標籤包,對包頭的標籤做轉換,在轉發標籤包而已。資料到了LSR-D,該邊緣LSR會去掉標籤包中的標籤,再對恢復的IP包做轉發。如下圖:



  2.信元模式(Cell Mode)下的標籤分配和分發

    在信元模式下,下游ATM-LSR接收到了上游ATM-LSR標籤繫結請求後,下游受控分配標籤,被動向上游分發標籤。最上游的LSR-A向ATM-LSR-B發起對網路X的標籤求情,ATM-LSR-B再向ATM-LSR-C發請求,最後請求到達LSR-D,LSR-D生成本地對X網路的標籤1/37,把該標籤告訴ATM-LSR-C,C做同樣操作,這樣一步一步到達LSR-A。最終生成一條從A->B->C->D的LSP(Label Switch Path)。這樣如果A收到要到X網路的資料,A就把IP資料包分割成帶有標籤的信元,通過ATM介面傳送到B,接下來B和C就純粹做ATM信元的轉發,到了D後再把信元組合成IP資料包,發向網路X。

    在此要強調的如果要組建以ATM交換機為核心的MPLS網路,那麼在ATM網路的邊緣必須設定路由器,原因在於ATM交換機只轉發信元,無法處理使用者資料IP包。當然上面也提到要在ATM交換機上實現MPLS功能,必須在ATM交換機的信令控制部分加入路由協議,而路由資訊包往往是打在IP包中的,如RIP,OSPF,BGP等路由協議。ATM交換機為了確保這些以IP包形式傳遞的路由資訊能夠在ATM交換機間傳遞,使用了專門的帶外連線通道或者帶內的管理VC。


三、BGP協議在MPLS網路中的特殊應用
    上面提到LSR根據路由表分配標籤時,只對從IGP協議獲得的路由條目分配標籤。原因何在?這是有特殊意義的,如下圖,整個Transit AS中啟動MPLS交換。保證ISP2和LSR-Border2之間的網段釋出到Transit AS內部的IGP路由協議中,對ISP1和LSR-Border2之間的網段也做同樣的要求。前面提到過LSR為路由條目分配標籤時,只對從IGP學來的路由分配標籤,而網路1.2.3.4是被髮布到Transit AS內部的IGP路由協議中了,可以肯定在Border1處是可以獲得Core1告訴它有關1.2.3.4網路的標籤23。LSR-Border1,LSR-Border2之間形成IBGP鄰居關係,通過BGP協議,LSR-Border2把從ISP2處學來的10.0.0.0/8這條路由告訴給LSR-Border1,這條路由的下一跳地址是1.2.3.4,這樣一來讓LSR-Border1得知要給網路10.0.0.0/8傳送資料,先把資料傳送到1.2.3.4這個網路來。1.2.3.4被綁定了標籤23,所以在生成FIB表時,也給10.0.0.0/8這個網段繫結一個標籤23。這樣,如果有資料從ISP1穿越Transit AS到達ISP2,在Border1處就會給IP包插上23這個標籤,把生成的標籤包轉發到Core1,Core1就只要分析標籤頭做標籤包的轉發就可以了!由於Transit AS內部核心路由器不必要執行BGP協議,這樣一來,MPLS網路的核心路由器就不會知道外部使用者的路由,縮小了核心路由器的路由表,提高了搜尋效率。大家也看到,由於打上了標籤,IP包頭是不會在核心路由器被分析的,即使IP包頭含有10.0.0.1這樣的私有IP地址,也會因為只分析標籤的原因被正常轉發,這就是服務提供商提供VPN服務所追求的。當然在此必須重聲,LSP在整個Transit AS不能被斷開,如果斷開,標籤包就恢復成IP包,而核心路由器是不含使用者路由的,最終導致資料包的丟失。



    BGP在MPLS網路中的作用為我們提供了VPN服務打開了方便之門,但也應該意識到VPN服務兩個最基本的要求是

  1.使用者可以獨立規劃IP地址
  2.安全性非常重要。     如下圖是兩個VPN例項,PE1(PE=Provider Edge device)上分別接了CE1 (CE=Customer Edge device)和CE3,但是CE1和CE3上帶到IP地址相同的網段10.1.2.0/8,很明顯如果不對PE1路由器做修改,PE1只能認為往10.1.2.0/8的資料要麼從S0出,要麼從S1出,這樣的話,不是CE1就是CE3就更本收不到從PE1發來的前往10.1.2.0/8網段的資料。

    如果不對BGP4協議做修改,那麼PE2和PE3傳送給的PE1的有關10.1.1.0/8網路的路由更新就有可比性,PE1最終會選擇一條路由,認為或是PE2或者PE3是傳送資料到10.1.1.0/8的必經路由器。這樣如果CE1帶的10.1.2.0/8網段上的主機給10.1.1.0/8網段上的主機發送資料時,可能會發到CE4所帶的10.1.1.0/8的網段上,這樣造成了資料洩露。所以,為了使LSR能提供基於MPLS的VPN服務,還必須對此類裝置做修改。



四、基於MPLS的VPN實現
    VPN服務是很早就提出的概念,不過以前電信提供商提供VPN是在傳輸網上提供的覆蓋型的VPN服務。電信運營商給使用者出租線路,使用者上層使用何種的路由協議、路由怎麼走等等,這些電信運營商不管。這種租用線路來搭建VPN的好處是安全,但是價格昂貴,線路資源浪費嚴重。後來隨著IP網路的全面鋪開,電信服務提供商在競爭的壓力下,不得不提供更加廉價的VPN服務,也就是三層VPN服務。通過提供給使用者一個IP平臺,使用者通過IP Over IP的封裝格式在公網上打隧道,同時也提供了加密等等的手段提供安全保障。這類VPN使用者在目前的網路上數量還是相當巨大的!但是這類VPN服務因大量的加密工作、傳統路由器根據IP包頭的目的地址轉發效率不高等等的原因不是非常令人滿意。MPLS技術的出現和BGP協議的改進,讓大家看到了另一種實現VPN的曙光。

    1.MPLS/VPN體系結構
  (1) PE路由器的改造和VRF的匯入

    為了讓PE路由器上能區分是哪個本地介面上送來的VPN使用者路由,在PE路由器上建立了大量的虛擬路由器,每個虛擬路由器都有各自的路由表和轉發表,這些路由表和轉發表統稱為VRF(VPN Routing and Forwarding instances)。一個VRF定義了連到PE路由器上的VPN成員。VRF中包含了IP路由表,IP轉發表(也成為CEF表),使用該CEF表的介面集和路由協議引數和路由匯入匯出規則等。 在VRF中定義的和VPN業務有關的兩個重要引數是RD(Route Distinguisher)和RT(Route Target)。RD和RT長度都是64位元。 有了虛擬路由器就能隔離不同VPN使用者之間的路由,也能解決不同VPN之間IP地址空間重疊的問題。

  (2) MP-BGP協議對VPN使用者路由的釋出

    正常的BGP4協議能只傳遞IPv4的路由,由於不同VPN使用者具有地址空間重疊的問題,必須修改BGP協議。BGP最大的優點是擴充套件性好,可以在原來的基礎上再定義新的屬性,通過對BGP修改,把BGP4擴充套件成MP-BGP。在MP-IBGP鄰居間傳遞VPN使用者路由時打上RD標記,這樣VPN使用者傳來的IPv4路由轉變為VPNv4路由,這樣保證VPN使用者的路由到了對端的PE上,能夠使對端PE區分開地址空間重疊但不同的VPN使用者路由。例子如下:在PE1、PE2、PE3上分別配置VRF引數,其中VPN1使用者的RD=6500:1,RT=100:1,VPN2使用者的RD=6500:2、RT=100:2。所有VRF可以同時 匯入和匯出所定義的RT。

 以PE2為例,PE2從介面S0上獲得由CE4傳來的有關10.1.1.0/8的路由,PE2把該路由放置到和S0有關的VRF所管轄的IP路由表中,並且分配該路由的本地標籤,注意該標籤是本地唯一的。通過路由重新發布把VRF所管轄的IP路由表中的路由重新發布到BGP表中,此時通過參考VRF表的RD、RT引數,把正常的IPv4路由變成VPNv4路由,如10.1.1.0/8變成6500:1:10.1.1.0/8,同時把匯出(Export)RT值和該路由的本地標籤值等等的屬性全部加到該路由條目中去。通過MP-IBGP會話,PE2把這條VPNv4路由傳送的PE1處,PE1收到了兩條有關10.1.1.0/8的路由,其中一條是由PE3發來的,由於RD的不同,導致該兩條路由沒有可比性。MP-BGP接受到該兩條路由後的後繼工作是:去掉VPN4路由所帶的RD值,使之恢復IPv4路由原貌,並且根據各VRF配置的允許匯入(Import)的RT值,把IPv4倒到各個VRF管轄的路由表和CEF表中,也就是說帶有RT=100:1的10.1.1.0/8的路由倒到VRF1所管的路由表和CEF表中,帶有RT=100:2的10.1.1.0/8的路由倒到VRF2所管轄的路由表和CEF表中。再通過CE和PE之間的路由協議,PE把不同的VRF管轄的路由表內容通告的各自的相聯的CE中去。目前PE和CE之間可支援的路由協議只有四種BGP、OSPF、RIP2或者靜態路由。

P> 
neighbor 192.168.168.4 remote-as 6500 

neighbor 192.168.168.4 update-source Loopback0 

neighbor 192.168.168.4 next-hop-self 

──這點在PE-CE之間路由協議為BGP時,一定要配置。 

no auto-summary ! 

address-family ipv4 vrf Red 

neighbor 10.10.40.1 remote-as 6504 ──配置和CE2之間的路由協議BGP 

neighbor 10.10.40.1 activate 

no auto-summary 

no synchronization 

exit-address-family ! 

address-family vpnv4 

neighbor 192.168.168.4 activate ──啟用和PE3的MP-IBGP鄰居關係 

neighbor 192.168.168.4 send-community both 

no auto-summary 

exit-address-family ! 

interface Serial1/0 ──-配置連線到CE2的介面 

ip vrf forwarding Red ──把該介面和VRF Red聯絡起來 

ip address 10.10.40.2 255.255.255.252 

interface Ethernet0/1 ──配置連線到7206的介面 

ip address 192.168.1.13 255.255.255.252 

half-duplex 

tag-switching ip ──在此介面上啟用標籤交換 

interface Serial1/1 ──-配置連線到PE1的介面 

bandwidth 1544 

ip address 10.10.30.2 255.255.255.252 

encapsulation ppp 

tag-switching ip ──在此介面上啟用MPLS交換





    上面的配置展現了在單個AS內部實現VPN的配置,當然VPN使用者的各個接入點往往是地域跨度很大的,所以經常要涉及到跨AS提供VPN業務的需求。這樣的配置會更加複雜,而且需要各個電信運營商配合行動才行。MPLS是一種結合了鏈路層和IP層優勢的新技術。在MPLS網路上不僅僅能提供VPN業務,也能夠開展QOS、TE、組播等等的業務。



    目前中國網通已經在大規模地在提供基於MPLS技術的VPN業務,其他運營商,如中國電信等也在迎頭趕上。很快地,就象WWW技術一樣,MPLS技術將會影響我們生活的方方面面。