Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理是什么
Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理是什么
Linux系統(tǒng)的硬件路由是如何轉(zhuǎn)發(fā)的呢?許多小伙伴興許還不太清楚,下面是學(xué)習(xí)啦小編為大家介紹Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理,歡迎大家閱讀。
Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理
硬件轉(zhuǎn)發(fā)原理圖:
請(qǐng)注意,沒(méi)有任何優(yōu)化,你可以試著用一些小技巧將其進(jìn)一步的優(yōu)化,也可以直接用標(biāo)準(zhǔn)的TCAM來(lái)映射它。此圖里,我詳細(xì)展示了“最長(zhǎng)前綴”邏輯是怎么做的,而在TCAM路由轉(zhuǎn)發(fā)表的實(shí)例中,往往被畫成了黑盒子,叫做“優(yōu)先級(jí)邏輯控制器”,不過(guò),這個(gè)邏輯電路比較簡(jiǎn)單,相信大家稍微思考都可以自己設(shè)計(jì)出來(lái)的。
其實(shí),在上圖中,有一個(gè)容器叫做“反掩碼”,將這個(gè)反掩碼逐位地安排在譯碼器后面的位線比較鍵旁邊,這就是一個(gè)標(biāo)準(zhǔn)的TCAM做法了。
關(guān)于內(nèi)容尋址和地址尋址
我們都知道cache比較貴所以不能太大,而內(nèi)容就可以做很大,因?yàn)樗容^便宜。
但是能否從技術(shù)層面解釋一下呢?其實(shí),貴與便宜的差異就是技術(shù)原因造成的,我們先看一下內(nèi)存的存儲(chǔ)陣列的電路:
這是個(gè)非常典型的矩陣,也很簡(jiǎn)單。但是對(duì)于CAM電路,就不是這么簡(jiǎn)單了,下圖所示:
對(duì)于TCAM,需要加一個(gè)care邏輯,就更加復(fù)雜了,不光是電路復(fù)雜了,功耗也增加了,要知道,在CAM/TCAM匹配的過(guò)程中,電路的所有部分都是同時(shí)工作的。
關(guān)于硬件HASH
很多人都說(shuō)CPU cache里面有一個(gè)硬件HASH,比如取地址的第n到m位,事實(shí)上就是一個(gè)移位,取模操作!這在程序員看來(lái)只能呵呵了,程序員們知道的最簡(jiǎn)單的HASH算法都比這個(gè)復(fù)雜。其實(shí)硬件工程師對(duì)程序員的呵呵是不屑一顧的,因?yàn)樗麄兊年P(guān)注點(diǎn)是如何使得電路同時(shí)工作時(shí)功耗最低,電路規(guī)模更小。CAM/TCAM都用了硬件HASH,很簡(jiǎn)單的硬件HASH,然而電路是可以同時(shí)工作的。這可是軟件hash的大難題,軟件hash旨在使得hash分布更加均勻,平均性能更好。這樣沖突鏈表長(zhǎng)度的平均方差最小。軟件hash旨在解決沖突,而硬件HASH不需要這么做,因?yàn)樵谲浖磥?lái)必須串行遍歷沖突鏈表的時(shí)候,硬件卻是可以同時(shí)進(jìn)行的。
順序執(zhí)行的CPU
計(jì)算機(jī)被設(shè)計(jì)之初,就是一個(gè)順序執(zhí)行的模型,指令是一條接一條執(zhí)行的。這是因?yàn)樗峭耆M真實(shí)世界中人的行為的。這就意味著所有的跑在計(jì)算機(jī)上的算法步驟都是要時(shí)間流逝中串行實(shí)施的,一個(gè)好的算法旨在讓時(shí)間花費(fèi)最短。然而硬件電路的設(shè)計(jì)并不遵循真實(shí)世界的人做事的樣子,起碼說(shuō)不是太像。一個(gè)人不可能同時(shí)做很多事,硬件電路的執(zhí)行流程更像是洪水泛濫的過(guò)程,由于勢(shì)能,洪水同時(shí)往(注意,同時(shí)!)所有它可以去的地方?jīng)_去,瞬時(shí)就吞噬了一切。
以上就是Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理了,當(dāng)然路由轉(zhuǎn)發(fā)只是Linux網(wǎng)絡(luò)環(huán)節(jié)中的一部分,當(dāng)然也是最不可替代的部分。
Linux系統(tǒng)硬件路由的轉(zhuǎn)發(fā)原理是什么相關(guān)文章: