<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于FPGA的高速路由查找算法

基于FPGA的高速路由查找算法

作者: 時(shí)間:2009-12-09 來(lái)源:網(wǎng)絡(luò ) 收藏

0 引言
隨著(zhù)網(wǎng)絡(luò )流量的不斷增加和表容量的不斷增大,查找已經(jīng)成為制約因特網(wǎng)的主要瓶頸。盡管采用CIDR技術(shù)能產(chǎn)生聚集,但路由器的路由表項還是很大,使得路由查找成為高,速路由器的瓶頸。因此,提高路由查找速度已成為高速路由器的關(guān)鍵技術(shù)。
目前實(shí)現路由查表的方法主要有軟件和硬件兩類(lèi)。其中基于軟件查表方法的查找次數最少為5次,這顯然已經(jīng)不能滿(mǎn)足高速鏈路的要求;而基于Cache的查找方法,其查找依賴(lài)于流量的模式,即IP數據流具有局部性,隨著(zhù)網(wǎng)絡(luò )數據量的增大,命中率也會(huì )降低。而基于硬件的Stanford算法則結構簡(jiǎn)單,易于硬件實(shí)現,而且查找速度快,其最少需要訪(fǎng)問(wèn)一次存儲器,最多需要訪(fǎng)問(wèn)2次存儲器。但其占用存儲空間大(為33 MB),表項更新單元數多。在最壞情況下,更新一個(gè)表項需要操作64 k個(gè)存儲單元。
本文采用多表結構,將查找過(guò)程分為4級。
因為采用串行查找實(shí)現時(shí),查找一個(gè)IP數據包最少需要訪(fǎng)問(wèn)一次存儲器,最多需要訪(fǎng)問(wèn)4次。而根據四塊存儲器獨立工作的特性,采用流水線(xiàn)的方式進(jìn)行并行化設計,則可以保證訪(fǎng)問(wèn)一次存儲器就能完成一次數據包的查找。為了保證占用較小的空間且四個(gè)存儲塊的容量相對均衡,本文用一個(gè)動(dòng)態(tài)規劃算法來(lái)求解四個(gè)目標層的值。此外,這種設計結構也支持動(dòng)態(tài)更新,并且更新單元數較少。

本文引用地址:http://dyxdggzs.com/article/191858.htm


1
本系統的基本算法采用分段查找及前綴擴展技術(shù)來(lái)將IPv4的32位IP地址分成4段,假設i是其中一段(1≤i≤4),length i代表第i段所對應的IP地址長(cháng)度。每一段內容存儲在一塊物理地址連續的內存區域中,稱(chēng)為T(mén)BLi。那么,在第一段區域TBL1中,使用前綴擴展技術(shù),即可把所有長(cháng)度小于等于length1的前綴擴展成長(cháng)度為length1的前綴。圖1所示是該四級路由算法的結構框圖。

顯然,該結構中的第一段有2length1個(gè)表項,析出IP地址的前l(fā)ength1位的值為第一塊內存的偏移地址,其對應表項的數據格式如圖2所示。若前綴長(cháng)度小于等于length1,則表項的第一位標識為0,其余bit位表示下一跳的轉發(fā)信息。若前綴長(cháng)度大于length1,則表項的第一位標識為1,其余位填寫(xiě)擴展表的索引值可以作為指向TBL2的指針。在其余的三個(gè)段中,可采用同樣的方法進(jìn)行前綴擴展。
本算法的查找過(guò)程是在匹配一個(gè)IP地址時(shí),從第一段開(kāi)始進(jìn)行分段查找,每查找一段,則解析出對應段長(cháng)度的IP,并取相應內存區域的地址。例如進(jìn)行第二段查找時(shí),可將其值作為偏移量,再加上相應的基址,就可獲得該段對length1+1位開(kāi)始,然后解析出length2長(cháng)度的IP地址作為偏移量。之后再用TBL1表項里的索引,將其左移length2位作為基址,這樣就確定了第二塊連續存儲區域中的地址。依次類(lèi)推,分段查找,直到找到下一跳地址為止。
本算法的插入過(guò)程與查找過(guò)程相似,先根據前綴對應的分段和索引查找到對應的子表,然后在其涉及的范圍內讀取各個(gè)表項,再根據表項的值確定是否用新的路由前綴信息覆蓋該表項。如果在此過(guò)程中,該表沒(méi)有相應的段空間,則需分配對應的存儲空間。若該段空間為空,則收回該存儲空間。


2 目標層的確定
在用NT(k,ω)表示前綴長(cháng)度為w的情況下,還需要找出k個(gè)目標層時(shí)對應的最小前綴擴展數。這樣,其最優(yōu)解就是NT(k,ω)。其遞推公式如下:

式中,Nu(l,ω)表示將l+1層至ω-1層擴展到ω層的前綴數目,其中若某一層不存在,則將那一層直接忽略。另外,在擴展時(shí)還要考慮前綴捕獲問(wèn)題。Nl(ω)是ω層原有的前綴數目。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: FPGA 路由 查找算法

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>