日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--11.網(wǎng)絡(luò)( 九 )



網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)會(huì)隨時(shí)間改變,IP地址會(huì)被重新分配不同的硬件地址 。例如,一些撥號(hào)服務(wù)為每一次新建的連接分配一個(gè)IP地址 。為了使ARP表包含這些數(shù)據(jù)項(xiàng),ARP運(yùn)行一個(gè)周期性的定時(shí)器,用來查看所有的 arp_table 項(xiàng)中哪一個(gè)超時(shí) 。要注意不要移除包含一個(gè)或多個(gè)緩存硬件頭的項(xiàng) 。移除這些項(xiàng)是很危險(xiǎn)的,因?yàn)槠渌臄?shù)據(jù)結(jié)構(gòu)要用到它們 。一些 arp_table 項(xiàng)被標(biāo)記為永久的,它們不會(huì)被釋放 。ARP表不能太大;每個(gè) arp_table 項(xiàng)會(huì)消耗一些核心內(nèi)存 。要分配一個(gè)新的表項(xiàng)而ARP表的大小已經(jīng)到達(dá)它的最大值時(shí),就要查找并刪除最老的表項(xiàng) 。

10.7IP 路由
IP路由函數(shù)決定了將預(yù)定的有指定IP地址的IP包送到哪 。在傳送IP包時(shí)有很多種選擇 。能最終到達(dá)目標(biāo)嗎?如果能,要用到哪個(gè)網(wǎng)絡(luò)設(shè)備呢?如果有多于一個(gè)的網(wǎng)絡(luò)設(shè)備可被使用,哪一個(gè)是較好的呢?IP路由數(shù)據(jù)庫里存的信息給出了這些問題的答案 。有兩個(gè)數(shù)據(jù)庫,最重要的一個(gè)是Forwarding Information Database 。這是一個(gè)有關(guān)已知的目的IP和它們的最佳路由的祥細(xì)列表,route cache則用來快速找到目的IP的路由 。和其它的緩一樣,它包含的只是常用的路由;它的內(nèi)容來自Forwarding Information Database 。

通過IOCTL請(qǐng)求可將路由加入到BSD socket接口或從中刪除 。這些是通過協(xié)議來實(shí)現(xiàn)的 。INET協(xié)議層只允許 處理有超級(jí)用戶權(quán)限的IP路由的添加與刪除 。這些路由可以是固定的,也可以隨時(shí)間而動(dòng)態(tài)改變 。大多數(shù)系統(tǒng)使用固定路由 。路由器運(yùn)行路由協(xié)議,路由協(xié)議持續(xù)地檢查所有已知目的IP的可得到的路由 。沒有路由器的系統(tǒng)是端系統(tǒng) 。路由協(xié)議是作為一個(gè)守護(hù)進(jìn)程來實(shí)現(xiàn)的,如GATED,它們也用IOCTL來向BSD socket接口添加和刪除路由 。

10.7.1路由緩存
無論什么時(shí)候查找IP路由,首先都要在路由緩存中檢查是否有匹配的路由 。如果路由緩存里沒有匹配的路由,則要從Forwarding Information Database中查找路由 。如果那里也沒有找到路由,則IP包發(fā)送失敗并通知應(yīng)用程序 。如果在路由緩存中沒有而在Forwarding Information Database中找到路由,則會(huì)為些路由生成一個(gè)新項(xiàng),并添加到路由緩存中 。路由緩存是一個(gè)表(ip_rt_hash_table),它包括指向rtable數(shù)據(jù)結(jié)構(gòu)鏈的指針 。hash函數(shù)利用IP地址中最小最重要的兩個(gè)字節(jié)來從路由表中進(jìn)行索引 。這兩個(gè)字節(jié)是在目的與提供的最佳hash值間是不同的 。第個(gè)rtable項(xiàng)包含路由信息,目的IP地址,用于到達(dá)那個(gè)IP地址的網(wǎng)絡(luò)設(shè)備,信息大小的最大值等等 。它還有一個(gè)reference count,一個(gè)usage count和一個(gè)最近一次被用的時(shí)間信息(在 jiffies 里) 。reference count在每次路由后增加,用于顯示該次路由的網(wǎng)絡(luò)連接數(shù) 。它在應(yīng)用程序停止使用路由時(shí)減小 。useage count在每次查找路由時(shí)增加,用于將 rtable 項(xiàng)在它的hash鏈中排序 。路由緩存中的對(duì)于所有項(xiàng)的最后被用時(shí)間信息將被周期性地檢查,以確定是否 rtable 已經(jīng)舊了 。如果某一路由最近沒有被使用,則從路由緩存中將之丟棄 。由于路由緩存中的路由在有序的,所以常用的路由會(huì)排在hash鏈的前面 。這意味著能更快地找到這些路由 。


10.7.2The Forwarding Information Database





圖 10.5: The Forwarding Information Database
Forwarding Information Database(如圖10.5 所示)包含對(duì)當(dāng)前系統(tǒng)當(dāng)前時(shí)間可得到的IP路由 。它是一個(gè) 很復(fù)雜的數(shù)據(jù)結(jié)構(gòu),盡管進(jìn)行了合理有效的安排,它仍然不是一個(gè)快速的數(shù)據(jù)庫 。特別是要在這個(gè)數(shù)據(jù)庫中為每一要傳送的IP包查找目的地時(shí)將會(huì)非常慢 。這就是要用路由緩存的原因:可以用已知的好的路由來加速IP包的傳送 。路由緩存中的路由來源于Forwarding Information Database 。

推薦閱讀