MPLS網絡

MPLS介紹

    • Multi-Protocol Label Switching (多協議標籤交換)

           Multi-Protocol:支持多三層協議,如IPIPv6IPX

            Label Switching:在所承載的報文前加上標籤棧、基於標籤做轉發 

    • MPLS是一種新的轉發機制,數據在MPLS網絡中是根據標籤進行轉發

    • 一般而言MPLS的標籤對應的是目的地址(路由前綴)

    • MPLS依賴IP路由及CEF交換




MPLS術語:

    • RIB:路由表

    • FIBCEF數據轉發表

    • LIB:標籤數據庫

    • LFIB:標籤轉發數據庫,它的信息來源,由LIBFIB共同維護而來的

    • LSP:標籤交換通道,數據流走的路徑就是LSP

    • FEC:相當於IP網絡中的網絡前綴,一個路由條目對應一個FEC。每一個FEC生成一個對應的標籤,屬於一個FEC的流量具有相同的轉發方式、轉發路徑和轉發待遇,但是並不是所有擁有相同標籤的報文都屬於一個FEC,因爲這些報文的EXP值可能不相同,執行方式可能不同,因此它們可能屬於不同的FEC

    • 決定報文屬於哪一個FEC的路由器是入棧LSR因爲是它對報文進行分類和壓入標籤


MPLS 路由器名稱

    • label switch router(LSR)標籤交換路由器一臺支持MPLS的路由器。能夠理解MPLS標籤並且能夠在數據鏈路層面對MPLS標籤數據包進行交換。有三種類型LSR:

    • ingress LSR:處於MPLS路由域的邊界,主要針對數據來的方向

    • Egress LSR:處於MPLS路由域的邊界,主要針對數據出棧方向來說的

    • intermediate LSR:在MPLS中間的,沒有直接連接IP網絡



MPLS數據包格式:

F%WYS`{4P$YR@CP]IH2M9VI.png

Label(標籤):標籤有兩種,保留標籤和可用標籤

     保留標籤:範圍:0~15  常見保留標籤:0和3     標籤爲0表示它是一個顯示空     標籤爲3表示它是一個隱含空(imp-null)  

     可用標籤:範圍:16~2^20次方減1    標籤空間還是很大的,標籤具有本地意義,所以說標籤是可以重疊的。

BoS(棧底):MPLS網絡允許對一個數據包壓入多個標籤   比如:MPLS-***網絡環境,就有兩個標籤,分別是:外層標籤(LDP協議分配)和內層標籤(MP-BGP分配

TTL:MPLS域內的TTL值一般是在MPLS域邊界由ingress LSR路由器直接Copy(拷貝)IP報文裏的TTL字段

EXP(實驗位):用於QoS流量工程,其實QOS流量工程中,就有使用到保留標籤0。


部署MPLS網絡的好處:

  1.  採用MPLS,可避免IP路由的逐跳轉發情況,減少對數據包的深入分析,藉助標籤建立二層的快速轉發路徑,使得數據沿着一條預先建立的路徑快速轉發

  2.  數據包在進入MPLS網絡的入口,路由器將進行一次三層查找,而在此之後的LSR只進行簡單的標籤交換動作,不需要在進一步分析三層的信息

  3. MPLS可以部署MPLS-***,傳遞不同***客戶端的路由信息。


 LDP協議概述:

  • LDP協議叫標籤分發協議,IP路由表中的每一條IGPIP前綴來說,每一臺運行LDP協議的LSR都會進行本地捆綁,也就是說,爲IPv4前綴分配標籤,然後LSR再將該分配的標籤分發給所有的LSR鄰居。從鄰居接收到的標籤轉換爲遠程標籤remote label,之後將遠程標籤和本地標籤存儲於標籤信息庫LIB

  • 在所有捆綁某一特定前綴remote label中,LSR只使用其中一個標籤來確定該前綴的出棧標籤。FIB表來決定該前綴的下一跳是什麼。LSR用這樣的信息來創建它自己的標籤轉發數據庫LFIB  

  • LDP不會爲BGP路由前綴捆綁標籤


LDP鄰居建立:兩個階段,鄰居發現階段和鄰居會話階段  

     W4(GP8)8}0[SS~_MW@])AC8.png       


鄰居發現階段:

  1.     在接口上激活LDP以後,開始發送LDP的hello包,hello包的源地址是發送該hello包的接口IP,發向224.0.0.2,目的端口號是UDP的646端口,兩邊都是一樣的。互相發送完hello包形成LDP鄰居關係。hello包裏包含了三個地址:    第一個是自己的接口IP地址,第二個是傳輸IP地址,第三個是自己的LDP Route-ID

      傳輸IP地址默認等同於LDP Route-ID     傳輸IP地址可以進行手工修改,不管改成什麼一定要保證兩端的傳輸IP地址三層是可達的

    PAC8Z%WFE3OSZHBKC{A04C9.png

2.傳輸地址大的一方,發起TCP三次握手。發起TCP的源就是它的傳輸IP,端口是TCP的隨機端口,目的地址是對端的傳輸IP,目的端口是TCP646

   54Q]XQ9[W_Y2SZH@VHDHJ(C.png


LDP會話建立過程:

  1.    傳輸IP大的首先發送初始化的消息,就好比BGPOPPEN消息一樣,裏邊攜帶了一些LDP運行的一些參數,要和對方協商。對方收到初始化消息,如果對方接受,對方會回給自己一個keep alive消息,同時對方也會把自己的初始化參數發送給自己。如果自己也接受了對方的參數,自己會回給對方一個keep alive消息,當對方收到keep alive消息後,最終LDP會話就建立完成

  MV]6)2)A3N9F`LBC]C3][)J.png

   2.    LDP標籤映射消息交互,傳輸IP大的首先會把自己的本地標籤映射消息發送給對方, 對方收到以後放在自己的LIB表中,對方也會把自己的標籤映射表發送給自己。至此雙方維護各自的LIB LIB穩定後,同時生成LFIB表,標籤轉發數據庫。下圖就是標籤映射表的交互報文

   IF4LZK`T@AYA82Q6GZR{_GG.png



LDP  Hello包頭部報文:真實抓包hello包在上邊:鄰居發現階段第一個圖就是LDP 的hello包報文

   RN)1U{~E%1EN5%VUL)((O[L.png

l  LDP鄰居建立首先發送hello包(基於UDP源和目的端口都是646

l  LDP Router-ID6個子節(4字節IP+2字節的LABEL Space ID)  我有在上圖的hello包裏標識出來,粉色字體就是Space-ID

l  兩個路由器建立LDP鄰居,要保證雙方到對方的LDP Router-ID三層可達

l  Transport addr除非手工指定,否則等於LDP Router-ID

l  LDP router-ID 的選舉和OSPF router-ID一樣


什麼是基於平臺的Space-ID?

  9JU@}R}M]6TWKP0~J%C(G{U.png

比如以上的拓撲圖爲例,R6路由器有一個6.6.6.6/32的路由前綴傳遞給了R2路由器。 R2會爲6.6.6.6/32路由前綴分配一個標籤假設是200。  基於平臺就是,R2會把這個標籤爲200的6.6.6.6/32信息 傳遞給它所有的LDP鄰居,也就是說,R1,R3,R4,R5,R6他們收到R2的關於6.6.6.6/32所捆綁的標籤都是200。這就是基於平臺的標籤,當然也有基於接口的,就是R2爲6.6.6.6/32路由前綴,捆綁標籤,每個接口,它都會捆綁一個關於該前綴路由不一樣的標籤傳遞給它的LDP鄰居。


上邊就是MPLS和LDP的介紹,下邊介紹:LDP標籤的處理方式、PHP次末跳彈出機制、MPLS控制層面和數據層面傳遞、MPLS網絡收斂、MPLS防環、MPLS配置等

LDP標籤的處理方式:insertimposer or push壓入Swap(置換)、PoP(彈出)、untagged(移除)、Aggregate(聚合)

  1. insertimposer or push壓入對數據包壓入標籤,壓入的動作常見於在MPLS域邊界由ingress LSR路由器所完成壓入標籤,可以同時壓入多個標籤。

  2. Swap(置換):對收到的標籤數據包,要將它轉發出去之前,需要把出棧標籤替換成鄰居的標籤,完成置換動作,常見於處於MPLS域中間的LSR路由器所操作。

  3. PoP(彈出)將標籤數據包最頂層標籤彈出,常見於某條路由前綴的倒數第二跳路由器(如果大家不理解這句話也沒關係,下邊會提及到PHP次末跳彈出機制,大家就會懂PoP是怎麼回事)

  4. untagged(移除):將整個標籤棧移除,不管上邊有多少層標籤。  untagged(移除)動作其實是一個很詭異的動作,它存在有時候是很合理的,有時候是很不合理的,還需大家自己慢慢體會

  5. Aggregate(聚合):這個動作也是移除所有標籤,但是它常見於做了彙總路由器身上。


Aggregate的誘因:   

        第一:在做了彙總的環境下,做彙總的路由器會把彙總的路由的動作設置爲Aggregate動作,因爲我既然能做彙總,那麼我就認爲這條路由就是本地始發的路由

        第二:在MPLS-***環境下,PE路由器在和CE路由器直連的網段動作也是Aggregate,因爲它是VRF的直連原因

    O7Y9MAA$L6OX}0~RX18[E~O.png

Untagged的誘因:

     第一:下游路由器在傳遞一個IP數據包時,沒有給該IP數據包捆綁任何的標籤值,上游路由器關於該IP數據包就會是Untagged動作

     第二:我到下游路由器的傳輸IP地址不可達,或者就是下游路由器根本沒運行LDP協議,也是造成Untagged動作原因,我們可以試驗下,看圖。

    N0(ZZ_@CYY{}{]J{}D]7[_F.png

R3路由器其實已經發現了R4路由器,因爲我修改了R4的LDP Router-ID,所以R4的傳輸IP地址也跟着改變。R3就是ping不通R4的傳輸IP地址,顯示 no route 

關注藍色圈起來的4.4.4.4/32的路由前綴,Outgoing(出棧動作)是Untagged


總結:

    與pop不同,pop是有特定的標籤值對應的,而untaggedaggregate是沒有特定的標籤的

         Untagged動作,是彈出所有標籤棧,並且跟據LFIB表提示的出接口和下一跳做轉發。

    而Aggregate動作則是彈出標籤棧,同時再做進一步的IP查找,可以看到上圖,Aggregate它在LFIB表中沒有直接指示,出接口和下一跳信息


PHP:PHP叫次末跳彈出機制,也可以叫倒數第二跳彈出。簡單來講就是,所有路由器在爲本地直連路由前綴捆綁標籤的時候,都會捆綁一個保留標籤值,值爲3 就是隱含空(imp-null)

          下圖R3路由器就是4.4.4.4/32路由前綴的倒數第二跳。  所有路由器收到一個標籤值爲3的保留標籤,那麼路由器關於該前綴的Outgoing(出棧)動作就是PoP

E7RTN(V$LYG18QJBFC[QB5R.png

 2%_D`BCCN~)GNN~[BD}0P(0.png


MPLS控制層面和數據層面傳遞:

    

1]Q`4(ZW($WB12Y3CC420`7.png

MPLS環境:IP地址規劃已經標識了,例如:R1的f0/0接口IP地址:192.168.12.1/24  R1的換回口:1.1.1.1/32    剩下路由器依此類推

                  爲了實驗,我把每臺路由器的標籤空間做了限制,例如:R1路由器標籤範圍:100~199   R2路由器標籤範圍:200~299  剩下路由器依此類推  


控制層面:所有路由器運行IGP動態路由協議,假設運行OSPF動態路由協議。運行OSPF協議好處很多,比如第一:保證全網路由可達,第二:保證LDP傳輸IP地址可達

  1. 以R4爲觀察點,R4路由器有一個4.4.4.4/32路由前綴,R4會爲它進行本地捆綁標籤,由於是直連,它爲該前綴捆綁的標籤值爲3,然後傳遞給上游鄰居R3

  2. R3從鄰居收到的標籤叫remote label(遠程標籤)裝在進LIB表中。R3也會爲該前綴分配標籤,假設是300,它會把這個捆綁了300的標籤4.4.4.4/32路由前綴通過LDP協議傳遞給上游鄰居R2和R5,同時也會傳遞給R4。   這個時候不會有環路,還記得上邊LDP協議概述的一句話嗎?是這麼講的:在所有捆綁某一特定前綴remote label中,LSR只使用其中一個標籤來確定該前綴的出棧標籤。FIB表來決定該前綴的下一跳是什麼。(如果暫時不理解這句話,沒關係,下邊講到數據層面就會理解)

  3. 剩下的路由器(R2、R5、R1)都會做和R3相同的動作,爲該前綴捆綁標籤,然後通過LDP協議把捆綁的本地標籤傳遞給鄰居。

  4. 控制層面很簡單,就是IGP路由的學習傳遞,LDP標籤的捆綁和傳遞。



數據層面:

  1. 以R1爲觀察點,假設R1下邊有臺PC要去往4.4.4.4/32地址,R1收到了一個普通的IP報文,首先會去查找它的FIB表(CEF數據轉發表) imposed: {203}  要壓入一個203的標籤,所以R1在轉發出去之前壓入一個203標籤
    }@HEFE`OS[Z~)I7}X8SH%]T.png

 2.數據包到了R2路由器,R2收到一個帶標籤的數據包,會直接查找它的LFIB表(標籤轉發數據庫)  R2只會先看Local列表,因爲R2是從鄰居收到的標籤數據包,鄰居的標籤數據包不就是    R2自己Local(本地)捆綁的嗎? LDP協議本地捆綁的標籤是給鄰居使用的,不是給自己使用的。  R2發現Outgoing(出棧)動作要壓入一個303的標籤,303標籤很明顯是R3給的,那R2明明還有R5路由器,它爲什麼一定要用R3路路由器的標籤而不用R5路由器的標籤呢? 還是那句話:在所有捆綁某一特定前綴remote label中,LSR只使用其中一個標籤來確定該前綴的出棧標籤。FIB表來決定該前綴的下一跳是什麼。

    因爲R2的FIB表中關於4.4.4.4/32的路由下一跳是R3,所以它使用R3的標籤,而不用R5。不知道你們能不能理解,這也就是爲什麼R3先開始把4.4.4.4/32捆綁的標籤傳給R4,而不會產生  環路原因,因爲R4清楚的知道,4.4.4.4/32是我直連路由網段,我FIB表決定一個標籤數據包的Outgoing(出棧)動作。


        A4BDRYRM2FQDML@RDF@)DPW.png

 3.數據包到了R3路由器後,R3收到了一個帶標籤的數據包,也是直接查找LFIB表(標籤轉發數據庫) R3同樣只會先看Local列表,發現303的標籤Outgoing(出棧)標籤是PoP彈出。 R3就會在轉發這個數據包時候將303標籤彈出,剩一個IP包傳給R4路由器

        IOJ[NO({6Z2I3NULP98Q6Z9.png

 4.數據包到了R4路由器,R4由於收到的是一個普通的IP包,會直接查找自己的FIB表(CEF轉發表) 發現是connected(直連)然後轉發出去

        8G$SJZT4YR{EUW$TU1`S6TY.png


上邊這就是整個控制層面和數據層面的全部過程,不知道大家有沒有疑惑,R1怎麼知道它收到的是IP包,R2有怎麼知道它收到的是標籤包,這個和它數據包的二層封裝有關係,下邊我們看下報文的二層封裝


首先我們查看R1的報文:二層的封裝有一個Type(類型)字段,這個字段用來標識上層也就是網絡層運行的是什麼協議。R1的Type(類型)字段是:0X0800  這是一個承載的是IPv4報文

        XDGN69S1Z[VY[V}FW5Z[J}P.png


我們去查看R2路由器的報文:R2的二層Type(類型)封裝的是MPLS label (0X8847)也就是上層承載的是單播MPLS

         BLZWAVJV@QD505QX0BDD{@8.png


MPLS網絡收斂

I@`{IBFK1$BUO0{%]587PC5.png

假設R2和R3之間鏈路故障,最先收斂的肯定是底層的IGP動態路由協議,只有IGP協議收斂完畢後,LDP才能進行收斂。原因其實很簡單,還是那句話:在所有捆綁某一特定前綴remote label中,LSR只使用其中一個標籤來確定該前綴的出棧標籤。FIB表來決定該前綴的下一跳是什麼。從這句可以看出來其實LFIB表(標籤轉發數據庫)是由FIB表(CEF轉發表)和LIB表(標籤信息庫)共同維護而來的,因爲LFIB表中的Outgoing(出棧)標籤是由FIB表決定


MPLS防環:

    • LDP的環路檢測機制依賴於IGP協議

    • 如果出現環路(一般是IGP出了問題,如靜態路由的配置錯誤),標籤頭中的TTL將防止標籤包無止盡的被轉發

    • 標籤頭中的TTLIP頭中的TTL是一樣的,通常拷貝IP頭中的TTL值(當一個IP包進入MPLS網絡時)


MPLS配置:

    R1(config)#ip cef                                                                                      必做:一定要打開CEF交換,貌似CCIE TS考試,會幫你關掉····· 然後你驚喜發現標籤分發會有問題

    R1(config)#mpls ldp router-id loopback 0 force                                     指定LDP的Route-ID (建議使用loopback 接口)     傳輸IP地址默認等於LDP的Route-ID

    R1(config-if)#mpls ip                                                                                在接口激活MPLS和LDP協議


      上邊是必須配置,下邊是選配!!!

    R1(config)#mpls label range 100 199                                                      修改可用標籤空間範圍:選則配置,做實驗看效果可以配置

   R1(config)#mpls ldp neighbor 1.1.1.1 password   cisco                           配置認證(選配)無所謂······

   R1(config)#mpls ldp neighbor 6.6.6.6 targeted                                        跨設備單播建立鄰居關係

   R1(config)#mpls label protocol  ldp |   tdp                                               修改標籤分發協議     tdp是cisco私有的標籤分發協議   ldp和tdp不能互相兼容,也就是一個MPLS網絡只能運行一種協議



查看及驗證命令:

R1#show mpls ldp parameters                         查看LDP的相關參數

R1#show mpls interfaces fastEthernet 0/0            查看MPLS接口及相關參數

R1#show mpls ldp discovery detail                           查看是否發現鄰居

R1#show mpls ldp neighbor 1.1.1.1 detail              查看MPLS LDP鄰居

 

R1#show mpls ldp bindings                查看LIB表

R1#show mpls forwarding-table         查看LFIB表

R1#show ip cef                                    查看CEF表


整個MPLS就講到這裏,有其他問題歡迎留言!

寫這個也是一把辛酸淚啊,這是第三次才寫成功,前兩次手殘了,點到了關閉瀏覽器按鈕····

仝越~
  










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章