摘 要: 基于IPv6下最新標(biāo)準(zhǔn)RFC2740,指出了多種鏈路" title="鏈路">鏈路上OSPFv3的差異:不同的數(shù)據(jù)包發(fā)送方式、鄰居建立和維持機(jī)制、泛洪機(jī)制、鄰居狀態(tài)機(jī)和接口狀態(tài)機(jī),提出了OSPFv3在NBMA鏈路上的解決方案,并在現(xiàn)有OSPFv2源代碼基礎(chǔ)上,成功地在NBMA鏈路上實(shí)現(xiàn)了OSPFv3。
關(guān)鍵詞: OSPFv3 NBMA 路由 IPv6
開(kāi)放式最短路徑優(yōu)先協(xié)議OSPF是目前應(yīng)用于大型網(wǎng)絡(luò)的主要內(nèi)部網(wǎng)關(guān)路由協(xié)議" title="路由協(xié)議">路由協(xié)議之一,目前版本是IPv4下的OSPFv2。而適用于IPv6下一代互聯(lián)網(wǎng)的OSPFv3目前尚不成熟,并且基本上都只支持廣播鏈路。然而當(dāng)前實(shí)際應(yīng)用網(wǎng)絡(luò)中存在大量的非廣播鏈路,因此多種鏈路上的OSPFv3的研究和實(shí)現(xiàn)具有重要意義。本文針對(duì)此目標(biāo)進(jìn)行了深入分析和研究。為了使程序?qū)崿F(xiàn)設(shè)計(jì)目標(biāo)并兼容現(xiàn)有的OSPFv3,筆者進(jìn)行了穩(wěn)定性、可維護(hù)性等性能的分析和研究,成功地在Linux平臺(tái)的路由器上實(shí)現(xiàn)了支持NBMA鏈路的OSPFv3,并通過(guò)了美國(guó)Spirent公司的AX4000的一致性測(cè)試" title="一致性測(cè)試">一致性測(cè)試。
1 多種鏈路簡(jiǎn)介
OSPF路由協(xié)議支持的鏈路類型有:點(diǎn)到點(diǎn)" title="點(diǎn)到點(diǎn)">點(diǎn)到點(diǎn)、廣播、NBMA(Non-Broadcast Multi-Access)和點(diǎn)到多點(diǎn)" title="多點(diǎn)">多點(diǎn)等。在OSPFv3中一些方案已經(jīng)實(shí)現(xiàn)了對(duì)廣播鏈路的支持,但對(duì)點(diǎn)到點(diǎn)、NBMA和點(diǎn)到多點(diǎn)的支持幾乎沒(méi)有。本文以NBMA鏈路為重點(diǎn),深入分析、設(shè)計(jì)并實(shí)現(xiàn)了對(duì)OSPFv3的多鏈路支持。
首先簡(jiǎn)要介紹各種鏈路:
點(diǎn)到點(diǎn)鏈路(PPP):連接一對(duì)路由器的鏈路,例如56kbps串行線路。
廣播鏈路(Broadcast): 它支持多個(gè)路由器,具備廣播能力。廣播鏈路上的每對(duì)路由器假定可以相互直接通信,例如以太網(wǎng)。
非廣播鏈路(Non-Broadcast):它也支持多個(gè)路由器,但不具備廣播能力,例如X.25公眾數(shù)據(jù)網(wǎng)(PDN)。在非廣播鏈路上OSPF有兩種運(yùn)轉(zhuǎn)模式:(1)Non-Broadcast Multi-Access(NBMA),非廣播多址接入,要求鏈路上兩兩路由器可以相互直接通信,模擬在廣播鏈路上的操作,如ATM網(wǎng);(2)Point-to-MultiPoint,點(diǎn)到多點(diǎn),把非廣播鏈路視為多個(gè)點(diǎn)到點(diǎn)鏈路的集合,如幀中繼網(wǎng)。
2 OSPFv3在各種鏈路上的差異
通過(guò)分析RFC2328和RFC2740,可以歸納總結(jié)出各種鏈路類型上的OSPFv3主要在如下幾方面有所不同:數(shù)據(jù)包的發(fā)送方式、鄰居建立和維持機(jī)制、泛洪機(jī)制、鄰居狀態(tài)機(jī)和接口狀態(tài)機(jī)。
2.1數(shù)據(jù)包的發(fā)送方式
OSPFv3各種鏈路類型按照是否支持多播可以分為兩組:(1)支持多播,包括廣播鏈路和點(diǎn)到點(diǎn)鏈路;(2)不支持多播,包括NBMA鏈路和點(diǎn)到多點(diǎn)鏈路。在OSPFv3路由協(xié)議中,涉及多播的數(shù)據(jù)包有Hello包、LSU包(Link State Update,鏈路狀態(tài)更新包)和LSAck包(Link State Acknowledgment,鏈路狀態(tài)確認(rèn)包)。由于NBMA、點(diǎn)到多點(diǎn)鏈路沒(méi)有多播能力,所以在廣播鏈路和點(diǎn)到點(diǎn)鏈路上以多播發(fā)送的數(shù)據(jù)包將以單播方式發(fā)送,即這些包的發(fā)送地址將根據(jù)鏈路類型而定。
2.2 鄰居建立和維持機(jī)制
OSPFv3建立鄰居關(guān)系機(jī)制可以分成兩種:(1)鄰居自動(dòng)發(fā)現(xiàn)。節(jié)點(diǎn)主動(dòng)向鄰居發(fā)送Hello包,當(dāng)鄰居在RouterDeadInterval內(nèi)給予正確回應(yīng),即認(rèn)為雙方建立了鄰居關(guān)系。(2)手工配置鄰居。首先手工配置接口的鄰居(包括Router-ID和IPv6 link-local address),該接口啟動(dòng)后會(huì)間隔HelloInterval發(fā)送Hello包給手工配置的合格鄰居(路由器優(yōu)先級(jí)不為0),在RouterDeadInterval內(nèi)如果收到該鄰居的正確回應(yīng),則建立了鄰居關(guān)系。否則觸發(fā)事件Inactivity_timer,把鄰居轉(zhuǎn)為Down狀態(tài),同時(shí)開(kāi)啟查詢鄰居定時(shí)器(發(fā)Hello包),定時(shí)器間隔是PollInterval,如果收到了鄰居的回應(yīng)(如果鄰居激活,會(huì)開(kāi)啟reply_timer定時(shí)器,發(fā)送reply),則說(shuō)明該手工配置的鄰居真實(shí)存在,同時(shí)關(guān)閉poll_timer查詢鄰居定時(shí)器。在廣播鏈路和點(diǎn)到點(diǎn)鏈路,采用自動(dòng)發(fā)現(xiàn):周期性地發(fā)送Hello包到多播地址ALLSPFRouters,主動(dòng)建立和維持鄰居關(guān)系;在NBMA鏈路和點(diǎn)到多點(diǎn)鏈路上,采用手工配置。
2.3 泛洪機(jī)制
在廣播和NBMA鏈路上有DR(指定路由器)和BDR(備份指定路由器)選舉,而點(diǎn)到點(diǎn)鏈路和點(diǎn)到多點(diǎn)鏈路沒(méi)有DR和BDR選舉。
2.4 鄰居狀態(tài)機(jī)和接口狀態(tài)機(jī)
對(duì)NBMA網(wǎng)絡(luò)有專門(mén)的狀態(tài)Attempt:當(dāng)鄰居處于Down,收到InterfaceUp事件后,路由器將為鄰居列表中的(合格候選DR)每個(gè)鄰居產(chǎn)生Start事件,轉(zhuǎn)為Attempt狀態(tài)。對(duì)點(diǎn)到點(diǎn)、點(diǎn)到多點(diǎn)有接口狀態(tài)point-to-point。只有廣播類型的接口加入到多播組AllSPFRouters和AllDRouters,支持多播的點(diǎn)到點(diǎn)鏈路的接口加入到多播組AllSPFRouters。
3 NBMA鏈路上OSPFv3的設(shè)計(jì)與實(shí)現(xiàn)
3.1 單播、多播方式選擇
當(dāng)一個(gè)接口啟動(dòng)后,將根據(jù)鏈路類型選擇是否加入多播組。對(duì)于廣播鏈路和點(diǎn)到點(diǎn)鏈路的網(wǎng)絡(luò)接口必須加入多播組以支持多播。在運(yùn)行了OSPFv3協(xié)議后,接口就會(huì)周期性地向鏈路發(fā)送Hello報(bào)文,以便與同一鏈路上的其他路由器建立和維持鄰居關(guān)系。根據(jù)鏈路類型的不同,Hello包的發(fā)送地址如圖1所示。

LSU包和LSAck包發(fā)送方式按照鏈路類型的不同發(fā)送的目的地址有所不同,如圖2所示。
3.2 NBMA鏈路上的鄰居建立和維持
由于NBMA網(wǎng)絡(luò)類型不能自動(dòng)建立鄰居關(guān)系,需要手工為其配置鄰居,包括鄰居的IPv6鏈路本地地址以及鄰居的Router-ID。首先把路由器的接口設(shè)置為NBMA鏈路類型,并在此接口上配置鄰居。在OSPFv2中,鄰居配置在全局模式下進(jìn)行,通過(guò)識(shí)別鄰居的IPv4地址和路由器接口的IPv4地址是否有相同的子網(wǎng)掩碼確定配置哪個(gè)接口的鄰居;在OSPFv3中,配置的是鏈路本地地址,上述策略失效,選擇在接口模式下配置鄰居。在NBMA鏈路上建立OSPFv3鄰居關(guān)系如圖3所示,過(guò)程如下:
(1)如果路由器是合格的候選DR(Router Priority不是0),則向所有的合格候選DR的鄰居周期性發(fā)送Hello包。如果本身是DR或者BDR,則向所有的鄰居周期發(fā)送Hello包。為了減少 Hello包的發(fā)送數(shù)量,合格候選DR路由器的數(shù)目應(yīng)該較少。
(2)如果路由器不是合格的候選DR,而且存在DR和BDR,則周期性地向DR和BDR發(fā)送Hello包。此外,如果它收到合格的候選DR(除了當(dāng)前DR和BDR)發(fā)出的Hello包,將發(fā)送回應(yīng)Hello包。
(3)周期性發(fā)送Hello包,Hello包間隔由鄰居狀態(tài)決定。如果鄰居在狀態(tài)Down,間隔為PollInterval秒,否則間隔為HelloInterval。
用戶配置的NBMA鄰居需要有一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ),為此要設(shè)計(jì)一個(gè)ospf6_nbr_nbma數(shù)據(jù)結(jié)構(gòu)反映用戶的配置。
struct ospf6_nbr_nbma
{
/* 存放鄰居的IPv6鏈路本地地址 */
struct in6_addr addr;
/* 存放鄰居的ID */
u_int32_t router_id;
/* 對(duì)應(yīng)的接口 */
struct ospf6_interface *o6i;
/* 對(duì)應(yīng)的鄰居 */
struct ospf6_neighbor *nbr;
/* 存放鄰居的優(yōu)先級(jí) */
u_char priority;
/* 存放配置的查詢時(shí)間 */
u_int32_t v_poll;
/* 查詢線程 */
struct thread *t_poll;
};
4 測(cè)試與結(jié)果
基于上述實(shí)現(xiàn),在美國(guó)Spirent公司的AX/4000網(wǎng)絡(luò)測(cè)試儀上進(jìn)行了一致性測(cè)試。下面以其中一個(gè)測(cè)試為例介紹其配置、目的、測(cè)試步驟和預(yù)期結(jié)果。
測(cè)試目的:驗(yàn)證在廣播網(wǎng)和NBMA網(wǎng)上,如果有多個(gè)路由器宣稱自己是DR并且都具有相同的路由器優(yōu)先級(jí),則具有較大路由器ID的被選為DR(此時(shí)IUT是DR)。
AX/4000配置:
OSPF Node Setup中節(jié)點(diǎn)的接口模式選為 NBMA,NBMA poll multiplier設(shè)置為12,即設(shè)置PollInterval為120s,Router-ID為0.0.0.3,優(yōu)先級(jí)為1,area-id為0。
路由器A的配置:配置鏈路類型為NBMA,并在接口上配置鄰居。
?。糲onfig-if>ipv6 ospf6 link non-broadcast
?。糲onfig-if>neighbor fe80::20c:76ff:fe8a:9397 router-id 0.0.0.2
測(cè)試步驟:
1. 配置RouterA的Router-ID為0.0.0.2:
?。糲onfig-ospf6># router-id 0.0.0.2
2. 配置RouterA的優(yōu)先級(jí)為1:
?。糲onfig-if>#ipv6 ospf6 priority 1
3. 配置RouterA的area-id為0:
?。糲onfig-ospf6>#interface eth0 area 0
4.RouterA向IUT發(fā)送Hello包
預(yù)期結(jié)果:IUT應(yīng)當(dāng)給tester-A發(fā)送一個(gè)帶有IUT是DR信息的Hello包。
此測(cè)試?yán)樌ㄟ^(guò),結(jié)果如圖4所示。

利用AX/4000,進(jìn)行了總共266個(gè)測(cè)試,通過(guò)率超過(guò)93%。目前支持多種鏈路的OSPFv3已經(jīng)順利通過(guò)國(guó)家863專家組鑒定。
參考文獻(xiàn)
1 RFC2328, J. Moy. OSPF Version 2[S]. April 1998
2 RFC2740, R. Coltun.OSPF for IPv6[S].December 1999
3 張宏科,張思東,劉文紅.路由器原理與技術(shù)[M]. 北京:國(guó)防工業(yè)出版社,2003
4 [美]John T.Moy著, 胡光明譯. OSPF協(xié)議剖析[M]. 北京: 中國(guó)電力出版社, 2002
5 [美]John T.Moy著, 閔春平譯.OSPF協(xié)議完全實(shí)現(xiàn) [M].北京:中國(guó)電力出版社, 2002
6 S.Fujiwara. Test Selection based on Finite State Models.IEEE Trans on Software Engineering,1991;17(6):591~603
7 楊 晶,趙保華,屈玉貴.基于層次結(jié)構(gòu)的OSPF一致性測(cè)試.通信學(xué)報(bào),2002;23(8):89


