MPLS LDP原理與配置


MPLS LDP原理與配置

      MPLS是一種根根據標簽報文中攜帶的短而定長的標簽來轉發數據的技術。
      MPLS的一個基本概念就是兩台LSR必須對在它們之間轉發的數據的標簽使用上“達成共識”。LSR之間可以運行標簽分發協議(Label Distribution Protocol,LDP)來告知其他LSR本設備上的標簽綁定信息,從而實現標簽報文的正確轉發。
      本課程將介紹LDP基本工作原理與特性,以及LDP的基本配置。

一、LDP基本概念
       LDP協議概述
              LDP是MPLS的一種控制協議,相當於傳統網絡中的信令協議,負責FEC的分類、標簽的分配以及LSP的建立和維護等操作。LDP規定了標簽分發過程中的各種消息以及相關處理過程。
              LDP的工作過程主要分為兩部分:
                     1.LSR之間建立LDP會話。
                     2.LSR之間基於LDP會話動態交換標簽與FEC的映射信息,並根據標簽信息建立LSP。

       LDP會話、LDP鄰接體、LDP對等體
       LSR之間交互標簽綁定消息之前必須建立LDP會話。LDP會話可以分為:
              本地LDP會話(Local LDP Session):建立會話的兩個LSR之間是直連的;
              遠程LDP會話(Remote LDP Session):建立會話的兩個LSR之間可以是直連的,也可以是非直連的。
       兩台LSR之間交互Hello消息之后,即建立起鄰接體(Adjacency)關系;
       在建立鄰接體關系的基礎上,兩台LSR之間交互LDP會話消息,建立起LDP會話,兩台設備之間形成LDP對等體關系;

        LSR ID與LDP ID
              每一台運行了LDP的LSR除了必須配置LSR ID,還必須擁有LDP ID。
                     LDP ID的長度為48bit,由32bit的LSR ID與16bit的標簽空間標識符(Label Space ID)構成。
                     LDP ID以“LSR ID : 標簽空間標識”的形式呈現。例如2.2.2.2:0。
              標簽空間標識一般存在兩種形態:
                     值為0:表示基於設備(或基於平台)的標簽空間;
                     值非0:表示基於接口的標簽空間。

        LDP消息
              運行LDP協議的LSR之間通過交換LDP消息來實現鄰居發現、會話建立與維護以及標簽管理等功能。

              按照消息的功能,LDP消息一共可以分為四大類型:發現消息(Discovery Message),會話消息(Session Message),通告消息(Advertisement Message)和通知消息(Notification Message)。
                     發現消息:用來宣告和維護網絡中一個LSR的存在;用於通告和維護網絡中LSR的存在,如Hello報文。
                     會話消息:用於建立、維護和終止LDP對等體之間的會話,如Initialization報文、KeepAlive報文。
                     通告消息:用來生成、改變和刪除FEC的標簽映射;
                     通知消息:用來宣告告警和錯誤信息。
              LDP消息承載在UDP或TCP之上,端口號均為646 。其中發現消息用來發現鄰居,承載在UDP報文上。其他消息的傳遞要求可靠而有序,所以LDP使用TCP建立會話,會話、通告和通知消息都基於TCP傳遞。
       LDP報文封裝
              LDP協議報文包括了LDP頭部和LDP消息兩部分。
                     LDP頭部中攜帶了LDP版本、報文長度等信息;
                     LDP消息中攜帶了消息類型、消息長度等信息。

       LDP頭部長度為10Byte,包括Version,PDU Length和LDP Identifier三部分。
              Version占用2Byte,表示LDP版本號,當前版本號為1。
              PDU Length占用2Byte,以字節為單位表示除了Version和PDU Length以外的其他部分的總長度。
              LDP Identifier,即LDP ID,長度6Byte,其中前4Byte用來唯一標識一個LSR,后2Byte用來表示LSR的標簽空間。
       LDP消息包含五個部分。
              U占用1個bit,為Unknown Message bit。當LSR收到一個無法識別的消息時,該消息的U=0時,LSR會返回給該消息的生成者一個通告,當U=1時,忽略該無法識別的消息,不發送通告給生成者。
              Message Length占用2個bytes,以字節為單位表示Message ID、Mandatory Parameters和Optional Parameters的總長度。
              Message ID占用32個bit,用來標識一個消息。
              Mandatory Parameters和Optional Parameters分別為可變長的該消息的必須的參數和可選的參數。
              Message Type表示具體的消息類型,目前LDP定義的常用的消息有Notification,Hello,Initialization,KeepAlive,Address,Address Withdraw,Label Mapping,Label Request,Label Abort Request,Label Withdraw,Label Release。

       LDP會話狀態機
              LDP使用5種狀態描述LDP會話狀態機。

              LDP Session協商過程可以通過狀態機來描述。如圖所示,有5種狀態。分別是Non-Existent,Initialized,OpenRec,OpenSent,Operational。
                     Non-Existent狀態:該狀態為LDP Session最初的狀態,在此狀態雙方發送HELLO消息,選舉主動方,在收到TCP連接建立成功事件的觸發后變為Initialized狀態。
                     Initialized狀態:該狀態下分為主動方和被動方兩種情況,主動方將主動發送Initialization消息,轉向OpenSent 狀態,等待回應的Initialization消息;被動方在此狀態等待主動方發給自己的Initialization消息,如果收到的Initialization消息的參數可以接受,則發送Initialization和KeepAlive轉向OpenRec狀態。主動方和被動方在此狀態下收到任何非Initialization消息或等待超時時,都會轉向Non-Existent狀態。
                     OpenSent 狀態:此狀態為主動方發送Initialization消息后的狀態,在此狀態等待被動方回答Initialization消息和KeepAlive消息,如果收到的Initialization消息中的參數可以接受則轉向OpenRec狀態,如果參數不能接受或Initialization消息超時則斷開TCP連接轉向Non-Existent狀態。
                     OpenRec狀態:在此狀態不管主動方還是被動方都是發出KeepAlive后的狀態,在等待對方回應KeepAlive,只要收到KeepAlive消息就轉向Operational狀態;如果收到其它消息或KeepAlive超時則轉向Non-Existent狀態。
                     Operational狀態:該狀態是LDP Session成功建立的標志。在此狀態下可以發送和接收所有其它的LDP消息。在此狀態如果KeepAlive超時或收到致命錯誤的Notification消息(Shutdown消息)或者自己主動發送Shutdown消息主動結束會話,都會轉向Non-Existent狀態。
              LDP狀態切換信息可以通過指令debug mpls ldp session看到。

       LDP會話建立 - 發現階段與TCP連接建立

              除了基本發現機制外,可以通過拓展發現機制發現非直連的遠端鄰接體,該內容不屬於課程的重點,詳細內容可以查閱RFC5036相關內容。
              LDP的傳輸地址用於與鄰居建立TCP連接。
                     兩台LSR之間在建立LDP會話之前,需要先建立TCP連接,以便進行LDP協議報文的交換。
                     設備的傳輸地址被包含在LDP Hello報文中,LSR通過Hello報文知曉鄰居的傳輸地址。
                     在使用Hello報文發現鄰居並且知道了對方的傳輸地址后,鄰居之間就會開始嘗試TCP三次握手(基於傳輸地址),並且交互LDP的初始化報文、標簽映射報文等,這些報文都使用雙方的傳輸地址作為源、目的IP地址。
                     LSR必須擁有到達鄰居的傳輸地址的路由。
                     缺省情況下,公網的LDP傳輸地址等於設備的LSR ID,私網的傳輸地址等於接口的主IP地址。

       LDP會話建立 - 會話建立與保持

       LDP鄰居狀態

        LDP會話狀態

       LDP會話的狀態:
              NonExistent:表示LDP會話的最初狀態。在此狀態雙方互相發送Hello消息,在收到TCP連接建立成功事件的觸發后變為Initialized狀態。
              Initialized:表示LDP會話處於初始化狀態。
              Open Sent:表示LDP會話進入初始化狀態后,主動方給被動方發送了Initialized消息,並等待對方的回應。
              Open Recv:表示LDP會話進入初始化狀態后,當雙方都收到了對方發送的KeepAlive消息后,LDP會話進入Operational狀態。
              Operational:表示LDP會話建立成功。

       標簽的發布和管理
              在MPLS網絡中,下游LSR決定標簽和FEC的綁定關系,並將這種綁定關系發布給上游LSR。
              LDP通過發送標簽請求和標簽映射消息,在LDP對等體之間通告FEC和標簽的綁定關系來建立LSP
              標簽的發布和管理由標簽發布方式、標簽分配控制方式和標簽保持方式來決定。

       上游與下游
              MPLS根據數據的轉發方向確定上、下游關系。標簽報文從上游LSR發出,被下游LSR接收並處理。

               如圖所示,對於到達192.168.3.0/24的LSP而言,R3是R2的下游LSR,R1是R2的上游LSR。
       標簽發布方式 - DU模式
              DU模式
                     對於一個特定的FEC,LSR無需從上游獲得標簽請求消息即進行標簽分配與分發。
                     LSR會主動將自己為FEC捆綁的標簽通告給上游鄰居,無需鄰居先發起請求再通告。

                     標簽分配:LSR從本地標簽空間中取出一個標簽與FEC綁定。
                     標簽分發:LSR將標簽與FEC的綁定關系通知給上游LSR。
                     標簽發布方式為DU時,系統默認支持LDP為所有對等體分標簽,即每個節點都可以向所有的對等體發布標簽映射關系,不再區分上下游關系。因為在只給上游對等體分標簽情況下,發送標簽映射消息的時候,要根據路由信息對會話的上下游關系進行確認。
       標簽發布方式 - DoD模式
              DoD模式
                     對於一個特定的FEC,LSR獲得標簽請求消息之后才進行標簽分配與分發。
                     一般情況下,對特定FEC的訪問需求會觸發標簽請求消息。

                      只有上游鄰居向自己請求標簽映射時,LSR才會通告標簽映射給該鄰居
       標簽分配控制方式 - 獨立模式
              獨立(Independent)模式
                     本地LSR可以自主地分配一個標簽綁定到某個FEC,並通告給上游LSR,而無需等待下游的標簽。

                     標簽分配控制方式需要與標簽發布方式結合使用:
                            在使用DU作為標簽分發方式的情況下,如圖所示,R2和R3對192.168.4.0/24這條FEC,可以在上游LSR無請求,且自身沒有收到下游LSR的標簽綁定信息的情況下,主動向上游LSR通告標簽綁定信息。
                            采用DoD作為標簽發布方式時,如圖所示,R2和R3對192.168.4.0/24這條FEC,只要收到上游LSR的標簽請求消息,可以在自身沒有收到下游LSR的標簽綁定信息的情況下,向上游LSR通告標簽綁定信息。
       標簽分配控制方式 - 有序模式
              有序(Ordered)模式
                     對於LSR上某個FEC的標簽映射,只有當該LSR已經具有此FEC下一跳的標簽映射消息、或者該LSR就是此FEC的出節點時,該LSR才可以向上游發送此FEC的標簽映射。

              當標簽控制方式為Ordered,只有當LSR收到特定FEC下一跳發送的特定FEC標簽映射消息或者LSR是LSP的出口節點時,LSR才可以向上游發送標簽映射消息。
                     當標簽分發方式為DU時,如圖所示,對於192.168.4.0/24這條FEC,不論上游LSR是否有請求,必須收到下游LSR對此FEC的標簽綁定信息才向上游LSR發布標簽綁定信息,所以必須由Egress LSR,也就是R4作為LSP建立的“起點”。
                     當標簽發布方式采用DoD時,如圖所示,對於192.168.4.0/24這條FEC,只有收到上游LSR請求的請求,且自身已經收到下游LSR的標簽綁定信息的情況下,才向上游LSR通告標簽綁定信息。因此,必須由Ingress LSR(R1)發起請求,逐跳請求到Egress LSR(R4),最終由R4開始,向上游建立LSP。

       標簽保留 - 自由模式
              自由(Liberal)模式
                     LSR收到的標簽映射可能來自下一跳,也可能來自非下一跳。
                     對於從鄰居LSR收到的標簽映射,無論鄰居LSR是不是自己的下一跳都保留。

              當基於IP網絡部署MPLS時,LSR根據IP路由表判斷接收到的標簽映射是否來自下一跳。
              Liberal方式的最大優點在於路由發生變化時能夠快速建立新的LSP進行數據轉發,因為Liberal方式保留了所有的標簽。缺點是需要分發和維護不必要的標簽映射。
                     DU標簽分發方式下,如果采用Liberal保持方式,則R3保留所有LDP鄰居 R2和R5發來的關於192.168.1.0/24這個FEC的標簽,無論該R2和R5是否是IP路由表中到達192.168.1.0/24的下一跳。
                     DoD標簽分發方式下,如果采用Liberal保持方式, LSR會向所有LDP鄰居請求標簽。但通常來說,DoD分發方式都會和Conservative保持方式搭配使用。

       標簽保留 - 保守模式
              保守(Conservative)模式
                     對於從鄰居LSR收到的標簽映射,只有當鄰居LSR是自己的下一跳時才保留。

              Conservative方式的優點在於只需保留和維護用於轉發數據的標簽,以達到節約標簽的目的。
                     當使用DU標簽分發方式時,LSR可能從多個LDP鄰居收到到同一網段的標簽映射消息,如圖中R3會分別從R2和R5收到網段192.168.1.0/24的標簽映射消息。如果采用Conservative保持方式,則R3只保留下一跳R2發來的標簽,丟棄非下一跳R5發來的標簽。
                     當使用DoD標簽分發方式時, LSR根據路由信息只向它的下一跳請求標簽。
              當網絡拓撲變化引起下一跳鄰居改變時:
                     使用自由標簽保持方式,LSR可以直接利用原來非下一跳鄰居發來的標簽,迅速重建LSP,但需要更多的內存和標簽空間。
                     使用保守標簽保持方式,LSR只保留來自下一跳鄰居的標簽,節省了內存和標簽空間,但LSP的重建會比較慢。
                     保守標簽保持方式通常與DoD方式一起,用於標簽空間有限的LSR。

       PHP特性

              PHP(Penultimate Hop Popping,次末跳彈出),如果激活了PHP特性,那么egress節點在為本地路由分配標簽的時候,會分配一個特殊標簽—3,該標簽被稱為隱式空標簽(Implicit NULL Label)。當LSR轉發一個標簽報文時,如果發現對應的出標簽值為3,則LSR會將棧頂標簽彈出,並將里面所封裝的數據轉發給下游LSR。
              在標簽發布時,R3為作為192.168.3.0/24這條FEC的Egress LSR。分配標簽時,R3為該FEC分配了標簽3,並將該標簽綁定信息通告給R2。
              在數據轉發時,R2作為到達192.168.3.0的次末跳(倒數第二跳),發現出標簽值為3,於是將標簽頭部彈出,將IP報文轉發給R3,而R3則僅需執行一次查詢操作(查詢FIB表)即可獲得相應的轉發信息,轉發效率得到了提升。

       隱式空標簽與顯式空標簽 (1)
              缺省情況下,Egress節點向倒數第二跳分配隱式空標簽(implicit-null),即特殊標簽3。
              但在部署QoS的場景下,標簽被彈出后,其中的優先級也會一並丟失。

       隱式空標簽與顯式空標簽 (2)
              顯式空標簽機制,Egress節點向倒數第二跳分配特殊標簽0。
              R3在轉發標簽報文時,若出標簽封裝為0,則不會將標簽頭部彈出,標簽頭部中的QoS信息得以保存。R4在收到帶0標簽的報文的時候,直接彈出標簽,不用去查找ILM表項。
              缺省情況下,Egress分配的是隱式空標簽,通過label advertise explicit-null使能Egress節點向倒數第二跳分配顯式空標簽。

              在MPLS視圖下,執行命令label advertise { explicit-null | implicit-null | non-null },配置向倒數第二跳分配的標簽。
              根據參數的不同,可以配置Egress向倒數第二跳分配不同的標簽。
                     缺省情況下,使用的是implicit-null,Egress向倒數第二跳節點分配隱式空標簽,值為3。
                     如果配置的是explicit-null,Egress節點向倒數第二跳分配顯式空標簽,值為0。當需要支持MPLS QoS屬性時,可以選用explicit-null。
                     如果配置的是non-null,Egress向倒數第二跳正常分配標簽,即分配的標簽值不小於16。

二、LDP工作原理
       組網介紹
              網絡中已經部署OSPF路由協議且各設備之間能夠正常學習到對方的路由信息。
              已在各設備及相應接口上激活MPLS及LDP,且在相鄰的設備之間已正常建立本地LDP會話。
              所有LSR均采用DU + Independent +Liberal方式。

              華為設備目前缺省模式為下游自主方式(DU)+ 有序標簽分配控制方式(Ordered)+ 自由標簽保持方式(Liberal)。
              對於從R1進入,到達192.168.4.0/24的數據,R1為Ingress LSR,R4為Egress LSR。

        標簽分發 - Egress LSR
              R4直連網段192.168.4.0/24,R4將主動為到達該網段的路由分配標簽,如1041,並主動通過LDP協議報文將標簽映射通告給LDP對等體R2和R3。

              注:缺省情況下,根據32位的主機IP路由觸發LDP建立LSP。可以通過手工配置觸發非32位路由的LSP建立。

       標簽分發 - Transit LSR
              以R2為例,在其路由表中,192.168.4.0/24路由的下一跳為R4,當它從R4收到關於192.168.4.0/24的標簽映射通告時,由於該通告來自下游LDP鄰居,因此這將觸發它自己為該路由分配標簽1021,並將標簽映射通告給LDP鄰居(如R1)。R3同理。

       標簽分發 - Ingress LSR
              R1收到LDP鄰居R2及R3通告過來的關於192.168.4.0/24路由的標簽映射后,將這兩個標簽都存儲起來,但是由於在自己的路由表中,到達192.168.4.0/24的下一跳是R2,因此當前它只會使用R2所通告的標簽1021。

              注:當R2發生故障時,OSPF路由將會重新收斂,此時R1的路由表中192.168.4.0/24路由的下一跳將會切換至R3,此時R1將啟用R3所通告的、關於192.168.4.0/24的標簽。
       標簽轉發 - Ingress LSR
              R1作為Ingress LSR,需要對接收的IP報文執行Push操作壓入標簽,並進行標簽轉發。

             當R1收到發往192.168.4.1的IP報文時,首先在其FIB表中查詢該目的IP地址,它發現所匹配的表項的Tunnel ID為非0,因此繼續在NHLFE中查詢該Tunnel ID,然后意識到需要將對該IP報文壓入標簽並進行標簽轉發,出接口為GE0/0/0、下一跳為R2、出站標簽為1021,於是為報文插入標簽頭部並轉發出去。
       標簽轉發 - Transit LSR
              R2作為Transit LSR,需要對接收的IP報文執行Swap操作交換標簽,並進行標簽轉發。

              當R2收到攜帶1021標簽的標簽報文時,查詢ILM,根據ILM對應到NHLFE中的表項。於是,R2對該標簽報文通過swap操作將標簽更換為1041,並從相應的接口轉發出去。
       標簽轉發 - Egress LSR
              R4作為Egress LSR,需要對接收的IP報文執行Pop操作交換標簽,並進行IP轉發。

              當R4收到攜帶1041標簽的標簽報文時,查詢ILM,根據ILM查詢到操作為Pop。於是,R4對該標簽報文通過Pop操作將最外層標簽剝離,此時該報文已經變成了標准IP報文,R4將對該IP報文執行標准的IP轉發流程。
              R4在轉發該報文時分別查詢了LFIB和FIB表,作為最后Egress LSR,其存在轉發效率提升的可能性,怎么做?

       在MPLS中,運行LDP協議的LSR的操作小結
              LSR首先通過運行IGP協議(例如OSPF、IS-IS等)來構建路由表、FIB表;
              LDP根據相應的模式,為路由表中的路由前綴(FEC)分配標簽;
              LDP根據相應的模式,將自己為路由前綴分配的標簽,通過LDP標簽映射報文通告給LDP鄰居;
              LSR將自己為路由前綴分配的標簽,以及LDP鄰居為該路由前綴通告的標簽存儲起來,並與出接口、下一跳地址等信息形成關聯(標簽轉發表項);
              當LSR轉發到達目的網絡的標簽報文時,所使用的出站標簽總是下游LDP鄰居所通告的標簽,此處所指的下游鄰居,是設備的路由表中到達該目的網絡的下一跳設備。

三、LDP基本配置
       LDP基本配置命令 (1)
       1、使能LDP
              [Huawei] mpls ldp
              mpls ldp命令用來使能本節點的LDP能力,並進入LDP視圖。
              [Huawei-GigabitEthernet0/0/0] mpls ldp
              在接口視圖下,使能當前接口的LDP功能。需先使能全局LDP能力后才能執行接口下的LDP使能命令。
       2、配置LDP遠端會話
              [Huawei] mpls ldp remote-peer remote-peer-name
              mpls ldp remote-peer命令用來創建遠端對等體並進入遠端對等體視圖。
              [Huawei-mpls-ldp-remote-PeerName] remote-ip ip-address
              remote-ip命令用來配置LDP遠端對等體的IP地址。
       LDP基本配置命令 (2)
       3、配置觸發LSP的策略
              [Huawei-mpls] lsp-trigger { all | host | ip-prefix ip-prefix-name | none }
              lsp-trigger命令用來指定哪些靜態路由及IGP路由會觸發LDP LSP的建立,缺省情況下,根據32位地址的IP路由觸發LDP建立LSP。
                     all:所有靜態路由和IGP路由項觸發建立LSP。配置該命令后,所有靜態路由及IGP路由會觸發LDP建立LSP,會導致LSP數量龐大,占用過多的標簽資源,以及整網LSP收斂速度變慢。故一般情況下不推薦配置此命令。
                     host:32位地址的IP路由觸發建立LSP。
                     ip-prefix ip-prefix-name:根據IP地址前綴列表觸發建立LSP。
                     None:不觸發建立LSP。
       4、配置LDP標簽發布模式
              [Huawei-GigabitEthernet0/0/0] mpls ldp advertisement { dod | du }
              缺省情況下,標簽發布模式為下游自主標簽分發(Downstream Unsolicited)。
                     如果標簽分配方式為DU,則標簽保持模式為Liberal。
                     如果標簽分配方式為DOD,則標簽保持模式為Conservative。
              BGP路由也可以觸發LDP LSP的建立,但此部分內容不在本課程的討論范圍內。
       LDP基本配置命令 (3)
       5、配置LDP標簽分配控制方式
              [Huawei-mpls-ldp] label distribution control-mode { independent | ordered }
              缺省情況下,LDP標簽分配控制方式為有序標簽分配控制(Ordered)。
       6、配置PHP特性
              [Huawei-mpls] label advertise { explicit-null | implicit-null | non-null }
              缺省情況下,出節點向倒數第二跳分配隱式空標簽(implicit-null)。
                     explicit-null:出節點向倒數第二跳分配顯式空標簽。
                     implicit-null:出節點向倒數第二跳分配隱式空標簽。
                     non-null:出節點向倒數第二跳正常分配標簽。


              MPLS體系有多種標簽分配協議,LDP標簽分配協議是這些協議中使用較廣的一種。
              LDP是LSR之間協商標簽含義的過程。LDP協議使用發現、會話、通告、通知四類報文進行會話的建立和標簽的分發。
              LDP通過標簽發布方式、標簽分配控制方式和標簽保持方式來決定標簽的發布和管理。華為數通產品默認的方式為:下游自主標簽發布方式+有序標簽分配控制方式+自由標簽保持方式。
              利用LDP可以實現將網絡層的路由信息直接映射到標簽信息,進而建立起標簽交換路徑(LSP)。LSR之間將依據本地轉發表中對應於一個特定FEC的入標簽、下一跳節點、出標簽等信息連接在一起,從而形成跨越整個MPLS域的標簽交換路徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM