馬光星
摘 要 本文定義了在幀中繼網上的MPLS模型和普通機理。對于幀中繼網,還擴展和闡述了在文件[1]中描述的MPLS結構和在文件[2]中描述的標簽分配協議。MPLS像標簽交換路由器一樣能有效的用于幀中繼交換。
關鍵詞 MPLS 幀中繼 標簽交換路由器 幀中繼交換
1 引 言
在文件[1]中描述了多協議標簽交換MPLS(Multiprotocol Label Switching )協議的結構。作為標簽交換路由器能用于幀中繼交換。幀中繼交換運行網絡層的路由算法(如OSPF,IS-IS)和在這些路由算法基礎上向前傳送數據。不需要特定的幀中繼選路。
幀中繼交換適用于標簽交換時,在幀的幀中繼數據鏈路層的首部DLCI(Data Link Connection Identifier)字段中承載頂層(當前)標簽。幀中繼交換不處理與頂層標簽一起承載的附加信息,如果有多個標簽的包,附加信息與其他標簽一起在文件[3]定義的MPLS普通封裝中承載。
能夠配置幀中繼永久的虛電路(PVCs)承載標簽交換基本業務。當MPLS標簽和幀中繼交換都適合幀中繼交換路由器時應該用DLCIs,根據本規范應該封裝MPLS業務和在網絡層路由信息基礎上向前傳送。
2 幀中繼交換的特性
標簽交換的結構允許在LSR(Label Switching Router)執行中有相當大的靈活性,而(可能預先存在的)硬件有能力約束FR-LSR,多協議互聯利用的幀格式和幀中繼標準一樣。由于這樣的約束,FR-LSRs需要一些特殊過程。
影響它的性能(如LSRs )的幀中繼交換的一些主要特點是:
*在幀的幀中繼數據鏈路首部中DLCI字段上實現標簽交換功能;這規定了在包中標簽的長度和位置。DLCI字段的長度可能是10(缺省)或23比特和在首部中它能夠擴展到2或4個字節。
*當在路由器中IP首部上執行時,一般不能實現“TTL(Time To Live)-減少”功能。
*在建立的電路上傳遞參數的每個節點執行阻塞控制。可以在幀的首部中設定標記作為阻塞結果或超過約定的電路參數。
*雖然在標準交換中,可以配置多個輸入DLCIs對一個輸出DLCI,在多點對一點電路中得到,一般不完全支持多點對多點VCs。
3 標簽封裝和堆棧
3.1 標簽封裝
在缺省狀態,應該用普通的標簽封裝發送全部帶標簽的包,使用幀中繼空封裝機理:
“n”是Q.922的地址長度,可以是2或4個字節。
DLCI的Q.922[ITU]表示法(按規范的順序,權值最小的比特存儲在第一位,即在存儲器中一個字節的最右邊的比特)如下:
幀中繼空封裝的使用意味著標簽隱含著編碼網絡協議的類型。
在文件[3]中描述了關于標簽堆棧結構和返回到幀源的差錯消息。
對于深層“n”的標簽堆棧,普通封裝包含“n”標簽,在頂層堆棧條目中承載著對EXP,S和TTL字段的有意義的值,而非標簽,標簽更適合在按Q.922地址形式編碼的幀中繼數據鏈路首部的DLCI字段中承載。
3.2 標簽堆棧
每個標簽堆棧條目用4個字節表示
標簽:20比特標簽值;EXP:試驗用3比特;S:堆棧的底部1比特;TTL:8比特。
4 幀中繼標簽交換處理
4.1 DLCIs的使用
用標簽與路由的結合完成標簽交換和用標簽值向前傳送包,包括確定任意更換標簽的值。在FR-LSR中,頂層(當前)MPLS標簽在幀的幀中繼數據鏈路層的首部DLCI字段中承載。頂層標簽載著關于網絡類型的隱含信息。
對于兩種連接的FR-LSRs,全雙工連接時LDP(Label Distribution Protocol)一定是可用的。用配置方法分配LDP VC的DLCI值,類似于配置DLCI用在兩個交換機之間運行IP路由協議。
除這個配置值以外,用DLCI值可以處理鏈路兩個方向的MPLS,屬于兩個獨立的空間,即,VCs可以是“半雙工”,每個方向用它自己的DLCI。
DLCIs允許的范圍,DLCIs長度和支持通過LDP消息傳達VC合并。注意用標簽的DLCIs范圍取決于DLCI字段的長度。
4.2 同類LSPs
如果是一個LSP(Label Switching Path),當從LSR1發送包P到LSR2和LSR3時,LSR1,LSR2和LSR3用相同的標簽堆棧編碼。像一個LSP使用同類的。
4.3 不是同類LSPs
如果是一個LSP,當發送包P到LSR2時,LSR1用一個標簽堆棧編碼,當發送包P到LSR3時,而LSR2用不同的編碼。在一般情況下,MPLS結構支持在不同的跳上有不同的標簽堆棧編碼的LSPs。當收到貼標簽的包時,LSR必須譯碼確定當前標簽堆棧的值,必須在標簽堆棧上運行確定堆棧的新標簽值和在發送貼標簽的包到它的下一跳之前適當的編碼新值。
運行幀中繼交換的LSRs和其它LSRs結合的MPLS網絡,其它LSRs用其他MPLS封裝,如普通(MPLS填充首部)或ATM封裝。在這樣的網中,可能有些LSRs,帶有幀中繼接口及MPLS普通接口。這是同一LSP的不同跳上有不同標簽堆棧編碼LSR的一個例子。在輸入接口上LSR可能不交換幀中繼標簽編碼和在輸出接口上用標簽編碼進入普通MPLS首部代替它。
4.4 幀中繼標簽交換回路的預防和控制
FR-LSRs應該在空閑FR-LSPs回路或LSP幀中繼段上運行,因此FR-LSPs應該用回路檢測和可用的回路預防機理。
4.4.1 FR-LSRs回路控制——MPLS TTL處理
在MPLS標簽堆棧中編碼的MPLS TTL用下面的機理:
(a)抑制回路;
(b)限制包的范圍。
當數據包沿著LSP傳播時,如果經過路由器的順序相同,不管有沒有標簽交換應該顯現相同的TTL值。如果數據包沿著LSPs層次傳播時,在TTL值中應反映經過LSR跳的總數。
MPLS TTL的初始值從前面的TTL值加載到新推進的標簽條目中,當前面的標簽堆棧不存在時,來自網絡層的首部或預先存在的低層標簽堆棧條目。
FR-LSR同層交換貼標簽的包不消耗MPLS TTL。FR-LSR的順序是“非-TTL段”。
當數據包從“非-TTL LSP段”顯現時,它跨過的LSR-跳數值,應該反映在TTL中。在“獨播”情況下,傳播LSP的長度或LSP幀中繼段的長度到FR-LSR入口節點,在傳送包進入非-TTL LSP段之前,能使入口消耗TTL值。
當入口FR-LSR消耗MPLS TTL時,在數據包到達“非-TTL LSP段”的出口前,特殊數據包的TTL將過期,FR-LSR一定不交換帶標簽的包,而遵守文件[2]中的規范,企圖返回差錯消息到包的源。
*它作為一個過期的包處理和返回一個ICMP消息到它的源。
*它作為無標簽的包傳送,用TTL反映IP(網絡層)傳送。
如果進來的TTL是1,只用第一個選項。在多播情況下,LSP長度或LSP段長度傳播到FR-LSR出口節點,在包傳出非-TTL LSP段之前,出口消耗TTL值。
4.4.2 執行MPLS TTL計算
用“輸入TTL”計算得到“輸出TTL”取決于(i)“輸入封裝”,(ii)“傳送封裝”和(iii)“輸出封裝”。(i),(ii)和(iii)之間的關系定義為“輸入封裝”(ie),“傳送封裝”(fe)和“輸出封裝”(oe)的函數“D”。用“輸入TTL”計算得到“輸出TTL”說明如下:
輸出TTL=輸入TTL-D(ie,fe,oe)
或簡要符號:
輸出TTL=輸入TTL-d
“d”有三個可能值:“0”,“1”或“LSP段的跳數”:
“獨播”傳輸:
當傳送包時,“LSP段的跳數”值是有標簽的跳數值,當為LSP分配標簽時,如果LDP提供跳數值,那是有“跳數目標”的LDP消息。如果LDP不提供跳數值或提供一個“未知”值和缺省“段的跳數”值是1。
當發送標簽連結上游時,跳數值與來自下游的相應連結有關,如果不同于“未知”值,必須加1和向上游發送結果作為與新的連結有關的跳數值(不改變發送的未知值)。如果新的跳數值超過“最大”值,FR-LSR不必向上游傳遞連結,但必須向上游發送一個錯誤。
多播傳輸:
“傳送封裝”用縮寫:“I”對應IP(網絡層),“G”對應于普通MPLS和“F”對應幀中繼MPLS,如果LSR接口用縮寫:“i”對應輸入或輸出封裝是IP和非MPLS封裝,“g”對應于輸入或輸出MPLS封裝是普通MPLS,“f”對應幀中繼,“a”是ATM和認為符號“iIf”,“gGf”,“fFf”,等作為LSRs輸入,傳送和輸出封裝。下面舉例說明對于各種LSPs的TTL計算:
“iIf”在幀中繼LSP“入口LSR”計算:
mpls_ttl=IP_TTL-跳數值=n-5
“fIi”是來自幀中繼LSP的“出口LSR”計算:
IP_ttl=mpls_ttl-1=n-6
“iIg”在LSP的“入口LSR”,計算:mpls_
ttl=n-1
“gGf”是來自普通MPLS段的“出口LSR”,在幀中繼段的“入口LSR”計算:mpls_ttl=n-6
“fGa”是來自幀中繼段的“出口LSR”,在ATM段的“入口LSR”計算:mpls_ttl=n-9
“gGf”是來自普通MPLS段的“出口LSR”,在幀中繼段的“入口LSR”計算:mpls_ttl=n-13
“fGg”是來自幀中繼段的“出口LSR”,在普通MPLS段的“入口LSR”計算:mpls_ttl=n-14
“gIi”是來自LSP的“出口LSR”計算:IP_ttl=n-15
幀中繼“獨播”——在入口計算的TTL
幀中繼多播——在出口計算的TTL
4.5 經過FR-LSRs入口的標簽處理
當數據包第一次進入MPLS區域時,傳送操作除輸出封裝至少在一個條目中包括MPLS標簽堆棧外,由正常網絡層傳送包。幀中繼空封裝將承載在標簽中隱含的網絡層協議信息,標簽必須與網絡協議結合。用網絡層傳送后得到的網絡TTL(或跳限制)填充在頂層標簽堆棧條目中的TTL字段中。進一步處理FR-LSR有兩種可能情況:
(a)LSP是同類——只有幀中繼——和FR-LSR是入口。
(b)LSP不是同類——幀中繼,PPP,以太網,ATM等,段形成LSP——和FR-LSR是進入幀中繼段的入口。
“獨播”數據包,幀中繼LSP(同類)的“跳數”或LSP(不是同類)的幀中繼段應該消耗MPLS TTL。構成LSP的LDP應該傳遞有用信息到關于“非-TTL段”“跳數”的FR-LSR入口。
多播數據包,MPLS TTL應該減1。構成LSP的LDP應該傳遞有用信息到關于“非-TTL段”的“跳數”的FR-LSR出口。
其次,封裝包的MPLS向下游傳遞到達幀中繼的數據鏈路,帶頂層標簽的驅動器作為輸出DLCI。傳送載著MPLS封裝數據包的幀中繼幀進入幀中繼VC到下一LSR。
4.6 由核心FR-LSRs處理標簽
在FR-LSR中,在幀的幀中繼數據鏈路層的首部DLCI字段中承載當前(頂層)MPLS標簽。正像傳統的幀中繼,對于到達接口的幀,在DLCI基本信息中查找幀中繼數據鏈路首部承載的DLCI,代替有相應輸出的DLCI和在輸出接口上發送(傳送到下一節點)。
在標簽堆棧的頂層也承載當前標簽信息。在頂層條目中,在幀的幀中繼數據鏈路層的首部中承載和交換除標簽信息外的所有字段,當前是有意義的。
4.7 由出口FR-LSRs 處理標簽
當到達幀中繼LSP的端點時,FR-LSR取出標簽堆棧。如果取出的標簽是最后的標簽,確定承載特定的網絡層協議是必需的。標簽堆棧沒有承載識別網絡層協議的明顯信息。這必須從堆棧取出的標簽值推出。
如果取出的標簽不是最后的標簽,前面的頂層MPLS TTL傳送到新的頂層標簽堆棧條目。
如果FR-LSR是混合LSP的幀中繼段的出口交換,幀中繼段的終點不是LSP的終點,在下一跳標簽傳送條目中具有的信息基礎上,為傳送到LSP的下一段應該處理MPLS包。從NHLFE(Next Hop Label Forwarding Entry)設置輸出標簽值,依據輸出接口類型和傳輸操作類型適當減少MPLS TTL值。根據MPLS規范,對于LSP的下一段特定的鏈路傳送MPLS包。
“獨播”的數據包,如果輸出接口是普通的或有LSP(不是同類)的下一ATM段的“跳數”,如果輸出接口是ATM(非-TTL)接口,MPLS TTL應該減1。
多播數據包,MPLS
TTL應該減少離開FR段的跳數值。關于FR“非-TTL”的“跳數”,構成LSP的LDP應該傳遞有意義的信息到出口FR-LSR。
5 幀中繼標簽交換控制
支持標簽交換的幀中繼交換必須實現標簽交換的控制,標簽交換的控制主要由標簽分配和維護程序組成。可以用幾種機理傳送標簽連結信息,其中之一是標簽分配協議(LDP)。
標簽交換控制使用直接來自網絡層路由協議的信息,這意味著交換必須在這些協議中同等分享(如,OSPF,IS-IS)。
在某些情況下,LSRs可以用其它協議(如RSVP,PIM,BGP)分配標簽連結。在這些情況中,幀中繼LSR應該在這些協議中分享。
在經過LDP或RSVP或其它(不包括傳統幀中繼機理)建立幀中繼電路的情況下,假定建立信息的電路,如輸入/輸出最大幀長度,進/出的請求/同意的通過量,進/出的接收通過量,進/出的突發長度,進/出的幀速率,在發送中使用的和可以傳遞阻塞控制到FR-LSRs至RSVP或能夠靜態配置。還假設阻塞控制和幀的首部帶標記作為阻塞結果,應該由FR-LSRs用類似于傳統幀中繼電路的方式完成。仿真最有效路由器的目標作為缺省值,缺省VC參數,在缺少LDP時,RSVP或其它機理參與設置這樣的參數,應該是0 CIR,因此輸入管理將在輸入的幀中,設置DE(Discard Eligibility)比特,但不丟棄數據幀。
在MPLS基礎上,電路控制和狀態信息可以經過LDP傳遞。
支持幀中繼交換的標簽交換要求只與幀、比特填充、首部和FCS一致。對于PVCs或SVCs,不需要Q.933信令。在相同接口上,對于非-MPLS(標準幀中繼)PVCs或SVCs可以使用PVC或SVC信令。
在幀中繼交換基礎上標簽交換控制成分的存在,不排除能夠支持由ITU和FRF(Frame Relay Forum)在相同交換和相同接口上定義的幀中繼控制成分。兩個控制成分,有ITU/FRF定義的標簽交換應該獨立運行。
然而,只有少量的信息需要在兩個控制成分之間一致,DLCI空間部分對每個成分都是可用的。
6 標簽分配和維護過程
標簽分配協議的機理和消息形式在文件[1]和[2]中討論。在本節中討論的“下游——按需”標簽分配和維護機理必須由不支持VC合并的FR-LSRs使用及也可以由支持VC合并的FR-LSRs使用(注意這一機理用于hop-by-hop路由業務)。
6.1 邊緣LSR的性能
考慮FR-LSR邊緣集的成員。假設,作為路由計算結果,選擇FR-LSR作為確定路由FEC(Forwarding Equivalence Classes)的下一跳和下一跳通過LC-FR接口是可以到達的。假設下一跳 FR-LSR是一個“LDP-peer”。邊緣LSR為來自下一跳,下游LSR的標簽連結發送一個LDP“請求”消息。當邊緣LSR接收來自下游的,在LDP“映射”消息中LSR標簽連結信息的響應時,標簽存儲在標簽信息底部作為FEC的輸出標簽。映射消息可能包括跳數值,跳數值表示包通過FR-LSR域到達出口FR-LSR的跳數值,為計算TTL可以存儲這個信息。一旦這樣做,LSR可用MPLS在FEC中向前傳送包。
當FR-LSR域的邊緣集的一個成員從FEC的FR-LSR接收LDP“請求”消息時,它是出口FR-LSR。它分配一個標簽,在它的標簽信息底部建立一個新條目,標簽放在進來標簽條目中和返回(經過LDP)包含分配標簽回流到原請求同等的LDP的“映射”消息。“映射”消息包含“跳數”的目標置1。
當路由計算引起邊緣LSR改變路由的下一跳和前面的下一跳在FR-LSR域中時,邊緣LSR應該通報前面的下一跳(經過LDP“釋放”消息),標簽與路由的結合不再需要。
當FR-LSR從連接到LC-FR接口上FR-PSR的同等LDP接收一些路由(FEC)的LDP“請求”消息時,FR-LSR采取下列動作:
*它分配一個標簽,在它的標簽信息底部建立一個新條目和標簽放在進來標簽條目的成分中;
*它傳送“請求”,通過發送一個LDP“請求”消息到下一跳LSR,路由(FEC)的下游;
在“順序控制”方式中,在返回“映射”上游的響應到“請求”前,FR-LSR等待來自下游的有“映射”消息的響應。在此情況下,FR-LSR增加它從下游接收的跳數值和用這個值在返回上游的“映射”中。
FR-LSR可以不等待來自下游(“獨立控制”方法)的連結,返回上游連結。在此情況下,在“映射”中,它使用保留的跳數值,表示它是‘未知’的。稍后將返回正確的跳數值,說明如下。
“順序”和“獨立”控制各有優缺點,允許作為執行或配置選擇。
一旦FR-LSR在來自下一跳的LDP“映射”消息中,接收標簽連結的響應,標簽放在LIB條目的輸出標簽中。
注意,FR-LSR或FR-LSR域的邊緣集的成員,可以接收來自相同FR-LSR的相同路由(FEC)的多個連結請求。它必須為每個“請求”(假定有足夠的資源)產生新的“映射”和保留任意現存的映射。對于接收的每個“請求”, FR-LSR應該產生新的連結“請求”傳送到路由的下一跳。
當路由計算引起邊緣LSR改變路由(FEC)的下一跳時,FR-LSR應該通報前面的下一跳(經過LDP“釋放”消息),標簽與路由的連結不再需要。
當LSR接收不再需要特定標簽連結的通告時,LSR可能解除與連結有關的標簽和解開連結。這種方式是“保守的標簽保持方式”。在FR-LSR接收這樣的通告和解開連結的情況下,應該通告不再需要標簽連結的路由的下一跳。如果LSR不解開連結(在“自由保持方式中”配置的FR-LSP),只要接收的請求與已建立的引起連結的請求有相同的跳數值和相同路由,它可以再用這個連結。
當路由改變時,從前面的路由在路由分叉點重建標簽連結。那個點上LSRs的上游(有一個例外,注意下邊)忘記了改變。在任何時間LSR改變它的特定路由的下一跳,如果新的下一跳是FR-LSR或經過LC-LSR接口可達到的邊緣集的成員,則在與路由LSR有關的LIB中的每個條目應從新的下一跳請求(經LDP)連結。
當FR-LSR從下游鄰居接收標簽連結時,可能已經為這個路徑到上游鄰居提供了相應的標簽連結,由于正使用“獨立控制”或由于來自下游的新連結是路由改變的結果。在此情況下,應該從新的連結中提取的跳數值加1。如果新的跳數值不同于前面傳到上游鄰居的跳數值(包括上游鄰居給定的‘未知’值),FR-LSR必須通告改變的上游鄰居。每個FR-LSR依次增加跳數值和傳遞到上游直到到達入口邊緣LSR。
在任何時間FR-LSR產生到下一跳LSR的標簽連結請求,作為從另一個(上游)LSR接收標簽連結請求的結果和不滿意到下一跳的請求,對于接收的請求FR-LSR應該解開在響應中建立的連結和通告請求器(經過LDP“撤銷”消息)。
當LSR確定丟失它的LDP與另一個LSR會話時,采用下列動作:
*必須丟棄經過這個連接得到的連結信息;
*對于建立的任意標簽連結作為從同級接收的標簽連結請求,LSR可以解開這些連結(和再分配與這些連結有關的標簽)。
6.2 標簽空間的有效應用-合并FR-LSRs
上面的討論假設,在FR-LSR域中,邊緣LSR將為每一個在路由表中有下一跳的前綴請求一個標簽。可以有效地減少邊緣LSR請求需要的標簽數,幾個路由改為一個標簽。在路由和同級傳送用的標簽之間多個對一個映射的使用提供保持標簽數的機理。
注意,在業務需要幀中繼分段情況下,可能限制保持標簽空間(VC合并)。問題是必須按順序發送幀中繼分段,一定不能交叉明顯的幀分段,明顯的分段一定不能交叉存取。如果分段的FR-PSR確保所有分段按順序傳輸,沒有與其他的幀交叉,則能夠實行標簽保持(VC合并)。
當使用標簽保持,FR-LSR接收來自某些FEC上游LSR的連結請求時和它已經有FEC的輸出標簽連結,它不需要發送下游連結請求。它可以分配一個進來的標簽和返回到上游請求器連結的標簽。從請求器接收的包,有頂層標簽,用FEC的現存輸出標簽代替標簽后向前傳送。如果FR-LSR沒有FEC的輸出標簽連結,但有一個顯著的請求,不再發送另一個請求。這意味著在標簽保持情況下,FR-LSR必須響應有新連結的每個上游請求,但它可能需要發送一個下游連結請求。
在保持標簽情況下,如果改變路由表引起FR-LSR選擇FECs新的下一跳,它可能釋放以前下一跳的路由連結。如果新的下一跳已經沒有相應的連結,它必須請求一個連結(注意選擇取決于標簽保持方式)。
如果得到新的連結,包含的跳數值不同于舊的連結,FR-LSR必須處理新的跳數值:如果不同于“未知”值,加1和通報有新數值FEC的標簽連結的上游鄰居。如果新的跳數值超出“最大”值,要保證將要檢測的回路,FEC的標簽值一定是來自所有上游鄰居到前面發送的連結。
6.3 到達幀中繼的特殊LDP消息
在兩個幀中繼“LDP-peer”LSRs之間交換的標簽分配協議消息可以包含幀中繼特殊信息:
幀中繼標簽范圍:
有下列字段:
保留 保留這個字段。在傳送時必須設為0和在接收時忽略。
Len 這個字段規定了DLCI的比特數。支持下列值:
Len DLCI 比特
0 10
2 23
Len 值的1和3保留將來用。
最小DLCI
23比特字段是發起FR-LSR支持的DLCIs的數據塊下限的2進制的值。最小DLCI應該在這個字段的右邊和前面的比特應該置0。
最大DLCI
23比特字段是發起FR-LSR支持的DLCIs的數據塊上限的2進制的值。最大DLCI應該在這個字段的右邊和前面的比特應該置0。
幀中繼合并:
有下列字段:
M(合并) 1比特字段規定FR-LSR的合并能力:
數值 意思
0 不支持合并
1 支持合并
支持VC合并的FR-LSR必須保證來自輸入DLCI的分段的幀,在輸出DLCI上不交叉。
保留 保留這個字段。在發送中設置為0和在接收端忽略。
幀中繼標簽:
有下列字段:
保留 保留這個字段。在發送中設置為0和在接收端忽略。
Len 這個字段規定了DLCI的比特數。支持下列值:
Len DLCI 比特
0 10
2 23
Len值的1和3保留將來用。
DLCI
幀中繼標簽的二進制值。標簽值的有意義的比特數(10或23)編碼進入幀中繼數據鏈路首部的數據鏈路連接標識符(DLCI)字段。
參 考 文 獻
[1] Rosen, E., Callon, R. and A. Vishwanathan, "Multi-Protocol Label Switching Architecture", RFC 3031, January 2001.
[2] Andersson, L., Doolan, P., Feldman, N., Fredette, A. and R. Thomas, "Label Distribution Protocol", RFC 3036, January 2001.
[3] Rosen, E., Rehter, Y., Tappan, D., Farinacci, D., Fedorkow, G., Li, T. and A. Conta, "MPLS Label Stack Encoding", RFC 3032, January 2001.
馬光星,原信息產業部數據通信技術研究所高級工程師,退休后在北京恒光科技發展公司工作。