專利名稱:路由下發(fā)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),特別涉及路由下發(fā)方法和裝置。
背景技術(shù):
在網(wǎng)絡(luò)通信技術(shù)中,為了滿足業(yè)務(wù)轉(zhuǎn)發(fā)過(guò)程中靈活性、以及高帶寬的需求,提出了 如圖1所示的雙轉(zhuǎn)發(fā)引擎系統(tǒng)。在圖1中,雙轉(zhuǎn)發(fā)引擎系統(tǒng)包含以下三部分路由引擎、業(yè) 務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎,其中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎協(xié)同進(jìn)行轉(zhuǎn)發(fā)服務(wù)和業(yè) 務(wù)處理。下面分別對(duì)這三部分進(jìn)行描述路由引擎,其主要是利用路由協(xié)議比如RIP、OSPF或者其他方式等學(xué)習(xí)路由,并將 該學(xué)習(xí)的路由下發(fā)到業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎。其中,該路由具體包括目的地址/掩 碼、出接口、下一跳等;至于路由引擎如何下發(fā)路由在下文中進(jìn)行描述。業(yè)務(wù)轉(zhuǎn)發(fā)引擎,可由具有單核或者多核的網(wǎng)絡(luò)處理器(NP)或者通用處理器等實(shí) 現(xiàn),其包含業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng),用于容納路由引擎下發(fā)的所有路由。另外,該業(yè)務(wù)轉(zhuǎn)發(fā)引擎 還能夠處理比較復(fù)雜的業(yè)務(wù)比如加密等,而且能夠支持豐富的接口類型,比如以太網(wǎng)接口、 CPOS接口、POS接口和ATM接口等。但業(yè)務(wù)轉(zhuǎn)發(fā)弓I擎的轉(zhuǎn)發(fā)性能比較低。高速轉(zhuǎn)發(fā)引擎,可由FPGA、NP或者專用交換芯片實(shí)現(xiàn),相對(duì)于業(yè)務(wù)轉(zhuǎn)發(fā)引擎,具有 比較高的轉(zhuǎn)發(fā)性能,其包含高速轉(zhuǎn)發(fā)引擎表項(xiàng),用于容納路由引擎下發(fā)的路由。另外,高速 轉(zhuǎn)發(fā)引擎僅能處理一種接口類型,比如,若該高速轉(zhuǎn)發(fā)引擎由專用交換芯片實(shí)現(xiàn),則該高速 轉(zhuǎn)發(fā)引擎只能處理以太網(wǎng)接口。由于業(yè)務(wù)轉(zhuǎn)發(fā)引擎支持豐富的接口類型,而高速轉(zhuǎn)發(fā)引擎支持單一的接口類型, 基于此,可將雙轉(zhuǎn)發(fā)引擎系統(tǒng)中存在的接口歸為以下兩類不同接口類型第一類型接口和 第二類型接口 ;其中,第一類型接口為業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎都支持的接口類型,路由下一跳為 第一類型接口的路由簡(jiǎn)稱為類型1路由;第二類型接口僅為業(yè)務(wù)轉(zhuǎn)發(fā)引擎支持的接口類型,但高速轉(zhuǎn)發(fā)引擎不支持的接口 類型,路由下一跳為第二類型接口的路由簡(jiǎn)稱為類型2路由。由于高速轉(zhuǎn)發(fā)引擎僅支持第一類型接口,因此,路由引擎在下發(fā)路由至高速轉(zhuǎn)發(fā) 引擎之前,需要執(zhí)行以下判斷操作判斷該路由的下一跳是否為第一類型接口,如果是,則 將該路由下發(fā)至高速轉(zhuǎn)發(fā)引擎,否則,不下發(fā)該路由。而由于業(yè)務(wù)轉(zhuǎn)發(fā)引擎支持雙轉(zhuǎn)發(fā)引擎 系統(tǒng)中存在的所有接口類型即第一類型接口和第二類型接口,因此,路由引擎在下發(fā)路由 至業(yè)務(wù)轉(zhuǎn)發(fā)引擎時(shí),可省略上述判斷操作,直接下發(fā)路由至業(yè)務(wù)轉(zhuǎn)發(fā)引擎即可。以上對(duì)雙轉(zhuǎn)發(fā)引擎系統(tǒng)的結(jié)構(gòu)進(jìn)行了描述。之后,如圖1所示,當(dāng)雙轉(zhuǎn)發(fā)引擎系統(tǒng)通過(guò)第一類型接口接收到報(bào)文時(shí),先由高速 轉(zhuǎn)發(fā)引擎在高速轉(zhuǎn)發(fā)引擎表項(xiàng)中查找用于轉(zhuǎn)發(fā)該報(bào)文的路由,如果查找到,則通過(guò)該查找 到的路由的下一跳轉(zhuǎn)發(fā)報(bào)文,否則,由高速轉(zhuǎn)發(fā)引擎上送該報(bào)文至業(yè)務(wù)轉(zhuǎn)發(fā)引擎,由業(yè)務(wù)轉(zhuǎn) 發(fā)引擎在業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中查找用于轉(zhuǎn)發(fā)該報(bào)文的路由,之后,由業(yè)務(wù)轉(zhuǎn)發(fā)引擎通過(guò)查找到的路由的下一跳轉(zhuǎn)發(fā)報(bào)文。在應(yīng)用中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)的容量空間比較大,能夠容納路由引擎下發(fā)的所有 路由,而高速轉(zhuǎn)發(fā)引擎表項(xiàng)的容量空間相對(duì)來(lái)說(shuō)比較小,很容易達(dá)到空間滿的情況,進(jìn)而導(dǎo) 致無(wú)法繼續(xù)容納路由引擎后續(xù)下發(fā)的路由,如此,就可能存在以下問(wèn)題當(dāng)雙轉(zhuǎn)發(fā)引擎系統(tǒng) 通過(guò)第一類型接口接收到報(bào)文時(shí),如果用于轉(zhuǎn)發(fā)該報(bào)文的最優(yōu)路由由于高速轉(zhuǎn)發(fā)引擎表項(xiàng) 容量空間滿而未下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),而用于轉(zhuǎn)發(fā)該報(bào)文的次優(yōu)路由在高速轉(zhuǎn)發(fā)引擎 表項(xiàng)容量空間滿之前被學(xué)習(xí)到、并被成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如此,當(dāng)高速轉(zhuǎn)發(fā)引擎 在高速轉(zhuǎn)發(fā)引擎表項(xiàng)中查找用于轉(zhuǎn)發(fā)該報(bào)文的路由時(shí)只能查找到用于轉(zhuǎn)發(fā)該報(bào)文的次優(yōu) 路由,進(jìn)而通過(guò)該查找到的次優(yōu)路由轉(zhuǎn)發(fā)報(bào)文,這違反了報(bào)文轉(zhuǎn)發(fā)過(guò)程中依照最優(yōu)路由轉(zhuǎn) 發(fā)的原則,可能會(huì)導(dǎo)致報(bào)文被錯(cuò)誤路由轉(zhuǎn)發(fā)。比如,雙轉(zhuǎn)發(fā)引擎系統(tǒng)通過(guò)第一類型接口接收 到目的地址為1. 1. 1. 3的報(bào)文,如果用于轉(zhuǎn)發(fā)該報(bào)文的最優(yōu)路由1. 1. 1. 0/24由于高速轉(zhuǎn)發(fā) 引擎表項(xiàng)已滿無(wú)法下發(fā),而高速轉(zhuǎn)發(fā)引擎表項(xiàng)當(dāng)前僅存在一條用于轉(zhuǎn)發(fā)該報(bào)文的次優(yōu)路由 1. 1.0. 0/16,如此,高速轉(zhuǎn)發(fā)引擎就只能通過(guò)路由1. 1.0. 0/16的下一跳轉(zhuǎn)發(fā)該報(bào)文,這違 反了報(bào)文轉(zhuǎn)發(fā)過(guò)程中依照最優(yōu)路由轉(zhuǎn)發(fā)的原則,可能會(huì)導(dǎo)致報(bào)文被錯(cuò)誤路由轉(zhuǎn)發(fā)。
發(fā)明內(nèi)容
本發(fā)明提供了路由下發(fā)方法和裝置,以實(shí)現(xiàn)將最優(yōu)路由下發(fā)至高速轉(zhuǎn)發(fā)引擎表 項(xiàng),實(shí)現(xiàn)利用最優(yōu)路由轉(zhuǎn)發(fā)報(bào)文。本發(fā)明提供的技術(shù)方案包括一種路由下發(fā)方法,該方法應(yīng)用于包含路由引擎、業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎 的雙轉(zhuǎn)發(fā)引擎系統(tǒng)中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型 1路由和類型2路由,高速轉(zhuǎn)發(fā)引擎中的高速轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由,其關(guān)鍵在于,所述雙轉(zhuǎn)發(fā)引擎系統(tǒng)還包括第二表項(xiàng),所述第二表項(xiàng)用于記錄路由引擎 向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由;該方法包括A,向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突的類型1 路由R1,如果下發(fā)失敗,則執(zhí)行步驟B,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程;B,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果否,則將Rl插入 至第二表項(xiàng),如果是,從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于Rl的路由,之后 再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則返回步驟B,如果下發(fā)成功,則結(jié)束Rl 下發(fā)流程。一種路由下發(fā)裝置,該裝置應(yīng)用于包含路由引擎、業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎 的雙轉(zhuǎn)發(fā)引擎系統(tǒng)中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型 1路由和類型2路由,高速轉(zhuǎn)發(fā)引擎中的高速轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由,該裝置包括第二表項(xiàng)、下發(fā)單元和第一判斷單元;其中,所述第二表項(xiàng)用于記錄路由引擎向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由;所述下發(fā)單元用于向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路 由相沖突的類型1路由R1,如果下發(fā)失敗,則發(fā)送判斷通知給所述第一判斷單元,如果下發(fā) 成功,則結(jié)束Rl下發(fā)流程;所述第一判斷單元用于接收到所述判斷通知后,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果否,則將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程;如果是,從高 速轉(zhuǎn)發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于Rl的路由,之后觸發(fā)所述下發(fā)單元再次下 發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則繼續(xù)執(zhí)行判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否 存在次優(yōu)于Rl的路由及后續(xù)的操作,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程。由以上技術(shù)方案可以看出,本發(fā)明中,在由于高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿導(dǎo)致之后向高 速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)的不與類型2路由相沖突的類型1路由Rl失敗時(shí),判斷所述高速轉(zhuǎn)發(fā) 引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果是,則從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除一條次優(yōu)于 Rl的路由,之后再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則繼續(xù)執(zhí)行上述判斷操 作,如果下發(fā)成功,則結(jié)束Rl下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)的流程,這保證了高速轉(zhuǎn)發(fā)引擎表 項(xiàng)滿時(shí)最優(yōu)路由仍被下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),進(jìn)而保證了高速轉(zhuǎn)發(fā)引擎會(huì)通過(guò)最優(yōu)路由 轉(zhuǎn)發(fā)報(bào)文,提高了高速轉(zhuǎn)發(fā)引擎轉(zhuǎn)發(fā)報(bào)文的可靠性。
圖1為現(xiàn)有雙轉(zhuǎn)發(fā)引擎系統(tǒng)結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例提供4個(gè)表項(xiàng)結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例提供的基本流程圖;圖4為本發(fā)明實(shí)施例提供的radix樹(shù)示意圖;圖5為本發(fā)明實(shí)施例提供的詳細(xì)流程圖;圖6為本發(fā)明實(shí)施例提供的具體實(shí)施示意圖;圖7為本發(fā)明實(shí)施例提供的裝置結(jié)構(gòu)圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì) 本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明提供的方法涉及圖2所示的四個(gè)表項(xiàng)業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)、高速轉(zhuǎn)發(fā)引擎 表項(xiàng)、第一表項(xiàng)和第二表項(xiàng)。業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)和高速轉(zhuǎn)發(fā)引擎表項(xiàng)是物理存在的,第一表 項(xiàng)和第二表項(xiàng)是為了實(shí)現(xiàn)本發(fā)明提供的路由下發(fā)方法而額外增加的。下面以圖1所示的雙 轉(zhuǎn)發(fā)引擎系統(tǒng)為例分別對(duì)這四個(gè)表項(xiàng)進(jìn)行描述業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng),其為業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的表項(xiàng),用于存放路由引擎下發(fā)的類型1 路由和類型2路由。高速轉(zhuǎn)發(fā)引擎表項(xiàng),其為高速轉(zhuǎn)發(fā)引擎中的表項(xiàng),用于存放路由引擎下發(fā)的不與 業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突的類型1路由。其中,相沖突是指業(yè)務(wù)轉(zhuǎn)發(fā)引擎表 項(xiàng)存在比該下發(fā)的類型1路由更優(yōu)的類型2路由。所謂路由最優(yōu),可通過(guò)以下方式定義如 果有兩個(gè)路由均可向某一地址發(fā)送報(bào)文,該兩個(gè)路由分別為第一路由和第二路由,其中,第 一路由的目的地址為dl,掩碼為ml,第二路由的目的地址為d2,掩碼為m2,則當(dāng)滿足以下條 件(drd2) &(ml&m2) =0,且ml > m2時(shí),稱第一路由比第二路由更優(yōu),第二路由比第一路 由次優(yōu)。第一表項(xiàng)用于記錄路由引擎已下發(fā)的類型1路由和類型2路由,其可以看成業(yè)務(wù) 轉(zhuǎn)發(fā)引擎表項(xiàng)的復(fù)制,但兩者在結(jié)構(gòu)順序上可能不一樣。當(dāng)路由引擎學(xué)習(xí)到不與類型2路由相沖突的類型1路由時(shí),其會(huì)先將該類型1路由下發(fā)至業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng),在完成下發(fā) 后,將該類型1路由插入至第一表項(xiàng),之后,再向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)該類型1路由。當(dāng) 路由引擎學(xué)習(xí)到類型2路由時(shí),其會(huì)先將該類型2路由下發(fā)至業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng),在完成下 發(fā)后,將該類型2路由插入至第一表項(xiàng)。第二表項(xiàng)包含向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由。該下發(fā)失敗是由高速 轉(zhuǎn)發(fā)引擎表項(xiàng)滿造成的。其中,高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿包含多種情況,下面僅舉兩種情況進(jìn)行 描述第一種情況為高速轉(zhuǎn)發(fā)引擎表項(xiàng)的容量空間已被完全占用;第二種情況為高速轉(zhuǎn) 發(fā)引擎表項(xiàng)的容量空間未被完全占用,但因下刷方式或下刷算法無(wú)法下刷類型1路由。通 過(guò)一個(gè)簡(jiǎn)單例子對(duì)第二種情況進(jìn)行說(shuō)明假設(shè)高速轉(zhuǎn)發(fā)引擎表項(xiàng)的容量空間被分成三個(gè)空 間塊第一空間塊至第三空間塊,其中,每一空間塊可以存放10條路由,但不同的空間塊對(duì) 應(yīng)不同的路由索引區(qū)間;如果高速轉(zhuǎn)發(fā)引擎表項(xiàng)已存放了 27條路由,即,第一空間塊存放 了 10條路由,第二空間塊存放了 9條路由,第三個(gè)空間塊存放了 8條路由,當(dāng)路由引擎當(dāng)前 學(xué)習(xí)到一個(gè)類型1路由時(shí),自動(dòng)生成該路由的路由索引值,如果該生成的路由索引值正好 在第一空間塊對(duì)應(yīng)的路由索引空間上,由于第一空間塊已存放滿了 10條路由,因此,該路 由會(huì)下發(fā)失敗,即出現(xiàn)了上述的第二種情況。通過(guò)上面描述可以簡(jiǎn)單看出,上述的高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿與未滿是相當(dāng)于不與類 型2路由相沖突的類型1路由能否成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)而言的,下發(fā)成功,則說(shuō)明 高速轉(zhuǎn)發(fā)引擎表項(xiàng)未滿,反之,則說(shuō)明高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿。至此,完成圖2所示的四個(gè)表項(xiàng)的描述?;谏厦婷枋龅乃膫€(gè)表項(xiàng),下面通過(guò)圖3對(duì)本發(fā)明實(shí)施例提供的流程進(jìn)行簡(jiǎn)單描 述。參見(jiàn)圖3,圖3為本發(fā)明實(shí)施例提供的基本流程圖。如圖3所示,該流程可包括以 下步驟步驟301,向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突 的類型1路由R1,如果下發(fā)失敗,則執(zhí)行步驟302,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程。其中,本流程在執(zhí)行步驟301之前,可進(jìn)一步包括將學(xué)習(xí)到的Rl插入至第一表 項(xiàng),判斷Rl是否與第一表項(xiàng)中的類型2路由相沖突,由于第一表項(xiàng)可以看成業(yè)務(wù)轉(zhuǎn)發(fā)引擎 表項(xiàng)的復(fù)制,因此,當(dāng)Rl與第一表項(xiàng)中的類型2路由不相沖突時(shí),可以看出該Rl不與業(yè)務(wù) 轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突,根據(jù)上述相沖突的定義可以知道,此時(shí)需要下發(fā)R1,即 繼續(xù)執(zhí)行步驟301中的下發(fā)操作;而當(dāng)Rl與第一表項(xiàng)中的類型2路由相沖突時(shí),根據(jù)上述 相沖突的定義可以知道,此時(shí)沒(méi)有必要下發(fā)R1,因此,可直接結(jié)束Rl下發(fā)流程。步驟302,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果否,則將 Rl插入至第二表項(xiàng),如果是,從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于Rl的路 由,之后再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則返回步驟302,如果下發(fā)成功, 則結(jié)束Rl下發(fā)流程。從步驟301至步驟302可以看出,在Rl首次向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗時(shí),并 非立即將該Rl插入至第二表項(xiàng),而是先執(zhí)行步驟302的判斷,根據(jù)步驟302的判斷確定是 否將該Rl插入至第二表項(xiàng)。至此,完成圖3所示的流程。
本實(shí)施例中,上述第一表項(xiàng)中的路由和第二表項(xiàng)中的路由可以利用具有排序功能 的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。本發(fā)明中,第一表項(xiàng)中的路由可采用基(Radix)樹(shù)結(jié)構(gòu)組織,所述第一表項(xiàng)中的 每一路由在所述Radix樹(shù)中擔(dān)任父節(jié)點(diǎn),同時(shí)擔(dān)任其他路由的子節(jié)點(diǎn),或者僅擔(dān)任子節(jié)點(diǎn)。 采用Radix樹(shù)結(jié)構(gòu)組織路由是已知技術(shù),這里不再詳述。在Radix樹(shù)中,一個(gè)父節(jié)點(diǎn)最多可 以延伸出兩個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)還可以作為父節(jié)點(diǎn)再延伸出下一級(jí)的子節(jié)點(diǎn);父節(jié)點(diǎn)上的bit χ的值,以及父節(jié)點(diǎn)延伸出兩分支上的off和on結(jié)合起來(lái)表示該父節(jié)點(diǎn)延伸出去的子節(jié)點(diǎn) 第X位的值是1還是0,其中,off表示0,on表示1,X最小為0,最大為31。本發(fā)明中,父 節(jié)點(diǎn)和子節(jié)點(diǎn)之間的關(guān)系正好符合了次優(yōu)路由和最優(yōu)路由之間的關(guān)系,其中,父節(jié)點(diǎn)上的 路由次優(yōu)于子節(jié)點(diǎn)上的路由,也即,父節(jié)點(diǎn)上的路由為次優(yōu)路由,該父節(jié)點(diǎn)的子節(jié)點(diǎn)上的路 由是最優(yōu)路由。可以看出,通過(guò)Radix樹(shù)結(jié)構(gòu)組織第一表項(xiàng)中的路由,能夠方便、快捷地找 到對(duì)應(yīng)的次優(yōu)路由。以路由引擎向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)以下4條不與類型2路由相沖突的類型1路 由為例,路由1 3. 3. 0. 0/16,下一跳為第一類型接口,路由2 2. 1. 0. 0/16,下一跳為第一類 型接口,路由3 2. 2. 0. 0/16,下一跳為第一類型接口,路由4 :2. 2. 128. 0/24,下一跳為第一 類型接口,則將該4條路由插入Radix樹(shù)后的效果如圖4所示。另外,需要說(shuō)明的是,單純地靠路由引擎下發(fā)的路由并不能組成符合要求的Radix 樹(shù),因此,本發(fā)明會(huì)根據(jù)實(shí)際情況增加一些擔(dān)任根節(jié)點(diǎn)和輔助節(jié)點(diǎn)的路由,將該增加的路由 和第一表項(xiàng)中的路由一起組織成符合要求的Radix樹(shù)。在圖4中,bit31 (0. 0. 0. 0/0)為根 節(jié)點(diǎn),bit25(0. 0. 0. 0/6)、bit24(2. 0. 0. 0/8)和 bitl7 等為輔助節(jié)點(diǎn)。本發(fā)明中,第二表項(xiàng)中的路由可采用紅黑樹(shù)結(jié)構(gòu)組織,利用該紅黑樹(shù)結(jié)構(gòu)能夠方 便路由的查找、排序、插入和刪除等功能。其中,采用紅黑樹(shù)結(jié)構(gòu)組織路由為已知技術(shù),這里 不再詳述。當(dāng)然,本發(fā)明也不嚴(yán)格限定必須采用紅黑樹(shù)結(jié)果組織第二表項(xiàng)的路由,還可采用 其他具有查找、排序、插入和刪除等功能的數(shù)據(jù)結(jié)構(gòu)。下面以采用Radix樹(shù)組織第一表項(xiàng)中的路由、紅黑樹(shù)組織第二表項(xiàng)中的路由為 例,對(duì)圖2所示的流程進(jìn)行詳細(xì)描述。參見(jiàn)圖5,圖5為本發(fā)明實(shí)施例提供的詳細(xì)流程圖。如圖5所示,該圖5所示的流 程基于圖1所示的組網(wǎng),其可包括以下步驟步驟501,路由引擎將學(xué)習(xí)到的類型1路由Rl插入至radix樹(shù)。本步驟501中,向radix樹(shù)插入路由的過(guò)程為已知技術(shù)手段,這里不再詳述。步驟502,路由引擎判斷radix樹(shù)中是否存在與Rl相沖突的類型2路由,如果是, 結(jié)束Rl下發(fā)流程,否則,執(zhí)行步驟503。步驟503,路由引擎向高速轉(zhuǎn)發(fā)弓I擎表項(xiàng)下發(fā)Rl。步驟504,路由引擎判斷Rl是否被成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果是,結(jié)束Rl 下發(fā)流程,否則,執(zhí)行步驟505。當(dāng)高速轉(zhuǎn)發(fā)引擎接收到Rl時(shí),如果高速轉(zhuǎn)發(fā)引擎表項(xiàng)已滿,不能再容納R1,則會(huì) 通知給路由引擎,當(dāng)高速轉(zhuǎn)發(fā)引擎表項(xiàng)未滿,成功存放Rl時(shí),也會(huì)通知給路由引擎,因此, 本步驟504中,路由引擎可根據(jù)高速轉(zhuǎn)發(fā)引擎的通知執(zhí)行判斷操作。步驟505,在radix樹(shù)中回溯Rl的父節(jié)點(diǎn),將回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn)。
步驟506,判斷當(dāng)前父節(jié)點(diǎn)是否為不與類型2路由沖突、且不存在于紅黑樹(shù)中的類 型1路由,如果是,執(zhí)行步驟507 ;否則,執(zhí)行步驟508。步驟507,將當(dāng)前父節(jié)點(diǎn)記錄至路由Rl對(duì)應(yīng)的鏈表中,繼續(xù)回溯當(dāng)前父節(jié)點(diǎn)的父 節(jié)點(diǎn),并將回溯到的當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn)再次作為當(dāng)前父節(jié)點(diǎn),返回步驟506。在上面描述中提到,紅黑樹(shù)中存在的路由為下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)失敗的路 由,因此,如果當(dāng)前父節(jié)點(diǎn)為不與類型2路由沖突、且不存在于紅黑樹(shù)中的類型1路由,則表 示該當(dāng)前父節(jié)點(diǎn)已被成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),進(jìn)而也可知道本步驟507中鏈表記錄 的路由都為已成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)的路由。步驟508,判斷當(dāng)前父節(jié)點(diǎn)是否為輔助節(jié)點(diǎn),如果是,執(zhí)行步驟509,否則,執(zhí)行步 驟 510。步驟509,繼續(xù)回溯當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn),并將回溯到的當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn)再次 作為當(dāng)前父節(jié)點(diǎn),返回步驟506。步驟510,結(jié)束父節(jié)點(diǎn)回溯操作,之后執(zhí)行步驟511。本步驟510是在步驟508的判斷結(jié)果為否時(shí)執(zhí)行的,其中,判斷結(jié)果為否的情況可 包括當(dāng)前父節(jié)點(diǎn)為根節(jié)點(diǎn)、為類型2路由、或者為已存在于紅黑樹(shù)中的類型1路由。步驟511,判斷Rl對(duì)應(yīng)的鏈表是否為空,如果是,則執(zhí)行步驟512 ;否則,執(zhí)行步驟 513。步驟512,將Rl插入至紅黑樹(shù)中,結(jié)束路由Rl下發(fā)流程。向紅黑樹(shù)中插入路由為已知手段,這里不再贅述。本步驟512是在Rl對(duì)應(yīng)的鏈表為空時(shí)執(zhí)行的。鏈表為空,也就是說(shuō)在上述步驟 505至步驟510回溯到的父節(jié)點(diǎn)都不滿足以下條件不與類型2路由沖突、且不存在于紅黑 樹(shù)中的類型1路由。由于Rl的父節(jié)點(diǎn)次優(yōu)于R1,因此,當(dāng)鏈表為空時(shí),也可認(rèn)為高速轉(zhuǎn)發(fā)引 擎表項(xiàng)中不存在次優(yōu)于Rl的路由,故在步驟504中由于高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿而導(dǎo)致Rl下 發(fā)失敗的前提下,本步驟512只能將Rl插入至紅黑樹(shù)中,結(jié)束Rl下發(fā)流程。步驟513,按照后進(jìn)先出的原則從Rl對(duì)應(yīng)的鏈表中讀取一條類型1路由,從所述高 速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除該讀取的類型1路由。本實(shí)施例是在Radix樹(shù)中以Rl為起點(diǎn)開(kāi)始向上回溯Rl的父節(jié)點(diǎn),由于radix樹(shù) 中子節(jié)點(diǎn)的路由優(yōu)于父節(jié)點(diǎn)的路由,因此,可以知道先被寫進(jìn)鏈表的路由優(yōu)于后被寫進(jìn)鏈 表的路由。而本步驟513中后進(jìn)先出的原則實(shí)質(zhì)上也是路由的優(yōu)先順序,即從最不優(yōu)路由 開(kāi)始向最優(yōu)路由的順序。步驟514,在完成刪除操作后,再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗, 則執(zhí)行步驟515,如果下發(fā)成功,結(jié)束路由Rl下發(fā)流程。步驟515,判斷Rl對(duì)應(yīng)的鏈表中是否存在未被讀取的類型1路由,如果是,按照后 進(jìn)先出的原則讀取一條未被讀取的類型1路由,從所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除該讀取的 類型1路由,之后返回步驟514 ;否則,將Rl插入至紅黑樹(shù)中,結(jié)束Rl下發(fā)流程。其中,Rl對(duì)應(yīng)的鏈表是一個(gè)臨時(shí)鏈表,其在步驟515的判斷結(jié)果為否時(shí)可刪除。至此,完成圖5所示的流程。為使圖5所示的流程更加清楚,下面通過(guò)一個(gè)具體的實(shí)施例進(jìn)行描述。參見(jiàn)圖6,圖6為本發(fā)明實(shí)施例提供的具體實(shí)施示意圖。圖6示出了用于組織第一表項(xiàng)中路由的Radix樹(shù)的一部分。根據(jù)圖6顯示的Radix樹(shù)可以看出,該Radix樹(shù)中的類 型2路由bit7(2. 2. 1.0/24)與類型1路由bit8 (2. 2.0.0/23)相沖突,以及該Radix樹(shù)中 的類型2路由bit9(2. 2.0.0/22)與類型1路由bitl5 (2. 2.0.0/16)相沖突,因此,基于步 驟502的描述,可以知道bU8和bitl5均不下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)。當(dāng)學(xué)習(xí)到圖6中所示的不與Radix樹(shù)中的類型2路由相沖突的以下五條類型1路 由路由(1)至路由(5)時(shí),則向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)該5條路由針對(duì)路由(1) 1. 1. 0. 0/16,下發(fā)成功;針對(duì)路由(2) 1. 1. 1. 0Λ4,下發(fā)成功;針對(duì)路由(3) 2. 1. 0. 0/16,下發(fā)成功;針對(duì)路由(4) :1.0.0.0/8,高速轉(zhuǎn)發(fā)引擎表項(xiàng)已滿,下發(fā)失敗,但是,通過(guò)回溯 radix樹(shù),發(fā)現(xiàn)該路由(4)的父節(jié)點(diǎn)為輔助節(jié)點(diǎn)bit25,則繼續(xù)回溯該輔助接點(diǎn)的父節(jié)點(diǎn),發(fā) 現(xiàn)該回溯到的父節(jié)點(diǎn)為根節(jié)點(diǎn)bit31,根據(jù)步驟510的描述,則結(jié)束回溯操作,并將該路由 (4)插入至紅黑樹(shù)。針對(duì)路由( :1. 1.2.0/24,高速轉(zhuǎn)發(fā)引擎表項(xiàng)已滿,下發(fā)失敗,但是,通過(guò)回溯 radix樹(shù),發(fā)現(xiàn)存在路由(5)的父節(jié)點(diǎn)即路由(1),根據(jù)上面描述可以知道,該路由(1)已被 成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),基于此,根據(jù)步驟506至步驟507的描述可以知道當(dāng)前需要 將該路由(1)記錄在路由( 對(duì)應(yīng)的鏈表中,之后繼續(xù)回溯路由(1)的父節(jié)點(diǎn),發(fā)現(xiàn)路由 (1)的父節(jié)點(diǎn)為路由G),由于路由已被插入至紅黑樹(shù)中,則根據(jù)步驟506至步驟510 的描述可以知道當(dāng)前需要結(jié)束回溯操作。之后,按照步驟513的描述從高速轉(zhuǎn)發(fā)引擎表項(xiàng) 刪除路由( 對(duì)應(yīng)的鏈表中的路由(1),并再次下發(fā)路由( 至高速轉(zhuǎn)發(fā)引擎表項(xiàng)。由于路 由(1)已被從高速轉(zhuǎn)發(fā)引擎表項(xiàng)刪除,如此,再次下發(fā)的路由( 很可能是下發(fā)成功。根據(jù) 上述最優(yōu)路由的定義可以知道,路由(5)比路由(1)更優(yōu),即路由(5)1. 1.2.0/M為最優(yōu)路 由,而路由(1)1. 1.0.0/16為次優(yōu)路由,如此,實(shí)現(xiàn)了最優(yōu)路由被下發(fā)的目的。從圖5或圖6所示的流程可以看出,當(dāng)類型1路由被成功下發(fā)至高速轉(zhuǎn)發(fā)引擎表 項(xiàng),不論高速轉(zhuǎn)發(fā)引擎表項(xiàng)里是否存在次優(yōu)于該被下發(fā)的路由,均不對(duì)高速轉(zhuǎn)發(fā)引擎表項(xiàng) 中的類型1路由作任何處理;當(dāng)類型1路由下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)失敗,如果高速轉(zhuǎn)發(fā) 引擎表項(xiàng)里不存在次優(yōu)于該下發(fā)失敗路由的類型1路由,也不對(duì)高速轉(zhuǎn)發(fā)引擎表項(xiàng)中的類 型1路由作任何處理;而當(dāng)類型1路由下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)失敗,且高速轉(zhuǎn)發(fā)引擎表項(xiàng) 里存在次優(yōu)于該下發(fā)失敗路由的類型1路由,則需要從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除一條次優(yōu) 于該被下發(fā)失敗路由的類型1路由,之后再次下發(fā)該被下發(fā)失敗的路由至高速轉(zhuǎn)發(fā)引擎表 項(xiàng),如果還失敗,則當(dāng)高速轉(zhuǎn)發(fā)引擎表項(xiàng)里還存在次優(yōu)于該被下發(fā)失敗路由的類型1路由, 則繼續(xù)從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除一條次優(yōu)于該被下發(fā)失敗路由的類型1路由,再次下發(fā) 該被下發(fā)失敗的路由至高速轉(zhuǎn)發(fā)引擎表項(xiàng),依次類推,直至下發(fā)成功,或者直至高速轉(zhuǎn)發(fā)引 擎表項(xiàng)中不存在次優(yōu)于該被下發(fā)失敗路由的類型1路由,將該下發(fā)失敗的路由插入至紅黑 樹(shù)。以上對(duì)本發(fā)明實(shí)施例提供的方法進(jìn)行了描述。下面對(duì)本發(fā)明實(shí)施例提供的裝置進(jìn) 行描述。參見(jiàn)圖7,圖7為本發(fā)明實(shí)施例提供的路由下發(fā)裝置結(jié)構(gòu)圖。該裝置應(yīng)用于包含路 由引擎、業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎的雙轉(zhuǎn)發(fā)引擎系統(tǒng)中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1路由和類型2路由,高速轉(zhuǎn)發(fā)引擎中的高速轉(zhuǎn)發(fā) 引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1路由,如圖7所示,該裝置可包括第二表項(xiàng)、下發(fā) 單元和第一判斷單元;其中,所述第二表項(xiàng)用于記錄路由引擎向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由;所述下發(fā)單元用于向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路 由相沖突的類型1路由R1,如果下發(fā)失敗,則發(fā)送判斷通知給所述第一判斷單元,如果下發(fā) 成功,則結(jié)束Rl下發(fā)流程;所述第一判斷單元用于接收到所述判斷通知后,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是 否存在次優(yōu)于Rl的路由,如果否,則將Rl插入至第二表項(xiàng),如果是,從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中 依優(yōu)先順序刪除一條次優(yōu)于Rl的路由,之后觸發(fā)所述下發(fā)單元再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引 擎表項(xiàng),如果下發(fā)失敗,則繼續(xù)執(zhí)行判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于Rl的路 由及后續(xù)的操作,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程。其中,如圖7所示,該裝置進(jìn)一步包括學(xué)習(xí)單元,用于將學(xué)習(xí)到的Rl插入至第一表項(xiàng),所述第一表項(xiàng)用于記錄路由引擎 已下發(fā)的類型1路由和類型2路由;第二判斷單元,用于判斷Rl是否與第一表項(xiàng)中的類型2路由相沖突,如果否,則確 定Rl不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突,觸發(fā)所述下發(fā)單元執(zhí)行下發(fā)操作,否則, 結(jié)束Rl下發(fā)流程。優(yōu)選地,如圖7所示,所述第一判斷單元在具體實(shí)現(xiàn)時(shí)可包括以下子單元路由查找子單元,用于接收到所述判斷通知后接收到所述判斷通知后從所述第一 表項(xiàng)中查找次優(yōu)于R1、且存在于高速轉(zhuǎn)發(fā)引擎表項(xiàng)中的類型1路由,將查找到的路由記錄 至Rl對(duì)應(yīng)的鏈表中,之后發(fā)送處理通知至路由刪除子單元,如果未查找到,將Rl插入至第 二表項(xiàng),結(jié)束Rl下發(fā)流程;路由刪除子單元,用于接收到處理通知后,依優(yōu)先順序從所述高速轉(zhuǎn)發(fā)引擎表項(xiàng) 中刪除所述鏈表中的一條路由,之后觸發(fā)所述下發(fā)單元再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng), 如果下發(fā)失敗,則發(fā)送下發(fā)失敗通知給路由判斷子單元;如果下發(fā)成功,則結(jié)束Rl下發(fā)流 程;路由判斷子單元,用于接收到下發(fā)失敗通知后,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是 否還存在所述路由查找子單元查找到的類型1路由,如果是,觸發(fā)所述路由刪除子單元繼 續(xù)執(zhí)行刪除操作,如果否,則將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程。本實(shí)施例中,第一表項(xiàng)中的路由按照Radix樹(shù)的結(jié)構(gòu)組織,其中,父節(jié)點(diǎn)上的路由 次優(yōu)于子節(jié)點(diǎn)的路由?;诖?,如圖7所示,路由查找子單元具體實(shí)現(xiàn)時(shí)可包括以下模塊 回溯模塊、判斷模塊、記錄模塊和回溯操作結(jié)束模塊。其中,回溯模塊,用于在所述Radix樹(shù)中回溯Rl的父節(jié)點(diǎn),將回溯到的父節(jié)點(diǎn)作為 當(dāng)前父節(jié)點(diǎn);判斷模塊,用于判斷當(dāng)前父節(jié)點(diǎn)是否為不與類型2路由相沖突、且不存在于第二 表項(xiàng)的類型1路由,如果是,發(fā)送記錄通知至記錄模塊,否則,進(jìn)一步判斷當(dāng)前父節(jié)點(diǎn)是否 為輔助節(jié)點(diǎn),如果是,則繼續(xù)回溯當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn),將該回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié) 點(diǎn),觸發(fā)所述判斷模塊針對(duì)該當(dāng)前父節(jié)點(diǎn)執(zhí)行判斷操作;如果否,發(fā)送結(jié)束通知至回溯操作結(jié)束模塊;記錄模塊,用于接收到記錄通知后,將當(dāng)前父節(jié)點(diǎn)記錄至所述鏈表中,之后繼續(xù)回 溯當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn),如果回溯到,則將該回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn),觸發(fā)所述判 斷模塊針對(duì)該當(dāng)前父節(jié)點(diǎn)執(zhí)行判斷操作;回溯操作結(jié)束模塊,用于接收到結(jié)束通知后,結(jié)束回溯操作,并判斷所述鏈表是否 為空,如果否,發(fā)送處理通知至所述路由刪除子單元,如果是,將Rl插入至第二表項(xiàng),結(jié)束 Rl下發(fā)流程?;谝陨蠈?duì)路由查找子單元包含的四個(gè)模塊的描述,路由刪除子單元執(zhí)行的刪除 操作具體包括按照后進(jìn)先出的原則從所述鏈表中讀取一條路由,從所述高速轉(zhuǎn)發(fā)引擎表 項(xiàng)中刪除該讀取的路由。而路由判斷子單元執(zhí)行的判斷操作包括判斷所述鏈表中是否還 存在未被讀取的路由。本實(shí)施例中,所述第二表項(xiàng)中的路由按照紅黑樹(shù)的結(jié)構(gòu)組織。至此,完成圖7所示的裝置描述。由以上技術(shù)方案可以看出,本發(fā)明中,在由于高速轉(zhuǎn)發(fā)引擎表項(xiàng)滿導(dǎo)致之后向高 速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)的不與類型2路由相沖突的類型1路由Rl失敗時(shí),判斷所述高速轉(zhuǎn)發(fā) 引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果是,則從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除一條次優(yōu)于 Rl的路由,之后再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則繼續(xù)執(zhí)行上述判斷操 作,如果下發(fā)成功,則結(jié)束Rl下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng)的流程,這保證了高速轉(zhuǎn)發(fā)引擎表 項(xiàng)滿時(shí)最優(yōu)路由仍被下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),進(jìn)而保證了高速轉(zhuǎn)發(fā)引擎會(huì)通過(guò)最優(yōu)路由 轉(zhuǎn)發(fā)報(bào)文,提高了高速轉(zhuǎn)發(fā)引擎轉(zhuǎn)發(fā)報(bào)文的可靠性。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種路由下發(fā)方法,該方法應(yīng)用于包含路由引擎、業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎的 雙轉(zhuǎn)發(fā)引擎系統(tǒng)中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由和類型2路由,高速轉(zhuǎn)發(fā)引擎中的高速轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由,其特征在于,所述雙轉(zhuǎn)發(fā)引擎系統(tǒng)還包括第二表項(xiàng),所述第二表項(xiàng)用于記錄路由引擎 向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由;該方法包括A,向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突的類型1路由 R1,如果下發(fā)失敗,則執(zhí)行步驟B,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程;B,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于Rl的路由,如果否,則將Rl插入至第 二表項(xiàng),結(jié)束Rl下發(fā)流程,如果是,從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于Rl 的路由,之后再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則返回步驟B,如果下發(fā)成 功,則結(jié)束Rl下發(fā)流程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A之前,進(jìn)一步包括將學(xué)習(xí)到的Rl插入至第一表項(xiàng),所述第一表項(xiàng)用于記錄路由引擎已下發(fā)的類型1路由 和類型2路由;判斷Rl是否與第一表項(xiàng)中的類型2路由相沖突,如果否,則確定Rl不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎 表項(xiàng)中類型2路由相沖突,繼續(xù)執(zhí)行步驟A中的下發(fā)操作,否則,結(jié)束Rl下發(fā)流程。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟B包括Bi,從第一表項(xiàng)中查找次優(yōu)于R1、且存在于高速轉(zhuǎn)發(fā)引擎表項(xiàng)中的類型1路由,將查找 到的類型1路由記錄至Rl對(duì)應(yīng)的鏈表中,之后執(zhí)行步驟B2,如果未查找到,將Rl插入至第 二表項(xiàng),結(jié)束Rl下發(fā)流程;B2,依優(yōu)先順序從所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除步驟Bl查找到的一條類型1路由,之 后再次下發(fā)Rl至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則執(zhí)行步驟B3 ;如果下發(fā)成功,則結(jié)束 Rl下發(fā)流程;B3,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否還存在步驟Bl查找到的類型1路由,如果是,返 回執(zhí)行步驟B2,如果否,將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述第一表項(xiàng)中的路由按照基Radix樹(shù)的 結(jié)構(gòu)組織,其中,父節(jié)點(diǎn)上的路由次優(yōu)于子節(jié)點(diǎn)的路由;步驟Bl包括B11,在所述Radix樹(shù)中回溯Rl的父節(jié)點(diǎn),將回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn);B12,判斷當(dāng)前父節(jié)點(diǎn)是否為不與類型2路由相沖突、且不存在于第二表項(xiàng)的類型1路 由,如果是,執(zhí)行步驟B13,否則,判斷當(dāng)前父節(jié)點(diǎn)是否為輔助節(jié)點(diǎn),如果是,則繼續(xù)回溯當(dāng)前 父節(jié)點(diǎn)的父節(jié)點(diǎn),將該回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn),返回步驟B12,如果否,執(zhí)行步驟 B14 ;B13,將當(dāng)前父節(jié)點(diǎn)記錄至所述鏈表中,之后繼續(xù)回溯當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn),將該回溯 到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn),返回步驟B12 ;B14,結(jié)束回溯操作,判斷所述鏈表是否為空,如果否,執(zhí)行步驟B2,如果是,將Rl插入 至第二表項(xiàng),結(jié)束Rl下發(fā)流程;步驟B2中的刪除包括按照后進(jìn)先出的原則從所述鏈表中讀取一條路由,從所述高速 轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除該讀取的路由;步驟B3中的判斷包括判斷所述鏈表中是否還存在未被讀取的路由。
5.根據(jù)權(quán)利要求1至4任一所述的方法,其特征在于,所述第二表項(xiàng)中的路由按照紅黑 樹(shù)的結(jié)構(gòu)組織。
6.一種路由下發(fā)裝置,該裝置應(yīng)用于包含路由引擎、業(yè)務(wù)轉(zhuǎn)發(fā)引擎和高速轉(zhuǎn)發(fā)引擎的 雙轉(zhuǎn)發(fā)引擎系統(tǒng)中,業(yè)務(wù)轉(zhuǎn)發(fā)引擎中的業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由和類型2路由,高速轉(zhuǎn)發(fā)引擎中的高速轉(zhuǎn)發(fā)引擎表項(xiàng)用于存放路由引擎下發(fā)的類型1 路由,其特征在于,該裝置包括第二表項(xiàng)、下發(fā)單元和第一判斷單元;其中,所述第二表項(xiàng)用于記錄路由引擎向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)失敗的類型1路由;所述下發(fā)單元用于向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相 沖突的類型1路由R1,如果下發(fā)失敗,則發(fā)送判斷通知給所述第一判斷單元,如果下發(fā)成 功,則結(jié)束Rl下發(fā)流程;所述第一判斷單元用于接收到所述判斷通知后,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存 在次優(yōu)于Rl的路由,如果否,則將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程;如果是,從高速轉(zhuǎn) 發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于Rl的路由,之后觸發(fā)所述下發(fā)單元再次下發(fā)Rl 至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則繼續(xù)執(zhí)行判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在 次優(yōu)于Rl的路由及后續(xù)的操作,如果下發(fā)成功,則結(jié)束Rl下發(fā)流程。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,該裝置進(jìn)一步包括學(xué)習(xí)單元,用于將學(xué)習(xí)到的Rl插入至第一表項(xiàng),所述第一表項(xiàng)用于記錄路由引擎已下 發(fā)的類型1路由和類型2路由;第二判斷單元,用于判斷Rl是否與第一表項(xiàng)中的類型2路由相沖突,如果否,則確定Rl 不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突,觸發(fā)所述下發(fā)單元執(zhí)行下發(fā)操作,否則,結(jié)束 Rl下發(fā)流程。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述第一判斷單元包括路由查找子單元,用于接收到所述判斷通知后從所述第一表項(xiàng)中查找次優(yōu)于R1、且存 在于高速轉(zhuǎn)發(fā)引擎表項(xiàng)中的類型1路由,將查找到的路由記錄至Rl對(duì)應(yīng)的鏈表中,之后發(fā) 送處理通知至路由刪除子單元,如果未查找到,將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程;路由刪除子單元,用于接收到處理通知后,依優(yōu)先順序從所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪 除所述路由查找子單元查找到的一條類型1路由,之后,觸發(fā)所述下發(fā)單元再次下發(fā)Rl至 高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則發(fā)送下發(fā)失敗通知給路由判斷子單元;如果下發(fā)成 功,則結(jié)束Rl下發(fā)流程;路由判斷子單元,用于接收到下發(fā)失敗通知后,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否還 存在所述路由查找子單元查找到的類型1路由,如果是,觸發(fā)所述路由刪除子單元繼續(xù)執(zhí) 行刪除操作,如果否,則將Rl插入至第二表項(xiàng),結(jié)束Rl下發(fā)流程。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第一表項(xiàng)中的路由按照基Radix樹(shù)的 結(jié)構(gòu)組織,其中,父節(jié)點(diǎn)上的路由次優(yōu)于子節(jié)點(diǎn)的路由;所述路由查找子單元包括回溯模塊,用于在所述Radix樹(shù)中回溯Rl的父節(jié)點(diǎn),將回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn);判斷模塊,用于判斷當(dāng)前父節(jié)點(diǎn)是否為不與類型2路由相沖突、且不存在于第二表項(xiàng)的類型1路由,如果是,發(fā)送記錄通知至記錄模塊,否則,進(jìn)一步判斷當(dāng)前父節(jié)點(diǎn)是否為輔 助節(jié)點(diǎn),如果是,則繼續(xù)回溯當(dāng)前父節(jié)點(diǎn)的父節(jié)點(diǎn),將該回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn), 觸發(fā)所述判斷模塊針對(duì)該當(dāng)前父節(jié)點(diǎn)執(zhí)行判斷操作;如果否,發(fā)送結(jié)束通知至回溯操作結(jié) 束模塊;記錄模塊,用于接收到記錄通知后,將當(dāng)前父節(jié)點(diǎn)記錄至所述鏈表中,之后繼續(xù)回溯當(dāng) 前父節(jié)點(diǎn)的父節(jié)點(diǎn),將該回溯到的父節(jié)點(diǎn)作為當(dāng)前父節(jié)點(diǎn),觸發(fā)所述判斷模塊針對(duì)該當(dāng)前 父節(jié)點(diǎn)執(zhí)行判斷操作;回溯操作結(jié)束模塊,用于接收到結(jié)束通知后,結(jié)束回溯操作,并判斷所述鏈表是否為 空,如果否,發(fā)送處理通知至所述路由刪除子單元,如果是,將Rl插入至第二表項(xiàng),結(jié)束Rl 下發(fā)流程;路由刪除子單元執(zhí)行的刪除操作具體包括按照后進(jìn)先出的原則從所述鏈表中讀取一 條路由,從所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中刪除該讀取的路由;路由判斷子單元執(zhí)行的判斷操作包括判斷所述鏈表中是否還存在未被讀取的路由。
10.根據(jù)權(quán)利要求6至9任一所述的裝置,其特征在于,所述第二表項(xiàng)中的路由按照紅 黑樹(shù)的結(jié)構(gòu)組織。
全文摘要
本發(fā)明提供了路由下發(fā)方法和裝置。該方法包括A,向高速轉(zhuǎn)發(fā)引擎表項(xiàng)下發(fā)不與業(yè)務(wù)轉(zhuǎn)發(fā)引擎表項(xiàng)中類型2路由相沖突的類型1路由R1,如果下發(fā)失敗,則執(zhí)行步驟B,如果下發(fā)成功,則結(jié)束R1下發(fā)流程;B,判斷所述高速轉(zhuǎn)發(fā)引擎表項(xiàng)中是否存在次優(yōu)于R1的路由,如果否,則將R1插入至第二表項(xiàng),結(jié)束R1下發(fā)流程,如果是,從高速轉(zhuǎn)發(fā)引擎表項(xiàng)中依優(yōu)先順序刪除一條次優(yōu)于R1的路由,之后再次下發(fā)R1至高速轉(zhuǎn)發(fā)引擎表項(xiàng),如果下發(fā)失敗,則返回步驟B,如果下發(fā)成功,則結(jié)束R1下發(fā)流程。采用本發(fā)明,能夠?qū)崿F(xiàn)將最優(yōu)路由下發(fā)至高速轉(zhuǎn)發(fā)引擎表項(xiàng),進(jìn)而實(shí)現(xiàn)利用最優(yōu)路由轉(zhuǎn)發(fā)報(bào)文。
文檔編號(hào)H04L12/56GK102075435SQ20111003503
公開(kāi)日2011年5月25日 申請(qǐng)日期2011年2月9日 優(yōu)先權(quán)日2011年2月9日
發(fā)明者李軍軍, 李鑫 申請(qǐng)人:杭州華三通信技術(shù)有限公司