專利名稱:一種維護(hù)路由表的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于維護(hù)IPv6(互聯(lián)網(wǎng)協(xié)議版本6)路由器中的路由表的方法及裝置。
背景技術(shù):
路由器通常用于連接應(yīng)用不同協(xié)議的異型網(wǎng),從而構(gòu)成一個(gè)大的計(jì)算機(jī)網(wǎng)絡(luò),由于路由器中存在能夠指示在所述計(jì)算機(jī)網(wǎng)絡(luò)中傳遞的數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)中的目的節(jié)點(diǎn)的路由表,使得在所述計(jì)算機(jī)網(wǎng)絡(luò)中可以將數(shù)據(jù)傳遞到任何希望的目的地,因此,維護(hù)路由器中的路由表是一項(xiàng)重要的工作。
TCP/IP(傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)經(jīng)典著作《用TCP/IP進(jìn)行網(wǎng)際互連》(卷二)里采用了RIP和內(nèi)核共用同一個(gè)路由表的方法維護(hù)路由表,但這需要修改內(nèi)核路由表的表項(xiàng)以提供RIP(路由信息協(xié)議)所需的額外字段,同時(shí)對(duì)IP選路部分的程序還需進(jìn)行需改,復(fù)雜性增加,也不便于其他路由協(xié)議模塊的加入。
目前,大多數(shù)實(shí)現(xiàn)者采用哈希表結(jié)構(gòu)或二叉樹結(jié)構(gòu)處理路由表,由于用于計(jì)算哈希值的IPv6地址跟Ipv4地址重點(diǎn)數(shù)據(jù)的區(qū)分沒那么清楚,因此難以達(dá)到提高效率的目的。還有很多實(shí)現(xiàn)者采用了RIP路由表與內(nèi)核獨(dú)立開來的方法實(shí)現(xiàn)RIPv2(路由信息協(xié)議版本2),由于未提供與其它路由協(xié)議模塊交互的接口,因此,那樣的實(shí)現(xiàn)使RIP發(fā)送的更新消息可能不能準(zhǔn)確地反映現(xiàn)有的選路表狀況。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種簡(jiǎn)單、高效的有利于多協(xié)議共存的維護(hù)路由表的方法及裝置。
為達(dá)到上述目的,本發(fā)明提供的維護(hù)路由表的方法,包括(1)接收RIP數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的命令域?qū)λ鰯?shù)據(jù)包進(jìn)行請(qǐng)求處理或響應(yīng)處理;(2)建立RIP請(qǐng)求包和觸發(fā)更新/周期更新RIP包,根據(jù)需要將所述RIP包通過指定的接口發(fā)出;(3)對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù);(4)定時(shí)發(fā)送周期更新,當(dāng)路由表里路由條目有變化時(shí),發(fā)送觸發(fā)更新;(5)接口新啟動(dòng)時(shí),廣播路由表請(qǐng)求。
本發(fā)明還包括建立RIP包的結(jié)構(gòu),用于建立RIP包,該結(jié)構(gòu)包括下述字段命令用于標(biāo)識(shí)RIP包的種類;版本號(hào)用于標(biāo)識(shí)RIP協(xié)議的版本號(hào);路由條目用于標(biāo)識(shí)路由信息。
建立路由條目表的結(jié)構(gòu),該結(jié)構(gòu)包括下述字段目的前綴用于標(biāo)識(shí)數(shù)據(jù)包的目的地址;路由標(biāo)簽用于標(biāo)識(shí)內(nèi)部或外部路由;
前綴長(zhǎng)度用于標(biāo)識(shí)目的前綴的二進(jìn)制位數(shù);路由度量用于標(biāo)識(shí)本路由器到目的地路由器所經(jīng)過的路由器的個(gè)數(shù)。
建立路由表結(jié)構(gòu),所述路由表包括下述字段下一條目用于指示下一個(gè)路由條目;路由條目用于存儲(chǔ)本條路由條目;網(wǎng)關(guān)地址用于存儲(chǔ)與路由器連接的網(wǎng)關(guān)地址;內(nèi)核標(biāo)志用于內(nèi)核路由表中相應(yīng)條目的標(biāo)志;RIP標(biāo)志用于RIP路由表中相應(yīng)條目的標(biāo)志;時(shí)間用于標(biāo)識(shí)路由表?xiàng)l目的更新時(shí)間;接口用于標(biāo)識(shí)獲得路由表的接口。
建立RIP接口表的結(jié)構(gòu),所述RIP接口表包括下述字段名稱1用于標(biāo)識(shí)接口的名稱;名稱2用于標(biāo)識(shí)與本條目描述的接口相鄰的下一個(gè)接口名稱;索引用于標(biāo)識(shí)接口查詢索引值;最大傳輸單元用于標(biāo)識(shí)接口的最大傳輸單元;度量用于標(biāo)識(shí)接口的度量值;標(biāo)志用于標(biāo)識(shí)接口的狀態(tài);多播地址用于標(biāo)識(shí)接口的多播地址;鏈路地址用于標(biāo)識(shí)接口鏈路本地地址;多播標(biāo)志用于標(biāo)識(shí)接口是否參加多播組。
本發(fā)明同時(shí)還提供了一種維護(hù)路由表的裝置,包括
輸入處理模塊接收RIP數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的命令域?qū)λ鰯?shù)據(jù)包進(jìn)行請(qǐng)求處理或響應(yīng)處理;輸出處理模塊用于根據(jù)所述接收的RIP包,建立RIP請(qǐng)求包和觸發(fā)更新/周期更新RIP包,根據(jù)需要將所述建立的RIP包通過指定的接口發(fā)出;路由操作模塊用于查詢RIP路由表,以及向所述RIP路由表中添加路由和刪除無效路由;路由增強(qiáng)模塊用于對(duì)對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù);定時(shí)器處理模塊用于定時(shí)對(duì)路由表進(jìn)行周期更新。
本發(fā)明的優(yōu)點(diǎn)在于由于具有按照獨(dú)立設(shè)計(jì)的RIP接口表的結(jié)構(gòu)存儲(chǔ)的RIP接口表,使RIP接口表和路由表與內(nèi)核相互獨(dú)立,當(dāng)一個(gè)新的路由消息到達(dá)時(shí),RIP可以更新其路由表并將這一變動(dòng)裝載到內(nèi)核路由表中,同時(shí)通知其他路由協(xié)議模塊,因此采用本發(fā)明維護(hù)路由表能夠提高路由表維護(hù)的效率,減小復(fù)雜度,易于其它路由協(xié)議模塊的添加;同時(shí),由于本發(fā)明能夠?qū)π录尤氲穆酚蓞f(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù),這樣使RIP發(fā)送的更新消息能準(zhǔn)確地反映現(xiàn)有的選路表狀況。
另外,本發(fā)明設(shè)計(jì)的獨(dú)立的RIP接口表的結(jié)構(gòu)和路由表結(jié)構(gòu),可以使RIP接口表和路由表采用鏈表形式進(jìn)行管理,適合于管理較多的路由條目,因此可以提高路由表維護(hù)的效率。
圖1是本發(fā)明所述方法實(shí)施例流程圖;圖2是本發(fā)明所述裝置實(shí)施例框圖;圖3是本發(fā)明所述裝置的應(yīng)用環(huán)境示意圖。
具體實(shí)施例方式為更好地理解本發(fā)明,下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。
本發(fā)明所述的方法應(yīng)用于包括RIP路由表、內(nèi)核IP路由表、內(nèi)核UDP模塊和內(nèi)核IP模塊的路由器。本發(fā)明所述的方法在具體應(yīng)用時(shí),首先路由器啟動(dòng),然后輸出請(qǐng)求完整路由表的請(qǐng)求給所有鄰居路由器,并同時(shí)啟動(dòng)周期更新定時(shí)器啟動(dòng)接收進(jìn)程等待別的鄰居路由器發(fā)送的RIP請(qǐng)求包或RIP響應(yīng)包;若周期更新定時(shí)器到時(shí),發(fā)送周期更新RIP路由表的消息;若接收進(jìn)程接收到別人發(fā)來的RIP包,分請(qǐng)求和響應(yīng)進(jìn)行相應(yīng)處理,若是請(qǐng)求,則查看路由表有否相應(yīng)路由條目,然后發(fā)送響應(yīng)包;若是響應(yīng),則察看路由表,看是否有相應(yīng)條目,如果沒有直接把該路由條目加入路由表,有則按協(xié)議原則進(jìn)行加、刪處理,然后,根據(jù)路由表是否發(fā)生變化而激活觸發(fā)更新。
具體說,本發(fā)明包括四個(gè)步驟,參考圖1。在步驟1執(zhí)行RIP輸入處理操作。包括對(duì)請(qǐng)求幀的處理和對(duì)響應(yīng)幀的處理。最近性本步驟的輸入處理線程進(jìn)入無限循環(huán)監(jiān)聽插口,接收RIP包,然后根據(jù)命令域的值進(jìn)行RIP包的響應(yīng)或請(qǐng)求處理,子模塊處理完返回后,接著等待接收下一個(gè)RIP包。
所述對(duì)接收的RIP包進(jìn)行請(qǐng)求處理是逐條項(xiàng)目處理的,沒有條目就不給予響應(yīng)。有一個(gè)特殊情況,假如請(qǐng)求中正好只有一條條目,并且它的目的前綴為0,前綴長(zhǎng)度也為0,度量為無窮。這是一個(gè)請(qǐng)求發(fā)送全部路由表的請(qǐng)求。此時(shí),要求輸出把路由表送至請(qǐng)求地址/端口。其它的請(qǐng)求處理是逐個(gè)地檢查請(qǐng)求幀的RTE表,對(duì)每條條目,在路由器的路由數(shù)據(jù)庫中查找這個(gè)目的地址,假如存在一條路由,把那條路由的度量加入該RTE的度量中。假如沒有到指定的目的站的路由,度量域中放無窮。當(dāng)所由條目都填好后,把命令改為響應(yīng)并把數(shù)據(jù)報(bào)發(fā)回請(qǐng)求者。
在響應(yīng)指定的和全部路由表請(qǐng)求時(shí),對(duì)度量的處理有所不同。假如請(qǐng)求要完整的路由表,進(jìn)行正常輸出,包括視野分離。假如只要求指定的條目的話,在路由表中找到它們并將信息原樣發(fā)回,不進(jìn)行視野分離的處理。作這一區(qū)別的原因是認(rèn)為這些請(qǐng)求有可能用于不同目的。當(dāng)一個(gè)路由器新加入時(shí),它在每個(gè)相連的網(wǎng)絡(luò)上多播要求發(fā)送整個(gè)的路由表的請(qǐng)求,對(duì)這種請(qǐng)求的響應(yīng)將用于更新請(qǐng)求者的路由表,因此必須進(jìn)行視野分離,而認(rèn)為對(duì)具體路由的請(qǐng)求只是由診斷軟件發(fā)出的,并且其響應(yīng)不用于更新內(nèi)核路由表,此時(shí),請(qǐng)求者想知道路由表的準(zhǔn)確內(nèi)容而不希望信息被隱藏或修改,因此,此時(shí)不用視野分離。
在所述對(duì)接收的RIP包進(jìn)行響應(yīng)處理時(shí),不管響應(yīng)是因何產(chǎn)生的,處理都相同。因?yàn)閷?duì)響應(yīng)的處理會(huì)更新路由器的路由表,所以必須仔細(xì)檢查響應(yīng)的有效性,忽視不是來自RIPng(next generationRIP,下一個(gè)產(chǎn)生RIP的端口)端口或數(shù)據(jù)報(bào)的源非本地環(huán)地址或存活時(shí)間非最大值的RIP包和路由器自己發(fā)的多播數(shù)據(jù)。
當(dāng)整個(gè)數(shù)據(jù)報(bào)有效時(shí),逐個(gè)地處理響應(yīng)中的條目。由于要支持下一跳條目的處理,所以先要察看條目是否是下一跳條目。若是下一跳條目,則把網(wǎng)關(guān)設(shè)成相應(yīng)值;若是路由條目,開始有效性檢查。基本的有效性檢查如下——目的前綴是有效的(例如不是廣播前綴,也不是本地環(huán)地址)。
——前綴是否有效(即在0至128間)。
——度量是否有效(即在1至16間)。
只要任一項(xiàng)出錯(cuò),忽視該條目,接著處理下一條目。
當(dāng)該項(xiàng)目證明有效時(shí),更新其度量,加上接收到該消息的網(wǎng)絡(luò)的花費(fèi)。假如結(jié)果大于無窮,使用無窮大更新度量。即度量=MIN(度量+花費(fèi),無窮)。
察看是否有一條到這個(gè)目地前綴的明確路由,假如沒有這樣的路由,把該路由加入路由表中,除非其度量為無窮。往路由表中填加路由包括以下步驟——把目的前綴和長(zhǎng)度設(shè)置為RTE的相應(yīng)域里的數(shù)據(jù)。
——把度量設(shè)置為數(shù)據(jù)報(bào)的原路由器地址或由下一條目指定的下一跳地址。
——為該路由器初始化超時(shí)定時(shí)器。假如垃圾回收定時(shí)器正為該路由運(yùn)行,則中止。
——設(shè)置路由變化標(biāo)志同時(shí)輸出觸發(fā)更新。
假如有一條先存的路由,比較下一跳地址和數(shù)據(jù)報(bào)來源路由器的地址。假如這個(gè)數(shù)據(jù)報(bào)來自于和現(xiàn)存路由相同的路由器,重新初始化超時(shí)定時(shí)器。
然后比較度量。假如新度量小于無窮且不等于舊度量,采取下列措施接受來自數(shù)據(jù)報(bào)的路由,以及設(shè)置路由器變化標(biāo)志并通知輸出觸發(fā)更新,否則,假如新度量是無窮,開始刪除處理;如果新度量和舊度量相同直接處理下一條目。
任何沒能通過上述檢測(cè)的項(xiàng)目都被忽略,因?yàn)樗⒉槐犬?dāng)前路徑好。
在本步驟中,不但要通過路由操作模塊提供的接口增刪路由,對(duì)請(qǐng)求報(bào)文的響應(yīng)和對(duì)觸發(fā)更新的處理還會(huì)導(dǎo)致輸出處理。由于在響應(yīng)處理中考慮到了下一跳條目的處理,因此本發(fā)明的方法能接收外部路由;在響應(yīng)處理后馬上進(jìn)行觸發(fā)更新處理,即可有效抑制路由循環(huán)的可能又不會(huì)有每更新一路由就發(fā)一個(gè)觸發(fā)更新所造成的巨大的網(wǎng)絡(luò)負(fù)荷。
在本步驟中,還需要建立RIP包的結(jié)構(gòu),用于建立RIP包,所述結(jié)構(gòu)包括下述字段命令用于標(biāo)識(shí)RIP包的種類;版本號(hào)用于標(biāo)識(shí)RIP協(xié)議的版本號(hào);路由條目用于標(biāo)識(shí)路由信息。
建立路由條目表的結(jié)構(gòu),該結(jié)構(gòu)包括下述字段目的前綴用于標(biāo)識(shí)數(shù)據(jù)包的目的地址;
路由標(biāo)簽用于標(biāo)識(shí)內(nèi)部或外部路由;前綴長(zhǎng)度用于標(biāo)識(shí)目的前綴的二進(jìn)制位數(shù);路由度量用于標(biāo)識(shí)本路由器到目的地路由器所經(jīng)過的路由器的個(gè)數(shù)。
建立路由表的結(jié)構(gòu),所述結(jié)構(gòu)包括下述字段下一條目用于指示下一個(gè)路由條目;路由條目用于存儲(chǔ)本條路由條目;網(wǎng)關(guān)地址用于存儲(chǔ)與路由器連接的網(wǎng)關(guān)地址;內(nèi)核標(biāo)志用于標(biāo)識(shí)內(nèi)核路由表;RIP標(biāo)志用于標(biāo)識(shí)RIP路由表;時(shí)間用于標(biāo)識(shí)路由表?xiàng)l目的更新時(shí)間;接口用于標(biāo)識(shí)獲得路由表的接口。
在步驟2進(jìn)行RIP輸出處理。觸發(fā)更新,周期更新,對(duì)請(qǐng)求幀的響應(yīng)都需輸出處理。其中觸發(fā)更新和對(duì)請(qǐng)求幀的響應(yīng)是輸入處理導(dǎo)致的。該步驟主要包括三個(gè)子過程,一個(gè)用于建立包,一個(gè)用于輸出包,一個(gè)用于生成請(qǐng)求幀。
建包子過程需兩個(gè)輸入?yún)?shù)輸出接口和標(biāo)志,所述標(biāo)志用于指明需發(fā)送觸發(fā)更新還是周期更新,所述輸出接口用于指明向哪個(gè)接口輸出RIP包。建立符合協(xié)議的包格式,應(yīng)設(shè)置版本號(hào)為當(dāng)前RIPng的版本,把命令域設(shè)置成響應(yīng),把零域設(shè)置成零。再開始填RTE。記住數(shù)據(jù)報(bào)的最大長(zhǎng)度受到網(wǎng)絡(luò)的MTU(最大傳輸單元)限制。當(dāng)數(shù)據(jù)報(bào)中沒有更多的空間時(shí),發(fā)送當(dāng)前響應(yīng),然后再開始一個(gè)新的響應(yīng)。填寫RTE時(shí),檢查路由表中每條路由,如果產(chǎn)生一個(gè)觸發(fā)更新,只須包含那些設(shè)置了路由變化標(biāo)志的路由;如果經(jīng)視野分離處理后,不應(yīng)包含該路由,就忽略它;如果須包含該路由,往RTE中填寫目的前綴,前綴長(zhǎng)度和度量。即使路由的度量為無窮也需包含在數(shù)據(jù)報(bào)中。
請(qǐng)求幀的生成無需輸入?yún)?shù),只需生成一個(gè)只有一個(gè)前綴為零,前綴長(zhǎng)度為零,度量為無窮的條目的RIP包。
輸出子過程包括四個(gè)輸入?yún)?shù)(目的地,RIP包,包長(zhǎng),輸出接口),上述建立的RIP包通過該子過程根據(jù)需要將所述RIP包通過指定的接口發(fā)出。
在本步驟中還包括建立RIP接口表的結(jié)構(gòu),用于按鏈表的形式組織RIP接口表。所述結(jié)構(gòu)包括下述字段名稱1用于標(biāo)識(shí)接口的名稱;名稱2用于標(biāo)識(shí)與本條目描述的接口相臨的下一個(gè)接口名稱;索引用于標(biāo)識(shí)接口查詢索引值;最大傳輸單元用于標(biāo)識(shí)接口的最大傳輸單元;度量用于標(biāo)識(shí)接口的度量值;標(biāo)志用于標(biāo)識(shí)接口的狀態(tài);多播地址用于標(biāo)識(shí)接口的多播地址;鏈路地址用于標(biāo)識(shí)接口鏈路本地地址;多播標(biāo)志用于標(biāo)識(shí)接口是否參加多播組。
在步驟3,對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù)。由于在路由器的操作中主要包括三種查路由表,添加路由,刪除路由,為了更好地域內(nèi)核保持一致和以后能更好的與其它路由協(xié)議共存,在該步驟中,每當(dāng)一個(gè)路由協(xié)議改變一條路由時(shí),都通知其它路由協(xié)議和內(nèi)核,從而使所有路由協(xié)議模塊之間對(duì)所有路由達(dá)成共識(shí)。
當(dāng)一新的路由協(xié)議模塊加入時(shí),先進(jìn)行協(xié)議注冊(cè),注冊(cè)時(shí)指明自己的協(xié)議名稱和優(yōu)先級(jí),然后向其返回一個(gè)路由操作函數(shù),當(dāng)協(xié)議模塊增加和刪除一條路由時(shí)都調(diào)用該函數(shù)。路由協(xié)議模塊調(diào)用該函數(shù)添加路由時(shí),將協(xié)議模塊添加的路由和路由協(xié)議優(yōu)先級(jí)記錄到自己維護(hù)的一路由信息庫中,然后根據(jù)到同一目的的各路由的協(xié)議優(yōu)先級(jí)和度量及生存時(shí)間等因素綜合考慮的結(jié)果決定把哪條路由加入內(nèi)核路由表,同時(shí)把它通知給其它路由協(xié)議模塊。路由協(xié)議模塊調(diào)用該函數(shù)刪除路由時(shí),需要?jiǎng)h除自己路由信息庫和內(nèi)核路由表中的該路由條目,同時(shí)查找?guī)熘惺欠裼械酵荒康牡穆酚桑粲?,則將其加入內(nèi)核路由表同時(shí)通知其它路由模塊。
在步驟4,定時(shí)對(duì)路由表進(jìn)行周期更新,路由表中的每條路由各設(shè)有兩個(gè)定時(shí)器一個(gè)超時(shí)定時(shí)器,一個(gè)垃圾回收定時(shí)器。超時(shí)定時(shí)器在路由建立時(shí)及每當(dāng)收到該路由更新消息時(shí)啟動(dòng),超時(shí)定時(shí)器溢出時(shí),該路由被標(biāo)示為無效,同時(shí)啟動(dòng)垃圾回收定時(shí)器。當(dāng)垃圾回收定時(shí)器溢出時(shí),標(biāo)示為無效的路由才從路由表中刪除。
在步驟5,當(dāng)接口新啟動(dòng)時(shí),廣播路由表請(qǐng)求。
圖3是本發(fā)明所述裝置的應(yīng)用環(huán)境示意圖。按照?qǐng)D3,本發(fā)明所述裝置1應(yīng)用于包括RIP路由表2、內(nèi)核IP路由表3、內(nèi)核UDP模塊4和內(nèi)核IP模塊5的路由器,用于維護(hù)所述RIP路由表2。
圖2是本發(fā)明所述裝置實(shí)施例框圖。圖2所述的維護(hù)路由表的裝置1,包括輸入處理模塊15接收RIP數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的命令域?qū)λ鰯?shù)據(jù)包進(jìn)行請(qǐng)求處理或響應(yīng)處理。該模塊包括請(qǐng)求處理子模塊151用于對(duì)請(qǐng)求幀的RTE(路由條目)列表中的每一條目進(jìn)行處理;響應(yīng)處理子模塊152用于對(duì)響應(yīng)中的下一跳條目和路由條目進(jìn)行處理。
輸出處理模塊14用于根據(jù)所述接收的RIP包,建立RIP請(qǐng)求包和觸發(fā)更新/周期更新RIP包,根據(jù)需要將所述建立的RIP包通過指定的接口發(fā)出。該模塊包括建立子模塊141用于建立RIP包;生成子模塊142用于建立RIP請(qǐng)求包;輸出子模塊143用于輸出上述建立的RIP包。
路由操作模塊12用于查詢RIP路由表,以及向所述RIP路由表中添加路由和刪除無效路由;該模塊包括查表子模塊121用于查詢RIP路由表;添加子模塊122用于向所述RIP路由表中添加路由;刪除子模塊123用于從所述RIP路由表中刪除無效路由。
路由增強(qiáng)模塊13用于對(duì)對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù);定時(shí)器處理模塊11用于定時(shí)對(duì)路由表進(jìn)行周期更新。
應(yīng)用本發(fā)明所述的維護(hù)路由表的裝置進(jìn)行路由表的維護(hù)時(shí)當(dāng)路由器接收到鄰居發(fā)來的響應(yīng)包時(shí),先調(diào)用查表子模塊121察看路由表看是否有相應(yīng)條目,沒有的話調(diào)用添加子模塊122把它加入路由表,有的話則根據(jù)新舊路由的網(wǎng)關(guān)是否相同,分兩種情況處理一種是新路由的網(wǎng)關(guān)和舊路由的不同時(shí),若新度量更小,調(diào)用刪除子模塊123刪除路由表中的路由,再調(diào)用添加子模塊122把新路由加入路由表;否則,不動(dòng);兩一種是來自相同網(wǎng)關(guān),只要度量發(fā)生變化,就改變度量設(shè)置,否則,只更新更新時(shí)間就可。
定時(shí)器處理線程無限循環(huán)調(diào)用查表子模塊121查看路由表中各路由條目的生存時(shí)間,當(dāng)路由表中路由生存時(shí)間超時(shí)需要?jiǎng)h除時(shí),調(diào)用刪除子模塊123刪除。
權(quán)利要求
1.一種維護(hù)路由表的方法,包括(1)接收RIP數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的命令域?qū)λ鰯?shù)據(jù)包進(jìn)行請(qǐng)求處理或響應(yīng)處理;(2)建立RIP請(qǐng)求包和觸發(fā)更新/周期更新RIP包,根據(jù)需要將所述RIP包通過指定的接口發(fā)出;(3)對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù);(4)定時(shí)發(fā)送周期更新,當(dāng)路由表里路由條目有變化時(shí),發(fā)送觸發(fā)更新;(5)接口新啟動(dòng)時(shí),廣播路由表請(qǐng)求。
2.根據(jù)權(quán)利要求1所述的維護(hù)路由表的方法,其特征在于該方法還包括建立RIP包的結(jié)構(gòu),用于建立RIP包,該結(jié)構(gòu)包括下述字段命令用于標(biāo)識(shí)RIP包的種類;版本號(hào)用于標(biāo)識(shí)RIP協(xié)議的版本號(hào);路由條目用于標(biāo)識(shí)路由信息。
3.根據(jù)權(quán)利要求2所述的維護(hù)路由表的方法,其特征在于該方法還包括建立路由條目表的結(jié)構(gòu),該結(jié)構(gòu)包括下述字段目的前綴用于標(biāo)識(shí)數(shù)據(jù)包的目的地址;路由標(biāo)簽用于標(biāo)識(shí)內(nèi)部或外部路由;前綴長(zhǎng)度用于標(biāo)識(shí)目的前綴的二進(jìn)制位數(shù);路由度量用于標(biāo)識(shí)本路由器到目的地路由器所經(jīng)過的路由器的個(gè)數(shù)。
4.根據(jù)權(quán)利要求1所述的維護(hù)路由表的方法,其特征在于該方法還包括建立路由表的結(jié)構(gòu),所述結(jié)構(gòu)包括下述字段下一條目用于指示下一個(gè)路由條目;路由條目用于存儲(chǔ)本條路由條目;網(wǎng)關(guān)地址用于存儲(chǔ)與路由條目關(guān)聯(lián)的網(wǎng)關(guān)地址;內(nèi)核標(biāo)志用于內(nèi)核路由表中相應(yīng)條目的標(biāo)志;RIP標(biāo)志用于RIP路由表中相應(yīng)條目的標(biāo)志;時(shí)間用于標(biāo)識(shí)路由表?xiàng)l目的更新時(shí)間;接口用于標(biāo)識(shí)獲得本路由條目的接口。
5.根據(jù)權(quán)利要求1所述的維護(hù)路由表的方法,其特征在于該方法還包括建立RIP接口表的結(jié)構(gòu),所述結(jié)構(gòu)包括下述字段名稱1用于標(biāo)識(shí)接口的名稱;名稱2用于標(biāo)識(shí)與本條目描述的接口相鄰的下一個(gè)接口名稱;索引用于標(biāo)識(shí)接口查詢索引值;最大傳輸單元用于標(biāo)識(shí)接口的最大傳輸單元;度量用于標(biāo)識(shí)接口的度量值;標(biāo)志用于標(biāo)識(shí)接口狀態(tài);多播地址用于標(biāo)識(shí)接口的多播地址;鏈路地址用于標(biāo)識(shí)接口鏈路本地地址;多播標(biāo)志用于標(biāo)識(shí)接口是否參加多播組。
6.根據(jù)權(quán)利要求1所述的維護(hù)路由表的方法,其特征在于所述步驟(3)進(jìn)一步包括當(dāng)路由協(xié)議模塊調(diào)用所述操作函數(shù)添加路由時(shí),把協(xié)議模塊添加的路由和路由協(xié)議優(yōu)先級(jí)記錄到自己維護(hù)的路由信息庫中,然后根據(jù)到同一目的的各路由的協(xié)議優(yōu)先級(jí)和度量及生存時(shí)間等因素決定把哪條路由加入內(nèi)核路由表,同時(shí)通知給其它路由協(xié)議模塊;當(dāng)路由協(xié)議模塊調(diào)用所述操作函數(shù)刪除路由時(shí),刪除自己路由信息庫和內(nèi)核路由表中該路由條目,同時(shí)查找?guī)熘惺欠裼械酵荒康牡穆酚桑粲?,則將其加入內(nèi)核路由表同時(shí)通知其它路由模塊。
7.一種維護(hù)路由表的裝置,包括輸入處理模塊接收RIP數(shù)據(jù)包,根據(jù)所述數(shù)據(jù)包的命令域?qū)λ鰯?shù)據(jù)包進(jìn)行請(qǐng)求處理或響應(yīng)處理;輸出處理模塊用于根據(jù)所述接收的RIP包,建立RIP請(qǐng)求包和觸發(fā)更新/周期更新RIP包,根據(jù)需要將所述建立的RIP包通過指定的接口發(fā)出;路由操作模塊用于查詢RIP路由表,以及向所述RIP路由表中添加路由和刪除無效路由;路由增強(qiáng)模塊用于對(duì)對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù);定時(shí)器處理模塊用于維護(hù)路由表和觸發(fā)周期更新。
8.根據(jù)權(quán)利要求7所述的維護(hù)路由表的裝置,其特征在于所述輸入處理模塊包括請(qǐng)求處理子模塊用于對(duì)請(qǐng)求幀的RTE(路由條目)列表中的每一條目進(jìn)行處理;響應(yīng)處理子模塊用于對(duì)響應(yīng)中的下一跳條目和路由條目進(jìn)行處理。
9.根據(jù)權(quán)利要求7所述的維護(hù)路由表的裝置,其特征在于所述輸出處理模塊包括建立子模塊用于建立RIP包;請(qǐng)求生成子模塊用于建立RIP請(qǐng)求包;輸出子模塊用于輸出上述建立的RIP包。
10.根據(jù)權(quán)利要求7所述的維護(hù)路由表的裝置,其特征在于所述路由操作模塊包括查表子模塊用于查詢RIP路由表;添加子模塊用于向所述RIP路由表中添加路由;刪除子模塊用于從所述RIP路由表中刪除無效路由。
全文摘要
本發(fā)明公開了一種維護(hù)路由表的方法,所述方法按照專門設(shè)計(jì)的RIP接口表的結(jié)構(gòu)存儲(chǔ)RIP接口表,使RIP接口表和路由表與內(nèi)核相互獨(dú)立,當(dāng)一個(gè)新的路由消息到達(dá)時(shí),RIP可以更新其路由表并將這一變動(dòng)裝載到內(nèi)核路由表中,同時(shí)通知其他路由協(xié)議模塊;同時(shí),所述方法對(duì)新加入的路由協(xié)議模塊進(jìn)行注冊(cè),并為其提供在路由表中增加和刪除路由的操作函數(shù),這樣使RIP發(fā)送的更新消息能準(zhǔn)確地反映現(xiàn)有的選路表狀況,且易于其它路由協(xié)議模塊的添加;本發(fā)明還采用了獨(dú)立設(shè)計(jì)的RIP接口表和路由表,使RIP接口表和路由表可以采用鏈表形式進(jìn)行管理,適合于管理較多的路由條目,提高路由表維護(hù)的效率。本發(fā)明同時(shí)還公開了一種維護(hù)路由表的裝置。
文檔編號(hào)H04L12/24GK1334666SQ0113067
公開日2002年2月6日 申請(qǐng)日期2001年8月17日 優(yōu)先權(quán)日2001年8月17日
發(fā)明者張宏科, 盧小青 申請(qǐng)人:北京佳訊飛鴻網(wǎng)絡(luò)技術(shù)有限公司