專(zhuān)利名稱(chēng)::對(duì)路由表進(jìn)行空間管理的方法、裝置、交換機(jī)及路由器的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)通信技術(shù),尤其涉及一種能夠提高路由表查找速度的對(duì)路由表進(jìn)行空間管理的方法及裝置。
背景技術(shù):
:目前,因特網(wǎng)中的某一主機(jī)訪(fǎng)問(wèn)另一主機(jī)時(shí),路由器或三層交換機(jī)根據(jù)目的因特網(wǎng)協(xié)議(InternetProtocol,IP)地址查找路由表,路由到目的主機(jī)。路由表是路由器或者其他互聯(lián)網(wǎng)網(wǎng)絡(luò)設(shè)備(三層交換機(jī))上存儲(chǔ)的表,換句話(huà)說(shuō),路由表是一整塊存放路由信息的連續(xù)空間,其中,每一條路由信息被稱(chēng)作一條路由表項(xiàng)。該表中存有到達(dá)特定網(wǎng)絡(luò)終端的路徑?,F(xiàn)有技術(shù)中,當(dāng)路由表需要寫(xiě)入一條表項(xiàng)的時(shí)候,給其分配哪一塊的空間,寫(xiě)入到路由表的哪一個(gè)位置,是由這個(gè)路由表的空間管理單元來(lái)決定的。各種路由器、三層交換機(jī)上有各種不同的路由空間管理方法。比如最早由Srinvasan提出的leafpushing的技術(shù),使用二分支trie樹(shù),通過(guò)一個(gè)復(fù)雜的算法來(lái)完成路由空間的管理以及查找。很多基于這種方法改進(jìn)的空間管理方法都具有一個(gè)特點(diǎn)就是,使用了樹(shù)形的擴(kuò)展。所有的這些路由表的存放方法的目的均是在保證路由空間可以存放一定條目數(shù)的路由表項(xiàng)的情況下,加快添加、刪除路由表項(xiàng)以及最長(zhǎng)前綴匹配的速度。通過(guò)上述方法獲得的最簡(jiǎn)單的路由表模型如圖1所示。其中,表項(xiàng)1、表項(xiàng)2.....表項(xiàng)N的掩碼長(zhǎng)度與表項(xiàng)的順序排列無(wú)關(guān)。查找路由表時(shí),路由器或三層交換機(jī)通過(guò)最長(zhǎng)前綴匹配(Longestprefixmatch)算法選擇路由入口,即,逐表項(xiàng)與目的IP地址進(jìn)行匹配,從匹配的表項(xiàng)中選擇掩碼長(zhǎng)度最長(zhǎng)的表項(xiàng)作為路由入口。掩碼長(zhǎng)度是指子網(wǎng)掩碼(前綴)中,左邊連續(xù)的二進(jìn)制數(shù)字1的個(gè)數(shù)。比如子網(wǎng)掩碼255.0.0.0二進(jìn)制為11111111000000000000000000000000,則掩碼長(zhǎng)度為8;子網(wǎng)掩碼255.255.0.0二進(jìn)制為11111111111111111111111100000000,則掩碼長(zhǎng)度為24。如圖2所示,假設(shè)計(jì)算機(jī)23要訪(fǎng)問(wèn)IP地址為10.0.2.2的計(jì)算機(jī)21,路由器/三層交換機(jī)24最終要將其匹配到路由表中的第二條表項(xiàng),通過(guò)網(wǎng)絡(luò)B來(lái)訪(fǎng)問(wèn)計(jì)算機(jī)21。這是由于要訪(fǎng)問(wèn)的IP地址10.0.2.2與子網(wǎng)掩碼255.255.255.0相與后,和目的網(wǎng)絡(luò)地址10.0.2.0相等,且掩碼長(zhǎng)度最長(zhǎng)(24位)。同理訪(fǎng)問(wèn)IP地址為10.0.3.2的計(jì)算機(jī)22,必須要匹配到路由表的第三條表項(xiàng),從而通過(guò)網(wǎng)絡(luò)C來(lái)訪(fǎng)問(wèn)計(jì)算機(jī)22。由于路由表中的各表項(xiàng)掩碼長(zhǎng)度與路由表中表項(xiàng)順序無(wú)關(guān),因此,路由器或三層交換機(jī)查找匹配的表項(xiàng)時(shí),要么通過(guò)對(duì)所有路由表中所有的表項(xiàng)進(jìn)行匹配,最后確定掩碼長(zhǎng)度最長(zhǎng)且匹配的表項(xiàng),導(dǎo)致路由表查找效率受到限制,無(wú)法進(jìn)一步提高;要么路由表中的表項(xiàng)以樹(shù)形方式管理,雖然樹(shù)形管理方式使得路由器或三層交換機(jī)僅匹配其中一個(gè)分支便可獲得查找結(jié)果,但是,使用樹(shù)形管理方式的路由表往往出現(xiàn)重復(fù)存放同一表項(xiàng)的問(wèn)題,導(dǎo)致路由表得不到充分合理的利用。
發(fā)明內(nèi)容本發(fā)明的目的在于提出一種對(duì)路由表進(jìn)行空間管理的方法、裝置、交換機(jī)及路由器,以在提高路由表空間利用率的同時(shí),進(jìn)一步提高表項(xiàng)查找速度。為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種對(duì)路由表進(jìn)行空間管理的方法,包括計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;遍歷空間管理鏈表中的空間管理單元;所述空間管理鏈表中,各空間管理單元與掩碼長(zhǎng)度——對(duì)應(yīng),管理與對(duì)應(yīng)的掩碼長(zhǎng)度相同的表項(xiàng);所述各空間管理單元按照對(duì)應(yīng)的掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent;獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)。為實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種對(duì)路由表進(jìn)行空間管理的裝置,包括計(jì)算單元,用于計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;空間管理鏈表,用于存儲(chǔ)空間管理單元,所述空間管理鏈表中,各空間管理單元之間與掩碼長(zhǎng)度——對(duì)應(yīng),存儲(chǔ)的表項(xiàng)與對(duì)應(yīng)的掩碼長(zhǎng)度相同;所述各空間管理單元按照掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent.,遍歷單元,用于遍歷所述空間管理鏈表中的空間管理單元;獲取單元,用于獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元;插入單元,用于根據(jù)所述獲取單元獲取的空間管理單元,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)。為實(shí)現(xiàn)上述目的,本發(fā)明還提供了一種包括上述對(duì)路由表進(jìn)行空間管理的裝置的三層交換機(jī)及路由器。上述技術(shù)方案中,三層交換機(jī)或路由器通過(guò)空間管理鏈表中的空間管理單元對(duì)路由表空間進(jìn)行分配管理,使得插入路由表中的表項(xiàng)依照掩碼(前綴)長(zhǎng)度由長(zhǎng)至短的順序進(jìn)行排列,保證了最長(zhǎng)前綴匹配一開(kāi)始便可匹配到最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),避免了同一表項(xiàng)在路由表中的重復(fù)存放,以及對(duì)路由表中的所有表項(xiàng)進(jìn)行匹配后才能獲得最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),大大提高了路由表查找速度;同時(shí)路由表中的表項(xiàng)按照一定順序排列也有利于表項(xiàng)的快速插入和刪除,大大提高了路由表的空間利用率。下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。圖1為現(xiàn)有技術(shù)中的路由表模型即表項(xiàng)存放結(jié)構(gòu)示意圖;圖2為因特網(wǎng)結(jié)構(gòu)示意圖;圖3為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例中1pm—state—list的結(jié)構(gòu)示意圖;圖4為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例一的流程圖;圖5為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例二的流程圖;圖6為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例中空間調(diào)整的流程圖;圖7為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例中刪除表項(xiàng)的流程圖;圖8為本發(fā)明對(duì)路由表進(jìn)行空間管理的裝置實(shí)施例的結(jié)構(gòu)示意圖。具體實(shí)施方式為了管理這一塊路由表,可以通過(guò)一個(gè)空間管理單元(lpm—state)數(shù)組即空間管理鏈表來(lái)記錄每個(gè)掩碼(前綴)長(zhǎng)度對(duì)路由表的使用情況,即按掩碼長(zhǎng)度將表項(xiàng)存放在路由表中。這個(gè)數(shù)組的長(zhǎng)度可為34,即每一個(gè)IPV4掩碼(前綴)長(zhǎng)度占用一個(gè)為1pm—state,即,每一個(gè)lpm—state都對(duì)應(yīng)一個(gè)掩碼(前綴)長(zhǎng)度,而IPV4掩碼(前綴)長(zhǎng)度從0~32,對(duì)應(yīng)lpm-state[O]~lpm_state[32],共占33個(gè)lpm—state,再加上一個(gè)用于管理的lpm_state[33],總共占34個(gè)lpm—stat6。每一個(gè)lpm-state可記錄如下的信息start當(dāng)前l(fā)pm—state對(duì)應(yīng)的掩碼(前綴)長(zhǎng)度記錄的路由表項(xiàng)在3各由表中的開(kāi)始地址;end當(dāng)前l(fā)pm-state對(duì)應(yīng)的掩碼(前綴)長(zhǎng)度記錄的路由表項(xiàng)在路由表中的結(jié)束地址;prev前一個(gè)lpm-state對(duì)應(yīng)的掩碼長(zhǎng)度;next后一個(gè)lpm—state對(duì)應(yīng)的掩碼長(zhǎng)度;vent3各由表中此lpm-state對(duì)應(yīng)的掩碼長(zhǎng)度的路由表項(xiàng)的個(gè)數(shù);fent此lpm-state名下的空閑空間,即此lpm—state管理的空間還可以寫(xiě)入表項(xiàng)的個(gè)數(shù)。整個(gè)的空間管理單元的數(shù)組(lpm-state-array)邏輯上可以看作是一條雙向鏈表(lpm—state—list)。整個(gè)lpm—state—list的結(jié)構(gòu)如圖3所示,最后一個(gè)空間單元lpm—state[33]為頭節(jié)點(diǎn)。而lpm_state-list的每一個(gè)節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)在lpm-state-array中的索引被記錄在Next中,前一個(gè)節(jié)點(diǎn)在lpm_state—array中的索引凈皮i己錄在prev中。而力口果Next'或者prev的l直為-1,那么就it明沒(méi)有下一個(gè)或者前一個(gè)節(jié)點(diǎn)。這個(gè)lpm-state-list記錄了空間管理單元的數(shù)組中的有效部分,而且1pm_state_1ist中的空間管理單元都必須按照掩碼長(zhǎng)度來(lái)排序。系統(tǒng)初始化時(shí),對(duì)所有對(duì)應(yīng)于掩碼長(zhǎng)度的1pm-state中的凄t據(jù)進(jìn)4亍如下賦值Start=-l;End=_1;Prev=-1;Next=-lVent=0;Fent=0。對(duì)用于管理的空間管理單元lpm-state[33]的數(shù)據(jù)進(jìn)行如下賦值Start=-1;End=_1;Prev=-1;Next=-1;Vent=0;Fent=4096(路由表的最大容量)。系統(tǒng)初始化后,這條lpm—state—list只有一個(gè)節(jié)點(diǎn)lpm-state[33]。由于lpm_state[33]初始化的值的Fent為4096,所以在邏輯上所有的^各由表的空間可以被看作都被這一個(gè)lpm-state占有。本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例包括計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;遍歷空間管理鏈表中的空間管理單元;所述空間管理鏈表中,各空間管理單元之間與掩碼長(zhǎng)度——對(duì)應(yīng),存儲(chǔ)的表項(xiàng)與對(duì)應(yīng)的掩碼長(zhǎng)度相同;所述各空間管理單元按照掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent;獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,并確定所述待插入表項(xiàng)在獲取的空間管理單元中的存放位置,插入所述待插入表項(xiàng)。本實(shí)施例中,路由表通過(guò)空間管理鏈表中的空間管理單元對(duì)空間進(jìn)行分配管理,使得插入路由表中的表項(xiàng)依照掩碼(前綴)長(zhǎng)度由長(zhǎng)至短的順序進(jìn)行排列,并且,使用本實(shí)施例方法,所有根據(jù)這個(gè)空間管理鏈表的插入和刪除表項(xiàng)操作都不能破壞路由表的有序性,保證了最長(zhǎng)前綴匹配一開(kāi)始便可匹配到最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),避免了對(duì)路由表中的所有表項(xiàng)進(jìn)行匹配后才能獲得最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),大大提高了路由表查找速度;同時(shí)路由表中的表項(xiàng)按照一定順序排列也有利于表項(xiàng)的快速插入和刪除,大大提高了路由表的空間利用率。圖4為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例一的流程圖,包括步驟41、計(jì)算并獲取待插入表項(xiàng)的掩碼長(zhǎng)度LENGTH;步驟42、在1pm—state—list中查找對(duì)應(yīng)掩碼(前綴)長(zhǎng)度為L(zhǎng)ENGTH的lpm-state,即lpm—state[LENGTH],判斷l(xiāng)pm_state_list是否存在管理長(zhǎng)度為L(zhǎng)ENGTH表項(xiàng)的lpm_state[LENGTH];如果在lpm_state-list中存在lpm—state[LENGTH],表明已給這個(gè)lpm_state[LENGTH]分配空間,而且已經(jīng)插入至少一個(gè)表項(xiàng)。因此這個(gè)空間管理單元的vent值不為0。只要判斷l(xiāng)pm-state[LENGTH]的vent值是否為0,便可知lpm_state[LENGTH]是否被分配路由表上的空間。如果不為0,說(shuō)明已經(jīng)給其分配路由表上的空間,空間內(nèi)存放有掩碼(前綴)長(zhǎng)度為L(zhǎng)ENGTH的表項(xiàng),只要將待插入表項(xiàng)即新的表項(xiàng)放在后面即可,具體可執(zhí)行步驟44。如果為0,說(shuō)明還沒(méi)有把這個(gè)lpm—state[LENGTH]加入lpm_state—list,同時(shí)也沒(méi)有給其分配路由表上的空間,路由表中沒(méi)有掩碼(前綴)長(zhǎng)度為L(zhǎng)ENGTH的表項(xiàng),需要先把lpm—state[LENGTH]加入lpm—state_list,再分配空間,然后把這個(gè)表項(xiàng)放在lpm_state[LENGTH]管理的空間的第一個(gè)位置,具體可執(zhí)行步驟43。步驟43、將lpm—state[LENGTH]加入lpm—state—list,并且分配空間;遍歷lpm—state-list,找到相鄰的兩個(gè)lpm_state,且其中一個(gè)lpm-state對(duì)應(yīng)的掩碼長(zhǎng)度大于LENGTH,另一個(gè)lpm_state對(duì)應(yīng)的掩碼長(zhǎng)度小于LENGTH,將lpm—state[LENGTH]插入這兩個(gè)lpm—state之間,并修改前一個(gè)節(jié)點(diǎn)的next值、后一個(gè)節(jié)點(diǎn)的prev值,設(shè)置lpm一state[LENGTH]的next和prev值。然后給這個(gè)1pm_state分配路由表的空間。分配空間的準(zhǔn)則可使用二分法,即乂人前一個(gè)lpm-state處獲取其一半的fent空間到自己的名下,這樣可以使得路由空間快速的分配到各個(gè)掩碼長(zhǎng)度上。具體的計(jì)算過(guò)程如下新節(jié)點(diǎn)fent=前一個(gè)節(jié)點(diǎn)的fent/2;新節(jié)點(diǎn)start=前一個(gè)節(jié)點(diǎn)的fent/2+前一個(gè)節(jié)點(diǎn)的end+1;新節(jié)點(diǎn)end=剛剛計(jì)算出來(lái)的新節(jié)點(diǎn)start;前一個(gè)節(jié)點(diǎn)的fent=原先的fent-新節(jié)點(diǎn)的fent;新節(jié)點(diǎn)的prev=前一個(gè)節(jié)點(diǎn)的掩碼長(zhǎng)度;殺斤節(jié)點(diǎn)的next=前一個(gè)節(jié)點(diǎn)的next;前一個(gè)節(jié)點(diǎn)的next=新節(jié)點(diǎn)的掩碼長(zhǎng)度;后一個(gè)節(jié)點(diǎn)的prev=新節(jié)點(diǎn)的掩碼長(zhǎng)度;其余的值均不變。步驟44、確定新表項(xiàng)的插入位置。當(dāng)lpm-state[LENGTH]中的vent為0時(shí),表明lpm_state[LENGTH]為lpm_state—list中新設(shè)置的空間管理單元,則將1pm—state[LENGTH]管理的start空間確定為待插入表項(xiàng)的存力文地址空間;當(dāng)lpm-state[LENGTH]中的vent非0時(shí),表明lpm_state[LENGTH]是lpm—state—list已有的空間管理單元。由于每一個(gè)lpm_state的end值表示當(dāng)前掩碼(前綴)長(zhǎng)度記錄的路由信息在路由信息空間中的結(jié)束索引值,也就是最后一個(gè)表項(xiàng)寫(xiě)入的位置,那么如果還有剩余的空間,即FENT大于O,那么將end+l就是給新表項(xiàng)應(yīng)該在路由表中的位置,即將lpm-state[LENGTH]管理的end+l空間確定為待插入表項(xiàng)的存放地址空間。步驟45、將新表項(xiàng)插入確定的位置,同時(shí)對(duì)于新設(shè)置的lpm-state[LENGTH],其end-start,fent值減l,vent值力口1;對(duì)于已有的lpm-state[LENGTH],其end值加l,fent4直減l,vent寸直加l。此時(shí),完成新表項(xiàng)的存方欠。當(dāng)已有的lpm-state[LENGTH]中的fent值為0時(shí),表明lpm-state[LENGTH]管理的空間已存滿(mǎn)表項(xiàng),此時(shí),還可進(jìn)一步扭j亍步驟46:調(diào)整lpm—state-list中l(wèi)pm—state管理的空間。圖5為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例二的流程圖,本實(shí)施例中,假設(shè)系統(tǒng)初始化后,需要在空的路由表中插入一表項(xiàng)。此時(shí),lpm畫(huà)state—1ist中僅有1pm—state[33]:掩碼(前綴)長(zhǎng)度33start-lend-lnext-1prev-lvent0fent4096此時(shí)若插入一條表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.0.0.0下一跳A〉;具體包括步驟51、計(jì)算獲得其掩碼(前綴)長(zhǎng)度為8;步驟52、將掩碼長(zhǎng)度為8對(duì)應(yīng)的空間管理單元lpm—state[8]插入lpm_state_list,并且分配空間;依照上述實(shí)施例一中分配空間的計(jì)算原則,得到掩碼長(zhǎng)度為8的節(jié)點(diǎn)lpm-state[8]的各個(gè)值fent=4096(前一個(gè)節(jié)點(diǎn)的fent值)/2=2048;start=4096(前一個(gè)節(jié)點(diǎn)的fent值)/2+(-1)(前一個(gè)節(jié)點(diǎn)的end值)+1=2048;end=start=2048;next=-l(前一個(gè)節(jié)點(diǎn)的next值);prev=33(前一個(gè)節(jié)點(diǎn)的掩碼長(zhǎng)度);依照上述的計(jì)算原則,得到掩碼長(zhǎng)度為33的節(jié)點(diǎn)lpm-state[33]的各個(gè)值fent=4096(原先的fent)—2048(新節(jié)點(diǎn)的fent值)=2048;next=8(新節(jié)點(diǎn)的掩碼長(zhǎng)度);經(jīng)過(guò)以上計(jì)算,lpm-state-list中的空間管理單元包括掩碼(前綴)長(zhǎng)度338start-l2048end_12048next4_1prsv-133vsnt00fent20482048步驟53、確定表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.0.0.0下一跳A〉在lpm-state[8]管理空間中的插入位置。由于此節(jié)點(diǎn)lpm—state[8]的fent不為0,所以可以確定表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.0.0.0下一跳A〉的寫(xiě)入位置是end,也即start,路由表中的2048位置;步驟54、將表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.0.0.0下一跳A〉插入路由表中的2048位置,并設(shè)置lpm_state[8]中的:vent=vent+1=0+1=1.,fent=fent-1=2048-1=2047。最后,lpm_state-list的結(jié)果如下掩碼(前綴)長(zhǎng)度338start-12048end-12048next4—1prev-133vent01fent20482047路由表的結(jié)果如下索引目的地址掩碼(前綴)下一跳204810.0.0.0255.0.0.0A假設(shè)再向路由表中寫(xiě)入表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.255.0.0下一跳B(niǎo)〉。由于該表項(xiàng)的掩碼長(zhǎng)度是16,根據(jù)跟上述實(shí)施例一中的算法,成功寫(xiě)入該表項(xiàng)后的lpm-state-list的結(jié)果3口下掩碼(前綴)長(zhǎng)度33168start_110242048end_110242048nsxt84_1prsv_1338vent011fent102410232047寫(xiě)入該表項(xiàng)后的路由表的結(jié)果如下索引目的地址掩碼(前綴)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0,0.0A假設(shè)再向路由表寫(xiě)入表項(xiàng)〈目的地址20.0.0.0掩碼(前綴)255.0.0.0下一跳C〉。由于該表項(xiàng)掩碼長(zhǎng)度為8,且lpm—state-list中已經(jīng)有對(duì)應(yīng)掩碼長(zhǎng)度為8的空間管理單元,因而,不需要插入新節(jié)點(diǎn),只需要確定該表項(xiàng)的寫(xiě)入位置。根據(jù)跟上述實(shí)施例一中的算法,插入該表項(xiàng)后,lpm_state_list的結(jié)果如下<table>tableseeoriginaldocumentpage20</column></row><table>插入該表項(xiàng)后,路由表的結(jié)果如下索引目的地址掩碼(前綴)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0.0.0A204920.0.0.0255.0.0.0C假設(shè)最后寫(xiě)入一個(gè)表項(xiàng)〈目的地址0.0.0.0掩碼(前綴)0.0.0.0下一跳D〉。由于該表項(xiàng)掩碼長(zhǎng)度為0,依照上述實(shí)施例一中的算法,插入該表項(xiàng)后lpm-state—list的結(jié)果如下掩碼(前綴)長(zhǎng)度331680start-1102420483073end-1102420493073next840-1prev-13380vent0121fent1024102310231022插入該表項(xiàng)后路由表的結(jié)果如下索引目的地址掩碼(前綴)下一跳102410.0.0.0255.255.0.0B204810.0.0.0255.0.0.0A204920.0.0,0255.0.0.0C30730.0.0.00.0.0.0Dlpm—state-list是以掩碼長(zhǎng)度排序的鏈表,其中以L(fǎng)PM—STATE[33]為頭節(jié)點(diǎn),確定表項(xiàng)的插入位置時(shí),根據(jù)待插入表項(xiàng)的掩碼長(zhǎng)度遍歷lpm—state—list,能夠維護(hù)lpm_state_list以及路由表中表項(xiàng)的有序性,從而保證了三層交換機(jī)或路由器能夠快速的查找到路由信息。圖6為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例中空間調(diào)整的流程圖。當(dāng)使用上述方法實(shí)施例中的方法向路由表頻繁添加表項(xiàng)時(shí),常常會(huì)發(fā)生某一掩碼長(zhǎng)度對(duì)應(yīng)的lpm_state管理的空間都存放有表項(xiàng)這種情況,但是其他掩碼長(zhǎng)度對(duì)應(yīng)的lpm_state管理的空間還有空閑位置。此時(shí)需要對(duì)空間管理單元及其管理的空間做出調(diào)整,以最大的利用路由表空間。假設(shè)當(dāng)前情況是〔前綴)長(zhǎng)度331680start_1102420483073end-l204730723073next840-1pr6v_13380vent0102410251fent1024001022當(dāng)前掩碼長(zhǎng)度為16的lpm-state和掩碼長(zhǎng)度為8的lpm_state的fent為0,表明lpm-state名下沒(méi)有空閑空間可用。但是,掩碼長(zhǎng)度為33的lpm-state,依舊還有1024個(gè)空閑空間。如果此時(shí)還有掩碼長(zhǎng)度為16或8的表項(xiàng)等待插入時(shí),就會(huì)發(fā)現(xiàn)空間不足,此時(shí)要進(jìn)行表項(xiàng)的調(diào)整,來(lái)保證路由表空間的利用率。調(diào)整lpm-state及其管理的空間主要包括先向前或向后尋找剩余的空間,尋找fent不為0的lpm-state;將此lpm-state的空閑空間,一步一步移動(dòng)至需要空閑空間的lpm_state下。假設(shè)需要插入表項(xiàng)〈目的地址110.0.0.0掩碼(前綴)255.0.0.0下一跳C>,該表項(xiàng)的掩碼長(zhǎng)度為8,而lpm-state-list中掩碼長(zhǎng)度為8的lpm_state的fent值為0,對(duì)lpm_state—list及路由表中的表項(xiàng)進(jìn)4亍調(diào)整的過(guò)程為步驟61、先向前,即向掩碼長(zhǎng)度大于8的方向,查找空閑的空間,發(fā)現(xiàn)lpm—state[33]具有1024個(gè)空閑的空間。步驟62、進(jìn)行表項(xiàng)調(diào)整。先將1pm—state—list中l(wèi)pm_state[33]的fent減去1,再將lpm—state[16]的start減去1,此時(shí)1pm—state[16]實(shí)際擁有1025個(gè)空間,占用了1024個(gè),還空閑了一個(gè)。該空閑空間是/人lpm-state[33]移動(dòng)過(guò)來(lái)的,在路由表中的索引是1023。然后將路由表中的第1024至2047中的表項(xiàng)整體前移一個(gè)位置,此時(shí)lpm-state[16]的start中的表項(xiàng)被復(fù)制到第1023個(gè)表項(xiàng)的位置,lpm-state[16]的end值中的表項(xiàng)被復(fù)制到第2046個(gè)表項(xiàng)的位置,這樣位于路由表的索引2047的位置的空間空閑,同時(shí)把lpm—state[16]的end值減1。得到lpm—state—list:掩碼(前綴)長(zhǎng)度331680start一l102320483073end-l204630723073nsxt840_1prsv_13380vsnt0102410251fent1023101022由于需要插入的表項(xiàng)的掩碼長(zhǎng)度為8,所以還需要繼續(xù)做移動(dòng)調(diào)整。同理,將lpm—state[16]的fent減去1,1pm—state[8]的start也減去1,此時(shí)lpm_state[16]實(shí)際擁有1024個(gè)空間,占用了1024個(gè),沒(méi)有空閑空間。而lpm—state[8]實(shí)際擁有1026個(gè)空間,其中,占用了1025個(gè),另外一個(gè)空間是從lpm—state[16]移動(dòng)過(guò)來(lái)的,在路由表中的索引是2047。然后將路由表中的第2048至3072中的表項(xiàng)整體前移一個(gè)位置,此時(shí)lpm—state[8]的start中的表項(xiàng)^皮復(fù)制到第2047個(gè)表項(xiàng)的位置,lpnustate[8]的end值中的表項(xiàng)被復(fù)制到第3071個(gè)表項(xiàng)的位置,這樣位于路由表的索引3072的位置的空間空閑,同時(shí)把lpm_state[16]的end值減1。得到lpm—state—list:<table>tableseeoriginaldocumentpage23</column></row><table>此時(shí),新的表項(xiàng)就可以順利插入lpm-state[8]獲得的空閑空間,即路由表中3072這個(gè)位置。得到如下最終結(jié)果8020473073307330730-1801026101022掩碼(前綴)長(zhǎng)度3316start_11023end_12047next84prcv-l33V6nt01024fent10230如果向前查找沒(méi)有空閑空間,那么可向后查找,即向掩碼長(zhǎng)度小于8的方向查找。找到空閑空間后的操:作過(guò)程與上述過(guò)程類(lèi)似??臻g的移動(dòng)調(diào)整也可以先向后查找,如果沒(méi)有找到空閑間,再向前查找,方法與上述過(guò)程類(lèi)似。路由表插入表項(xiàng)后,有時(shí)也可能需要?jiǎng)h除其中的表項(xiàng)。圖7為本發(fā)明對(duì)路由表進(jìn)行空間管理的方法實(shí)施例中刪除表項(xiàng)的流程圖。步驟71、刪除一個(gè)表項(xiàng)時(shí),首先要獲取這個(gè)表項(xiàng)的索引值及掩碼長(zhǎng)度。步驟72、根據(jù)索引值可獲知該表項(xiàng)在路由表中的位置,刪除該表項(xiàng)。步驟73、維護(hù)該表項(xiàng)掩碼長(zhǎng)度對(duì)應(yīng)的lpm—state,并將其fent值加l,vent減去1,判斷減1后vent是否為0;如果VENT不為0,執(zhí)行步驟74;如果vent為0,執(zhí)行步驟75。步驟74、把該表項(xiàng)掩碼長(zhǎng)度對(duì)應(yīng)的lpm—state管理的第end位置中存放的表項(xiàng)復(fù)制到已刪除表項(xiàng)的位置,然后將end值減去l,完成刪除操作。步驟75、回收分配給該表項(xiàng)掩碼長(zhǎng)度對(duì)應(yīng)的1pm-state的所有空間,并將回收的全部空間都分配給前一個(gè)lpm-state,/人lpm_state—1ist里面刪除該表項(xiàng)掩碼長(zhǎng)度對(duì)應(yīng)的lpm_state,完成刪除操:作。邗l/沒(méi)當(dāng)lpm-state-list的情況i口下掩碼(前綴)長(zhǎng)度331680start_1102420483073end_1102420493073next840_1prsv_13380vent0121fent1024102310231022前路由表的情況如下:<table>tableseeoriginaldocumentpage25</column></row><table>此時(shí),刪除表項(xiàng)〈目的地址10.0.0.0掩碼(前綴)255.0.0.0下一跳A〉。首先獲取該表項(xiàng)的索引值為2048,掩碼長(zhǎng)度為8。然后刪除路由表中第2048位置存放的表項(xiàng),lpm—state[8]的fent值加1,vent減去l后為0,所以把第2049位置中存放的表項(xiàng)復(fù)制到第2048個(gè)表項(xiàng)的位置,然后將end值減去l,得到的lpm_state_list情況如下<table>tableseeoriginaldocumentpage25</column></row><table>掩碼(前綴)下一跳255.255.0.0B255.0.0.0C0.0.0.0D如果繼續(xù)刪除表項(xiàng)〈目的地址20.0.0.0掩碼(前綴)255.0.0.0下一跳<table>tableseeoriginaldocumentpage25</column></row><table>得到的路由表情況如下索引目的地址102410.0.0.0204820.0.0.030730.0.0.0該表項(xiàng)的索引值為2048,掩碼長(zhǎng)度為8。刪除該表項(xiàng)之后,lpm_state[8]的fent值加1,vent減去1后為0,回收分配給lpm-state[8]的所有的空間。在回收之前的情況如下掩碼(前綴)長(zhǎng)度331680start_1102420483073end_1102420473073nsxt840_1PI"6V-l33800101fent1024102310251022索引目的地址掩碼(前綴)下一跳102410.0.0.0255.255.0.0B30730.0.0.00.0.0.0D回收時(shí),把lpm-state[8]的所有空閑空間,都分配給前一個(gè)lpm_state即lpm_state[16],并且把lpm一state[8]從1pm—state—list里面刪除。并且前一節(jié)點(diǎn)的fent=前一節(jié)點(diǎn)的fent+凈皮回收節(jié)點(diǎn)的fent,本實(shí)施例中,lpm_state[16]的fent=lpm一state[16]的fent+lpm一state[8]的fent?;厥蘸蟮慕Y(jié)果如下掩碼(前綴)長(zhǎng)度33160start_110243073end-l10243073ti6xt80-lprcv-1330vsnt011fent102420481022通過(guò)以上方法實(shí)施例刪除路由表中的路由表項(xiàng)后,空間管理單元記錄的信息和路由表實(shí)際的信息依然相對(duì)應(yīng),從而保證了下一次插入操作能夠查找到正確的插入位置。圖8為本發(fā)明對(duì)路由表進(jìn)行空間管理的裝置實(shí)施例的結(jié)構(gòu)示意圖,對(duì)路由表進(jìn)行空間管理的裝置包括計(jì)算單元81、空間管理鏈表82、遍歷單元83、獲取單元84及插入單元85。計(jì)算單元81用于計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;空間管理鏈表82用于存儲(chǔ)空間管理單元,所述空間管理鏈表82中,各空間管理單元之間與掩碼長(zhǎng)度——對(duì)應(yīng),存儲(chǔ)的表項(xiàng)與對(duì)應(yīng)的掩碼長(zhǎng)度相同;所述各空間管理單元按照掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent;遍歷單元83用于遍歷所述空間管理鏈表82中的空間管理單元;獲取單元84用于獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元;插入單元85用于根據(jù)所述獲取單元84獲取的空間管理單元,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)。插入單元85可包括存放子單元及計(jì)算子單元。存放子單元用于將所述待插入表項(xiàng)存放在加1后的end空間內(nèi);計(jì)算子單元用于將所述獲取的空間管理單元中的end值加1;并將所述獲取的空間管理單元中的vent值加1。對(duì)路由表進(jìn)行空間管理的裝置還可包括設(shè)置單元,用于在所述空間管理鏈表中不存在與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的情況下,在所述空間管理鏈表中設(shè)置所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,分配路由表空間;所述插入單元85還可用于根據(jù)所述設(shè)置單元設(shè)置的空間管理單元確定所述待插入表項(xiàng)的存放位置,插入所述待插入表項(xiàng)。設(shè)置單元可包括查找子單元、分配子單元及維護(hù)子單元。查找子單元用于找到對(duì)應(yīng)的掩碼長(zhǎng)度大于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元;分配子單元用于將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元管理的部分空閑空間分配給待設(shè)置的空間管理單元;維護(hù)子單元,用于將所述待設(shè)置的空間管理單元的start設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元的end+剩余的空閑空間+1;將所述待設(shè)置的空間管理單元的end設(shè)置為與本空間管理單元的start相同的值;將所述待設(shè)置的空間管理單元的prev設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度;將所述待設(shè)置的空間管理單元的next設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中next的值;將所述待設(shè)置的空間管理單元的fent設(shè)置為所述部分空閑空間。所述維護(hù)子單元還可用于將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中的next設(shè)置為所述插入表項(xiàng)的掩碼長(zhǎng)度;所述查找子單元還可用于獲取所述空間管理鏈表中對(duì)應(yīng)的掩碼長(zhǎng)度小于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元;所述維護(hù)子單元還可用于將所述對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元中的prev設(shè)置為所述待插入表項(xiàng)的掩碼長(zhǎng)度。當(dāng)待插入表項(xiàng)掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元新加入空間管理鏈表時(shí),所述插入單元還可用于將所述待插入表項(xiàng)存放在所述待設(shè)置的空間管理單元的start空間內(nèi);所述維護(hù)單元還可用于將所述待設(shè)置的空間管理單元的fent值減1。當(dāng)所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元中無(wú)空閑空間可插入時(shí),對(duì)路由表進(jìn)行空間管理的裝置還可包括空間查找單元及調(diào)整單元。空間查找單元用于在之前或之后的空間管理單元所管理的空間中查找空閑空間;調(diào)整單元用于通過(guò)整體移動(dòng),將具有空閑空間的空間管理單元管理的部分空閑空間,分配給所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元。此時(shí),所述插入單元還可用于將所述待插入表項(xiàng)插入分配的空閑空間內(nèi),并將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的end值加1。所述調(diào)整單元可包括移動(dòng)子單元及維護(hù)子單元。移動(dòng)子單元用于將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元所管理的表項(xiàng),及與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)整體向前移動(dòng)一個(gè)空間;或者用于將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)、及所述具有空閑空間的空間管理單元所管理的表項(xiàng)整體向后移動(dòng)一個(gè)空間;維護(hù)子單元用于將所述具有空閑空間的空間管理單元的fent值減1。當(dāng)刪除路由表中的表項(xiàng)時(shí),所述獲取單元84還可用于獲取待刪除表項(xiàng)存放的索引值;此時(shí),對(duì)路由表進(jìn)行空間管理的裝置還可進(jìn)一步包括刪除單元及維護(hù)單元。刪除單元用于刪除所述待刪除表項(xiàng);維護(hù)單元用于將所述待刪除表項(xiàng)所屬的空間管理單元中的fent值加1,vent值減1,end空間內(nèi)的表項(xiàng)存放到所述待刪除表項(xiàng)的地址空間內(nèi),將end值減1。所述刪除單元還可用于在所述待刪除表項(xiàng)所屬的空間管理單元中的vent值減1后為0時(shí),從所述空間管理鏈表中刪除所述待刪除表項(xiàng)所屬的空間管理單元;所述調(diào)整單元還可用于將所述待刪除表項(xiàng)所屬的空間管理單元管理的所有空間分配給前一個(gè)空間管理單元進(jìn)行管理;所述維護(hù)單元還可用于將所述前一個(gè)空間管理單元的fent值加上所述所有空間。三層交換機(jī)或路由器可包括上述裝置實(shí)施例中提供的任意一種對(duì)路由表進(jìn)行空間管理的裝置,以提高三層交換機(jī)或路由器的路由表查找速度。三層交換機(jī)或路由器通過(guò)上述方法及裝置實(shí)施例,使得路由表中的路由表項(xiàng)呈現(xiàn)出一種有序的排列狀態(tài),路由表中的表項(xiàng)依照掩碼長(zhǎng)度由長(zhǎng)至短進(jìn)行排序存放,即,掩碼(前綴)長(zhǎng)度越長(zhǎng)的表項(xiàng)在越前面,掩碼(前綴)長(zhǎng)度越短的表項(xiàng)在越后面,所以只要從上往下一個(gè)個(gè)遍歷,跳過(guò)空的表項(xiàng),第一個(gè)匹配到肯定是最長(zhǎng)前綴匹配的表項(xiàng),大大提高了最長(zhǎng)前綴匹配的匹配速度,且較適合用于三層交換機(jī)的路由模塊。并且,路由表的這種管理方式也使得路由表的維護(hù)和查找也相當(dāng)?shù)目焖?,同時(shí)大大提高了路由表的空間利用率。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括ROM、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。權(quán)利要求1、一種對(duì)路由表進(jìn)行空間管理的方法,其特征在于,包括計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;遍歷空間管理鏈表中的空間管理單元;所述空間管理鏈表中,各空間管理單元與掩碼長(zhǎng)度一一對(duì)應(yīng),管理與對(duì)應(yīng)的掩碼長(zhǎng)度相同的表項(xiàng);所述各空間管理單元按照對(duì)應(yīng)的掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent;獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)。2、根據(jù)權(quán)利要求1所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)包括將所述獲取的空間管理單元中的end值加1;將所述待插入表項(xiàng)存放在加1后的end空間內(nèi),并將所述獲取的空間管理單元中的vent<直力口1。3、根據(jù)權(quán)利要求1所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,所述空間管理鏈表中不存在與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的情況下,在所述空間管理鏈表中設(shè)置所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,分配路由表空間,并確定所述待插入表項(xiàng)的存放位置,插入所述待插入表項(xiàng)。4、根據(jù)權(quán)利要求3所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,在所述空間管理鏈表中設(shè)置所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,分配路由表空間包括找到對(duì)應(yīng)的掩碼長(zhǎng)度大于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元;將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元管理的部分空閑空間分配給待設(shè)置的空間管理單元;將所述待設(shè)置的空間管理單元的start設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元的end+剩余的空閑空間+1;將所述待設(shè)置的空間管理單元的end設(shè)置為與本空間管理單元的start相同的值;將所述待設(shè)置的空間管理單元的prev設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度;將所述待設(shè)置的空間管理單元的next設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中next的值;將所述待設(shè)置的空間管理單元的fent設(shè)置為所述部分空閑空間;將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中的next設(shè)置為所述插入表項(xiàng)的掩碼長(zhǎng)度;獲取所述空間管理鏈表中對(duì)應(yīng)的掩碼長(zhǎng)度小于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元;將所述對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元中的prev設(shè)置為所述待插入表項(xiàng)的掩碼長(zhǎng)度;確定所述待插入表項(xiàng)的存放位置,插入所述待插入表項(xiàng)包括將所述待插入表項(xiàng)存放在所述待設(shè)置的空間管理單元的start空間內(nèi);將所述待設(shè)置的空間管理單元的fent值減1。5、根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)包括在所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元之前或之后的空間管理單元所管理的空間中查找空閑空間;通過(guò)整體移動(dòng),將具有空閑空間的空間管理單元管理的部分空閑空間,分配給所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元;將所述待插入表項(xiàng)插入分配的空閑空間內(nèi),并將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的end值加1。6、根據(jù)權(quán)利要求5所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,通過(guò)整體移動(dòng),將具有空閑空間的空間管理單元管理的部分空閑空間,分配給所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元包括將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元所管理的表項(xiàng),及與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)整體向前移動(dòng)一個(gè)空間;將所述具有空閑空間的空間管理單元的fent值減1;或者包括將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)、及所述具有空閑空間的空間管理單元所管理的表項(xiàng)整體向后移動(dòng)一個(gè)空間;將所述具有空閑空間的空間管理單元的fent值減1。7、根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,還包括獲取待刪除表項(xiàng)存放的索引值;刪除所述待刪除表項(xiàng);將所述待刪除表項(xiàng)所屬的空間管理單元中的fent值加l,vent值減1,end空間內(nèi)的表項(xiàng)存放到所述待刪除表項(xiàng)的地址空間內(nèi),將end值減1。8、根據(jù)權(quán)利要求7所述的對(duì)路由表進(jìn)行空間管理的方法,其特征在于,所述待刪除表項(xiàng)所屬的空間管理單元中的vent值減1后為0時(shí),從所述空間管理鏈表中刪除所述待刪除表項(xiàng)所屬的空間管理單元;將所述待刪除表項(xiàng)所屬的空間管理單元管理的所有空間分配給前一個(gè)空間管理單元進(jìn)行管理;將所述前一個(gè)空間管理單元的fent值加上所述所有空間。9、一種對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,包括計(jì)算單元,用于計(jì)算待插入表項(xiàng)的掩碼長(zhǎng)度;空間管理鏈表,用于存儲(chǔ)空間管理單元,所述空間管理鏈表中,各空間管理單元之間與掩碼長(zhǎng)度——對(duì)應(yīng),存儲(chǔ)的表項(xiàng)與對(duì)應(yīng)的掩碼長(zhǎng)度相同;所述各空間管理單元按照掩碼長(zhǎng)度從長(zhǎng)到短的順序排列,均設(shè)置有表項(xiàng)存儲(chǔ)的開(kāi)始地址start、表項(xiàng)存儲(chǔ)的結(jié)束地址end、前一個(gè)空間管理單元存儲(chǔ)對(duì)應(yīng)的掩碼長(zhǎng)度prev、后一個(gè)空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度next、本空間管理單元存儲(chǔ)的表項(xiàng)個(gè)數(shù)vent及本空間管理單元中的空閑空間fent;遍歷單元,用于遍歷所述空間管理鏈表中的空間管理單元;獲取單元,用于獲取與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元;插入單元,用于根據(jù)所述獲取單元獲取的空間管理單元,確定所述待插入表項(xiàng)在路由表中的存放位置,插入所述待插入表項(xiàng)。10、根據(jù)權(quán)利要求9所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,所述插入單元包括存放子單元,用于將所述待插入表項(xiàng)存放在加1后的end空間內(nèi);計(jì)算子單元,用于將所述獲取的空間管理單元中的end值加1;并將所述獲取的空間管理單元中的vent值加1。11、根據(jù)權(quán)利要求9所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,還包括設(shè)置單元,用于在所述空間管理鏈表中不存在與所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的情況下,在所述空間管理鏈表中設(shè)置所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元,分配路由表空間;所述插入單元還用于根據(jù)所述設(shè)置單元設(shè)置的空間管理單元確定所述待插入表項(xiàng)的存放位置,插入所述待插入表項(xiàng)。12、根據(jù)權(quán)利要求11所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,所述設(shè)置單元包括查找子單元,用于找到對(duì)應(yīng)的掩碼長(zhǎng)度大于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元;分配子單元,用于將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元管理的部分空閑空間分配給待設(shè)置的空間管理單元;獲取所述空間管理鏈表中對(duì)應(yīng)的掩碼長(zhǎng)度小于所述待插入表項(xiàng)的空間管理單元,并從中獲取對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元;維護(hù)子單元,用于將所述待設(shè)置的空間管理單元的start設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元的end+剩余的空閑空間+1;將所述待設(shè)置的空間管理單元的end設(shè)置為與本空間管理單元的start相同的l直;將所述待設(shè)置的空間管理單元的prev設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元對(duì)應(yīng)的掩碼長(zhǎng)度;將所述待設(shè)置的空間管理單元的next設(shè)置為所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中next的值;將所述待設(shè)置的空間管理單元的fent設(shè)置為所述部分空閑空間;將所述對(duì)應(yīng)的掩碼長(zhǎng)度最短的空間管理單元中的next設(shè)置為所述插入表項(xiàng)的掩碼長(zhǎng)度;將所述對(duì)應(yīng)的掩碼長(zhǎng)度最長(zhǎng)的空間管理單元中的prev設(shè)置為所述待插入表項(xiàng)的掩碼長(zhǎng)度;所述插入單元還用于將所述待插入表項(xiàng)存放在所述待設(shè)置的空間管理單元的start空間內(nèi);所述維護(hù)單元還用于將所述待設(shè)置的空間管理單元的fent值減1。13、根據(jù)權(quán)利要求9-12中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,還包括空間查找單元,用于在所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元之前或之后的空間管理單元所管理的空間中查找空閑空間;調(diào)整單元,用于通過(guò)整體移動(dòng),將具有空閑空間的空間管理單元管理的部分空閑空間,分配給所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元;所述插入單元還用于將所述待插入表項(xiàng)插入分配的空閑空間內(nèi),并將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元的end值加1。14、根據(jù)權(quán)利要求13所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,所述調(diào)整單元包括移動(dòng)子單元,用于將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元所管理的表項(xiàng),及與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)整體向前移動(dòng)一個(gè)空間;或者用于將所述待插入表項(xiàng)的掩碼長(zhǎng)度對(duì)應(yīng)的空間管理單元與所述具有空閑空間的空間管理單元之間的空間管理單元所管理的表項(xiàng)、及所述具有空閑空間的空間管理單元所管理的表項(xiàng)整體向后移動(dòng)一個(gè)空間;維護(hù)子單元,用于將所述具有空閑空間的空間管理單元的fent值減1。15、根據(jù)權(quán)利要求9-12中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,所述獲取單元還用于獲取待刪除表項(xiàng)存放的索引值;所述裝置還包括刪除單元,用于刪除所述待刪除表項(xiàng);維護(hù)單元,用于將所述待刪除表項(xiàng)所屬的空間管理單元中的fent值加1,vent值減1,end空間內(nèi)的表項(xiàng)存放到所述待刪除表項(xiàng)的地址空間內(nèi),將end值減1。16、根據(jù)權(quán)利要求15所述的對(duì)路由表進(jìn)行空間管理的裝置,其特征在于,所述刪除單元還用于在所述待刪除表項(xiàng)所屬的空間管理單元中的vent值減l后為0時(shí),從所述空間管理鏈表中刪除所述待刪除表項(xiàng)所屬的空間管理單元;所述調(diào)整單元還用于將所述待刪除表項(xiàng)所屬的空間管理單元管理的所有空間分配給前一個(gè)空間管理單元進(jìn)行管理;所述維護(hù)單元還用于將所述前一個(gè)空間管理單元的fent值加上所述所有空間。17、一種三層交換機(jī),其特征在于,包括上述權(quán)利要求9-16中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的裝置。18、一種路由器,其特征在于,包括上述權(quán)利要求9-16中任一項(xiàng)所述的對(duì)路由表進(jìn)行空間管理的裝置。全文摘要本發(fā)明涉及一種對(duì)路由表進(jìn)行空間管理的方法、裝置、交換機(jī)及路由器,通過(guò)空間管理鏈表中的空間管理單元對(duì)路由表空間進(jìn)行分配管理,使得三層交換機(jī)或路由器插入路由表中的表項(xiàng)依照掩碼(前綴)長(zhǎng)度由長(zhǎng)至短的順序進(jìn)行排列,保證了最長(zhǎng)前綴匹配一開(kāi)始便可匹配到最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),避免了同一表項(xiàng)在路由表中的重復(fù)存放,以及對(duì)路由表中的所有表項(xiàng)進(jìn)行匹配后才能獲得最長(zhǎng)的掩碼長(zhǎng)度路由表項(xiàng),大大提高了路由表查找速度;同時(shí)路由表中的表項(xiàng)按照一定順序排列也有利于表項(xiàng)的快速插入和刪除,大大提高了路由表的空間利用率。文檔編號(hào)H04L12/56GK101335706SQ20081011692公開(kāi)日2008年12月31日申請(qǐng)日期2008年7月21日優(yōu)先權(quán)日2008年7月21日發(fā)明者旭王申請(qǐng)人:北京星網(wǎng)銳捷網(wǎng)絡(luò)技術(shù)有限公司