HCIE Routing&Switching之MPLS LDP理論

2022-12-01 06:01:54

  前文我們瞭解了MPLS的靜態LSP設定相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/16937104.html;今天我們來聊一聊標籤分發協定LDP相關話題;

  我們知道在mpls網路中,只要有了標籤,轉發就是一件很簡單的事;但是如何產生標籤,卻是MPLS中較難的部分;手動靜態設定吧,過於繁瑣,且容易出錯;為此,MPLS有一個叫LDP的協定出現了;

  LDP簡介

  LDP是Label Distribution Protocol的首字母縮寫翻譯成中文就是標籤分發協定;該協定主要用於動態分配和維護mpls標籤;在LSR之間通過建立LDP Session來交換彼此的標籤,完成標籤的分發;建立了LDP Session的兩臺裝置稱為LDP Peers(LDP鄰居或者叫對等體);

  提示:LDP通過hello資訊建立起鄰居,隨後建立起LDP對談後,就開始在LDP鄰居間交換標籤和FEC對映,從而完成LSP的建立;

  LDP訊息型別

  LDP封裝在UDP或TCP之上,埠號為646;

  LDP發現機制

  提示:LDP發現機制有兩種,第一種是LDP基本發現機制,即發現直連鄰居,使用組播;通過週期性的傳送LDP Link Hello,建立本地LDP對談;第二種是LDP擴充套件發現機制,即發現非直連的鄰居,使用單播;通過週期性傳送LDP Targeted Hello,建立遠端LDP對談;

  提示:基本發現機制使用組播地址224.0.0.2;基本方式只能用於兩個路由器直連,不能跨網段;

  提示:擴充套件發現機制使用單播,所以可以跨路由器,使用各自的單播地址建立對談;前提是這兩個單播地址是能夠互通的;

  LDP鄰居發現過程

  提示:LDP hello訊息中使用UDP封裝,傳送週期為5秒,使用組播地址224.0.0.2(所有路由器);hello訊息中,攜帶Transport Address欄位,該欄位預設域裝置設定的LSR ID一直,表明與對端建立鄰居關係時所使用的ip地址;所以我們設定的LSR ID 需要保證路由可達,同時對應的介面也需要存在;只有保證兩個LSR ID路由可達能夠互相通訊以後,對應雙方才會正式通過TCP的三次握手,用自己的LSR ID來建立起鄰居;當然這是預設情況;我們也可以根據自己的需求來更改transport address欄位資訊;

  LDP對談建立過程

  提示:建立對談階段由地址大的一方向傳送協商引數,協商引數包括LDP協定版本,標籤分發方式、Keepalive保持定時器的值、最大PDU長度和標籤空間等;如果對端不能接受相關引數,則傳送Notification訊息來終止LDP對談的建立:如果對端能接受,則對端傳送keepalive訊息並攜帶上自己的引數資訊,隨後本端收到引數後檢查是否接受,接受就傳送keepalive訊息,隨後雙方都收到了對方的keepalive訊息以後,對應對談就建立起了;LDP對談建立成功後,隨後就進行fec的建立與標籤的分發;

  提示:以上是LDP整個活動週期,最初是兩個路由器通過傳送hello訊息尋找建立鄰居,隨後通過transport address建立tcp三次握手,隨後就是傳送協商引數進行對談建立;對談建立好以後,對應雙方進行fec的建立與標籤的分發;最後一個是對談沒有能正常建立就會傳送Notification訊息告知對方對談建立失敗,終止LDP對談的建立;

  LDP標籤的釋出和管理

  LDP對談建立後,LDP協定開始交換標籤對映等訊息用於建立LSP;RFC5036本別定義了標籤釋出方式、標籤分配控制方式、標籤保持方式來決定LSR如何釋出標籤和管理標籤;

  標籤釋出方式

  提示:標籤的釋出方式有兩種,DU(Downstream Unsolicited,下游自主);所謂下游自主是指LSR無需從上游獲得標籤請求訊息即可進行標籤的分配與分發;DoD(Distribution on Demand,下游按需);所謂下游按需是指LSR必須從上游獲得標籤請求訊息之後進行標籤分配與分發;華為和思科裝置預設是採用DU(下游自主),這是因為在網路拓撲發生變化時,採用DU可以快速反應為新的拓撲分發標籤,收斂時間相對於DoD較短;

  標籤分配控制方式

  提示:Label Distribution Control Mode,標籤分配控制方式;為一條路由字首分配標籤的前提條件;標籤由裝置自動隨機生成;標籤分配控制方式也有兩種型別;一種是Independent,一種是Ordered;Independent表示獨立;所謂獨立是指LSR可以主動分配標籤,無需燈帶下游的標籤;Ordered表示有序,有序是指LSR只有收到下游的標籤後,才能分配標籤;華為裝置預設採用Ordered模式,這樣是為了避免下游ip分組的標籤為分配或收斂時間較長,上游的標籤已分配,資料開始轉發而造成資料丟失;思科裝置預設採用Independent;也就是說Independent追求快速,但不穩定,可能出現資料丟失的情況;Ordered追求穩定,但是相對於Independent要慢;

  標籤的釋出方式和控制方式的組合

  標籤保持模式

  Label Retention Mode,標籤保持模式是指如何保留從鄰居接收到的標籤;

  自由模式(Liberal)

  提示:所謂自由模式是指保留鄰居傳送的所有標籤,無論鄰居是否是自己的下一跳;這種方式的優點是,路由傳送變化能夠快速建立新的LSP進行資料轉發;缺點就是消耗更多的記憶體和標籤空間;

  保守模式(Conservative)

  提示:保守模式是指只保留來自下一跳鄰居的標籤;這種模式的優點是節省記憶體和標籤空間;缺點是路由發生變化時必須從新的下一跳那裡獲得標籤後才能資料轉發,收斂較慢;通常與DoD方式一起;華為和思科裝置預設採用Liberal自由模式;

  LDP建立LSP到資料轉發過程

  LDP建立LSP過程

  提示:IGP協定負責實現mpls網路內路由可達,為fec的分組提供路由;LDP協定負責實現對FEC的分類、標籤的分配以及LSP的建立和維護等操作;

  MPLS資料轉發過程

  提示:在mpls網路中,封包在每臺路由器上根據已分配的標籤進行標籤的封裝和轉發;當封包到達egress節點時,對應發出的封包都不會代有標籤,因為非mpls網路路由器,它是識別不了mpls標籤的;其次在mpls網路中,如果流量很大的情況下,如果讓egress節點再處理標籤就會額外給egress節點帶來負擔,所以更妥當的做法是在倒數第二跳節點將標籤剝離掉,讓egress節點直接用ip路由轉發會更為妥善(它不需再查標籤轉發表,然後再查ip路由表,而是直接查詢ip路由表將對應封包轉發出去);

  提示:倒數第二跳彈出的具體過程如上圖所示;RTC收到RTB傳送代有標籤1026的報文,查詢LFIB(Label Forwarding Information Base,標籤轉發資訊資料庫)表,發現分配的出標籤為隱式空標籤3,於是執行彈出標籤的動作,並將ip封包轉發給下游路由器RTD;RTD收到RTC傳送ip報文,直接查詢自己的FIB表,根據FIB表中的出介面進行ip報文封裝並轉發出去;

  提示:最下游路由器在標籤分發時,會給倒數第二跳路由器分發標籤為3的標籤,表示倒數第二跳發出的封包,剝離標籤,即最後一跳路由器收到不帶標籤的封包;

  倒數第二跳彈出

  PHP(Penultimate Hop Popping);所謂倒數第二跳彈出是指在mpls網路中當攜帶有標籤的封包到達倒數第二跳路由器時,會將對應的標籤剝離,然後將封包轉發給最後一跳;這是因為在最後一跳節點,標籤已經沒有使用價值;在這種情況下將標籤彈出,減少最後一跳的負擔;

  提示:上圖主要描述了在mpls網路中,標籤在最後一跳節點都會將所有標籤剝離,然後將原始封包轉發至下一個非mpls網路的路由器;

  提示:上圖描述了倒數第二跳彈出的示意圖;在倒數第二跳時間頂層標籤剝離,減輕最後一跳的負擔;這裡說一下,倒數第二跳彈出主要是彈出頂層標籤(如果有多層標籤的情況下);即路由器檢視標籤轉發表發現轉發出去的標籤為3,對應就會把原有標籤剝離,然後轉發給下一跳路由器;對應路由器收到的封包就不帶任何標籤;

  特殊保留標籤

  提示:標籤3是隱式空標籤(Implicit-null),表示通知倒數第二跳路由器移除頂層標籤;這裡需要注意標籤3其實永遠不會出現在MPLS報文的標籤棧中;即我們抓包是看不到對應標籤3的;

  提示:標籤0顯式空標籤(explicit-null),表示通知路由器直接彈出標籤;在實施QOS時,最後一跳必須攜帶EXP位,因此標籤不能被彈出,需要設定顯式空標籤,此時分配給特定路由器的標籤值為0並轉發給LDP鄰居;

  簡單講,當路由器檢視LFIB表發現轉發出去的標籤為3,對應封包發出時,對應標籤就被剝離掉了;所以到最後一跳的封包是不帶標籤;當路由器檢視LFIB表發現轉發出去的標籤為0,對應封包發出時還是會攜帶標籤0,到達最後一跳,對應封包是攜帶標籤0;兩者區別就是隱式空標籤在倒數第二跳轉發之前被剝離,顯式空標籤是在最後一跳資料轉發出去之前剝離;