郭曉丹 李誠(chéng)
(1.四川省成都市成都理工大學(xué)信息工程學(xué)院,四川成都610059;2.四川省成都市邁普通信技術(shù)股份有限公司,四川成都610041)
互聯(lián)網(wǎng)的飛速發(fā)展,帶來(lái)了網(wǎng)絡(luò)的擴(kuò)張,同時(shí)網(wǎng)絡(luò)的普及也給網(wǎng)絡(luò)發(fā)展帶來(lái)了挑戰(zhàn)。高可靠性網(wǎng)絡(luò)成為了諸多網(wǎng)絡(luò)設(shè)備提供商,網(wǎng)絡(luò)方案提供商追求的目標(biāo)。無(wú)中斷轉(zhuǎn)發(fā)就是高可靠性中的重要一項(xiàng),能夠?qū)崿F(xiàn)無(wú)中斷轉(zhuǎn)發(fā),即實(shí)現(xiàn)在設(shè)備重啟過(guò)程中數(shù)據(jù)轉(zhuǎn)發(fā)工作依舊進(jìn)行,對(duì)于一個(gè)無(wú)中斷的設(shè)備平臺(tái)來(lái)說(shuō),轉(zhuǎn)發(fā)平面和控制平面的分離是必須的[1]。
MPLS在虛擬專用網(wǎng)(VPN)和流量工程方面有很強(qiáng)的優(yōu)勢(shì)。它能夠根據(jù)控制信令協(xié)議分發(fā)的標(biāo)簽形成天然的隧道,幫助虛擬專用網(wǎng)的建立,同時(shí)數(shù)據(jù)包可以在天然隧道上快速轉(zhuǎn)發(fā),這些轉(zhuǎn)發(fā)路徑可以方便地進(jìn)行各種策略控制來(lái)實(shí)施流量工程。為了維護(hù)當(dāng)前MPLS網(wǎng)絡(luò)的穩(wěn)定,和路由協(xié)議一樣,作為MPLS信令協(xié)議之一的LDP支持優(yōu)雅重啟,將使MPLS轉(zhuǎn)發(fā)部件在LDP重啟過(guò)程中仍然可以使用LDP在重啟之前所建立的MPLS LSP(MPLS標(biāo)簽交換路徑)進(jìn)行標(biāo)簽交換而不會(huì)受到影響。
在路由器體系結(jié)構(gòu)中出現(xiàn)來(lái)控制與轉(zhuǎn)發(fā)分離后,進(jìn)一步的改進(jìn)機(jī)制又有了新的發(fā)展,那就是分布式路由器。不僅控制與轉(zhuǎn)發(fā)分離,分別置于不同的卡上,而且將轉(zhuǎn)發(fā)分布在幾張線卡上。這樣子不僅提高了轉(zhuǎn)發(fā)速度,而且提高了轉(zhuǎn)發(fā)的可靠性。
在分布式路由器上,有雙主控,多線卡的硬件平臺(tái),為不間斷轉(zhuǎn)發(fā)提供了硬件基礎(chǔ)條件。
對(duì)于網(wǎng)絡(luò)設(shè)備高可靠性的提高,當(dāng)然要從軟件與硬件兩個(gè)方面著手考慮。當(dāng)前網(wǎng)絡(luò)設(shè)備的硬件部件冗余,軟件可恢復(fù)性及故障切換機(jī)制,網(wǎng)絡(luò)服務(wù)級(jí)別,系統(tǒng)的復(fù)雜性等等都是考慮范圍之內(nèi)的。
提高網(wǎng)絡(luò)硬件的高可靠性,應(yīng)該在硬件上做出相應(yīng)的改進(jìn),冗余機(jī)制自然是首選。因?yàn)橛布谑褂眠^(guò)程中難免出現(xiàn)磨損和故障,需要有備份的硬件來(lái)完成相應(yīng)的工作接替。當(dāng)前的冗余機(jī)制包括了路由處理器、背板、電源、線卡和風(fēng)扇等的冗余。當(dāng)然,提高硬件可靠性還需要在硬件的體系結(jié)構(gòu)上進(jìn)行改進(jìn),分布式路由器的提出就是硬件改進(jìn)的典型案例。分布式路由器上一般都包含雙主控,也就是一個(gè)主控卡做主卡,一個(gè)主控卡做從卡,主卡與從卡的配置需要同步保存,同時(shí)從卡應(yīng)該實(shí)時(shí)監(jiān)控主卡的工作狀態(tài),在此條件下,從卡做好隨時(shí)接替主卡工作的準(zhǔn)備,從而為優(yōu)雅重啟創(chuàng)造了條件。
在分布式路由器上,路由控制與轉(zhuǎn)發(fā)功能是分布在不同的控制卡上運(yùn)作的。路由控制層主要功能是完成路由計(jì)算,并且將計(jì)算結(jié)果發(fā)送給轉(zhuǎn)發(fā)層,轉(zhuǎn)發(fā)層則將相應(yīng)數(shù)據(jù)流根據(jù)控制層的信息進(jìn)行處理。轉(zhuǎn)發(fā)功能可以集中在一個(gè)控制板上完成,也可以分布在多張線卡上完成。由于網(wǎng)絡(luò)中的不穩(wěn)定性往往導(dǎo)致產(chǎn)生大量的過(guò)載的路由控制信息。而這種功能模塊上的劃分使得轉(zhuǎn)發(fā)平面與網(wǎng)絡(luò)中潛在的不穩(wěn)定性隔絕開(kāi)來(lái),同時(shí)也避免了因?yàn)槁酚蓞f(xié)議崩潰可能帶來(lái)的影響,使無(wú)中斷轉(zhuǎn)發(fā)成為了可能[2]。
在硬件提供改進(jìn)條件的情況下,運(yùn)行于網(wǎng)絡(luò)設(shè)備的軟件應(yīng)該能夠相應(yīng)的實(shí)施故障檢測(cè)及故障友好處理的方式。為了避免因?yàn)橛布收隙鸬木W(wǎng)絡(luò)動(dòng)蕩及網(wǎng)絡(luò)數(shù)據(jù)的丟失,快速檢測(cè)技術(shù)和快速重啟技術(shù)得到了廣泛研究與探討。路由協(xié)議的改進(jìn)與擴(kuò)展,如路由協(xié)議的定時(shí)器設(shè)置、快速重啟等等都是在這些情況下提出來(lái)的。
在MPLS技術(shù)得到廣泛應(yīng)用,尤其是在核心網(wǎng)絡(luò)中的地位得到提高的前提下,MPLS網(wǎng)絡(luò)高可靠性得到極大關(guān)注。在通常的MPLS網(wǎng)絡(luò)環(huán)境里,當(dāng)標(biāo)簽交換路由器(LSR)或者LDP協(xié)議重啟時(shí),LDP將失去與鄰居的鄰接關(guān)系。鄰居LSR檢測(cè)到鄰接關(guān)系失效后會(huì)重新分發(fā)標(biāo)簽,向其它鄰居發(fā)送標(biāo)簽撤銷消息或者新的標(biāo)簽映射消息。這種標(biāo)簽更新行為將在整個(gè)MPLS網(wǎng)絡(luò)中進(jìn)行傳播。而且在新的標(biāo)簽交換路徑(LSP)形成之前,重啟路由器是不會(huì)收到其它路由器發(fā)送的數(shù)據(jù)的。
而重啟啟動(dòng)時(shí),又會(huì)重新與鄰居建立鄰接關(guān)系,鄰居路由器又要重新更新標(biāo)簽交換路徑,并發(fā)送相應(yīng)的消息[3]。由此導(dǎo)致的標(biāo)簽信息表頻繁的刪除添加操作,生成大量標(biāo)簽更新處理的報(bào)文,整個(gè)網(wǎng)絡(luò)的控制平面都受到一定的壓力。如果網(wǎng)絡(luò)規(guī)模很大,那么整個(gè)網(wǎng)絡(luò)受到的影響更為嚴(yán)重。LSP的不穩(wěn)定帶來(lái)整個(gè)網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)的中斷是不可避免的。如果多個(gè)路由器或多個(gè)路由器上的LDP重啟,那么影響會(huì)更加厲害。在MPLS網(wǎng)絡(luò)中引入LDP優(yōu)雅重啟技術(shù)可以將上述缺陷造成的負(fù)面影響最小化。
下面介紹LDP優(yōu)雅重啟的基本工作原理。在優(yōu)雅重啟過(guò)程中,路由器分為三類:
(1)重啟路由器(RR)——要進(jìn)行重啟的路由器。
(2)協(xié)助路由器(HR)——進(jìn)行重啟的路由器的鄰居。(3)其它路由器(OR)——網(wǎng)絡(luò)中除了(1)(2)兩類的其它路由器。
優(yōu)雅重啟就是在重啟路由器在重啟過(guò)程中,重啟路由器與協(xié)助路由器之間通過(guò)一系列的互操作完成重啟路由器恢復(fù)重啟前的轉(zhuǎn)發(fā)狀態(tài)。
如果某臺(tái)路由器能夠在重啟中保留MPLS轉(zhuǎn)發(fā)表直到重啟完成,則它具有優(yōu)雅重啟功能,這時(shí),它會(huì)通過(guò)初始化消息向鄰居通告其具有LDP優(yōu)雅重啟能力,同時(shí)通告它能夠保留MPLS轉(zhuǎn)發(fā)表的最長(zhǎng)時(shí)間(MPLS forwarding state holding time)。一個(gè)LSR自身具有LDP優(yōu)雅重啟功能并不一定能夠在自己主控卡重啟時(shí)減少M(fèi)PLS轉(zhuǎn)發(fā)受到的負(fù)面影響,但是如果它的鄰居能夠支持,那么就能夠最小化它在重啟過(guò)程中的負(fù)面影響[4]。
如果重啟LSR的鄰居都支持LDP優(yōu)雅重啟,當(dāng)檢測(cè)到此LSR重啟時(shí),其鄰居LSR都會(huì)保存此重啟LSR的相關(guān)轉(zhuǎn)發(fā)信息,并且在對(duì)相應(yīng)信息打上stale標(biāo)識(shí),直到在MPLS forwarding state holding time時(shí)間內(nèi)重新收到相同信息時(shí)去掉此stale標(biāo)識(shí)。同時(shí)在此LSR重啟過(guò)程中,鄰居LSR都會(huì)協(xié)助它完成轉(zhuǎn)發(fā)狀態(tài)的恢復(fù)。如果超時(shí),那么所有LSR(包括鄰居LSR和重啟LSR)都會(huì)認(rèn)為重啟完成,將此時(shí)有stale標(biāo)識(shí)的表項(xiàng)都會(huì)刪除掉[4]。
重啟完成后,重啟LSR就會(huì)恢復(fù)重啟前的MPLS狀態(tài),同時(shí)更新為網(wǎng)絡(luò)中更新的狀態(tài)。
LDP需要拓展才能夠?qū)崿F(xiàn)優(yōu)雅重啟,此拓展就是LDP協(xié)議需要在初始化消息中增加對(duì)FT(Fault Tolerant)Session TLV作為可選參數(shù)的支持。LSR通過(guò)向?qū)Φ润w發(fā)送攜帶FT Session TLV參數(shù)的初始化消息來(lái)表明自己支持LDP優(yōu)雅重啟[4]。
FT Session TLV的編碼格式如下:
如果LSR(標(biāo)簽交換路由器)啟用了LDP優(yōu)雅重啟功能后,則將Learn From Network(L)標(biāo)識(shí)位置為1,而其余標(biāo)識(shí)位都置0。如果收到L標(biāo)志位為1的FT Session TLV參數(shù),其余置1的標(biāo)志位將被忽略。
該模塊在路由器與鄰居路由器建立LDP會(huì)話關(guān)系時(shí),通過(guò)發(fā)送初始化消息通告其自身具有支持優(yōu)雅重啟的能力,并正確反映路由器的當(dāng)前狀態(tài)(兩個(gè)定時(shí)器的時(shí)間值反映是否處于重啟狀態(tài))。在LDP原有能力的基礎(chǔ)上,定義新的能力(Graceful Restart),能力值有“重啟動(dòng)標(biāo)志”域、“重啟動(dòng)時(shí)間”域。
LSR使用FT Session TLV參數(shù)向?qū)Φ润w通告兩個(gè)時(shí)間:FT Reconnect Timeout和Recovery Time。分別對(duì)應(yīng)兩個(gè)定時(shí)器MPLS forwarding state holding timer和recovery timer。
在LDP重啟時(shí)啟動(dòng)MPLS forwarding state holding timer。FT Reconnect Timeout是發(fā)送方希望接收方在檢測(cè)到和發(fā)送方之間的LDP通信發(fā)生故障后等待LDP會(huì)話重新建立的時(shí)間,在這段等待時(shí)間內(nèi),接收方將保留通過(guò)發(fā)送方和接收方之間鏈路已經(jīng)建立起來(lái)的LSPs的MPLS轉(zhuǎn)發(fā)狀態(tài)。將FTReconnect Timeout的值置為0表明發(fā)送方在LDP重啟過(guò)程中將不會(huì)保存轉(zhuǎn)發(fā)狀態(tài),但它支持優(yōu)雅重啟。
Recovery Time是LSR將保留它在LDP重啟前保存的MPLS轉(zhuǎn)發(fā)狀態(tài)的時(shí)間。這個(gè)時(shí)間從LDP重啟后發(fā)送攜帶FT Session TLV參數(shù)的初始化消息時(shí)啟動(dòng)recovery timer。發(fā)送方和接收方之間可以在這段時(shí)間內(nèi)重新同步所有的LSPs的MPLS轉(zhuǎn)發(fā)狀態(tài)。Recovery Time的值被置為0表明發(fā)送方在LDP重啟前沒(méi)有保存MPLS轉(zhuǎn)發(fā)狀態(tài)(或者雖然保存了但不可用)。
該模塊在路由器正常工作和重啟動(dòng)期間負(fù)責(zé)維護(hù)LDP標(biāo)簽信息,MPLS轉(zhuǎn)發(fā)表,包括FTN和ILM。此模塊包括更新LDP標(biāo)簽信息、MPLS轉(zhuǎn)發(fā)表。原有系統(tǒng)對(duì)LDP標(biāo)簽信息的管理和維護(hù)是在進(jìn)程內(nèi)部實(shí)現(xiàn),當(dāng)LDP進(jìn)程重啟動(dòng)后,原有的標(biāo)簽信息都將遺失。為了維護(hù)LSR的標(biāo)簽信息,就必須根據(jù)標(biāo)簽轉(zhuǎn)發(fā)表,還有鄰居通過(guò)新建立的LDP會(huì)話,發(fā)送重啟前分發(fā)的標(biāo)簽信息,由此來(lái)維護(hù)重啟過(guò)程中的標(biāo)簽轉(zhuǎn)發(fā)信息。
該模塊是實(shí)現(xiàn)LDP優(yōu)雅重啟的核心模塊。根據(jù)LDP優(yōu)雅重啟的工作原理來(lái)組織和協(xié)調(diào)其它模塊的相關(guān)工作,使得LDP能夠完成基本功能和LDP優(yōu)雅重啟功能。其中LDP優(yōu)雅重啟過(guò)程可以從下圖中看到[4]。
圖1 LDP優(yōu)雅重啟過(guò)程
本文詳細(xì)介紹了LDP優(yōu)雅重啟實(shí)現(xiàn)的原理及細(xì)節(jié),同時(shí)在分布式路由器上的實(shí)現(xiàn)。實(shí)現(xiàn)了LDP優(yōu)雅重啟的基本功能,但是也有一些地方需要進(jìn)一步改進(jìn)。如果上下游會(huì)話斷開(kāi)的時(shí)候,有優(yōu)雅重啟能力的LSR會(huì)保存先前的標(biāo)簽,但是下游可能在會(huì)話斷開(kāi)后,釋放了某個(gè)轉(zhuǎn)發(fā)等到價(jià)類(FEC)的標(biāo)簽,而重新把這個(gè)標(biāo)簽分發(fā)給了另外一個(gè)FEC,而上游還不知道這個(gè)對(duì)應(yīng)關(guān)系,依舊會(huì)用原來(lái)的標(biāo)簽對(duì)應(yīng)原來(lái)的FEC[4],這樣子,在轉(zhuǎn)發(fā)過(guò)程中就會(huì)導(dǎo)致m is-route情況發(fā)生。這也是后面工作中需要努力改進(jìn)的方向之一。
[1] 馬海龍,陳樂(lè)然,郭云飛.面向IPv4/v6的BGP平滑重啟的設(shè)計(jì)與實(shí)現(xiàn)[J].微機(jī)發(fā)展.2005,15(9):136-138.
[2] 伏金平,王寶生,陳曉梅,蘇金樹(shù).面向ForCES路由器結(jié)構(gòu)的BGP Graceful Restart技術(shù)研究[J].計(jì)算機(jī)工程與科學(xué).2006,28(7):34-38.
[3] Y.Rekhter Category,Juniper Networks,R.Aggarwal,Redback Networks.Graceful Restart Mechanism for Label Distribution Protocol.RFC3478.2003
[4] M.Leelanivas,Y.Rekhter,Juniper Networks,R.Aggarwal,Redback Networks.Graceful Restart Mechanism for Label Distribution Protocol.RFC3479.2003