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

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



接收IP分塊單元要比發(fā)送它們要麻煩一些,因為這些IP單元可能以任何順序到達(dá),必須所有的單元都接收 到了以后才能重新將它們組裝起來 。每接收一個IP包都要檢查其是否是IP分割單元 。在第一個IP分割單元到達(dá) 時,IP會建立一個新的 ipq 結(jié)構(gòu),這一結(jié)構(gòu)與用于IP單元重組的 ipqueue 列表相連 。當(dāng)接收到更多的IP單元時,先找到正確的 ipq 結(jié)構(gòu),并為每個單元新建立一個 ipfrag 結(jié)構(gòu) 。每個 ipq 結(jié)構(gòu)唯一地描述一個接收IP分割單元的,包括它的源和目的IP地址,上層協(xié)議標(biāo)識和本IP幀的標(biāo)識 。當(dāng)接收到所有的IP分割單元后,將它們重新組成一個 sk_buff,然后交給上層協(xié)議處理 。每個 ipq 中包含一個定時器,它在每接收到一個合法的單元后重新時 。如果定時器到時,ipq 結(jié)構(gòu)和它的一些 ipfrag 結(jié)構(gòu)將被丟棄,傳送的信息則被假定為丟失 。然后提交給層協(xié)議來重傳該信息 。

10.6地址解析協(xié)議 (ARP)
地址解析協(xié)議擔(dān)當(dāng)了一個把IP地址翻譯成物理硬件地址如以太網(wǎng)地址的角色 。IP在將數(shù)據(jù)(以 sk_buff 的形式)通過設(shè)備驅(qū)動傳送時需要這一轉(zhuǎn)換 。

它執(zhí)行各種檢查,來看是否這一設(shè)備需要硬件頭,是否需要重建包的硬件頭 。Linux緩存了硬件頭,這樣可以避頻繁重建 。如果需要重建硬件頭,則調(diào)用設(shè)備指定的硬件頭重建例程 。所有的以太網(wǎng)設(shè)備使用相同的頭重例程,這些例程將目的IP地址轉(zhuǎn)換成物理地址 。

ARP協(xié)議本身是很簡單的,它包括兩個消息類型,ARP請求與ARP應(yīng)答 。ARP請求包含了需要解析的IP地址,ARP應(yīng)答(希望它)包含被解析的IP地址,硬件地址 。ARP請求向連接在網(wǎng)絡(luò)上的所有主機(jī)廣播,因此,對于以網(wǎng),所有連在網(wǎng)上的機(jī)器都能看到ARP請求 。擁有ARP請求中的IP地址的機(jī)器將發(fā)出包含了它自己的物理地址ARP應(yīng)答 。

ARP協(xié)議在Linux中是圍繞 arp_table 結(jié)構(gòu)表來建立的,每個結(jié)構(gòu)描述一個IP到物理地址的轉(zhuǎn)換 。這些表項 在需要進(jìn)行IP地址解析時生成,在隨時間變舊時被刪除 。每個 arp_table 結(jié)構(gòu)有如下字段:

last used本ARP項最近一次使用的時間
last updated本ARP項最近一次更新的時間
flags描述本項的狀態(tài),如是否完成等
IP address本項描述的IP地址
hardware address要解析的硬件地址
hardware header指向緩存硬件頭的指針
timer是個 timer_list 項,用于ARP請求沒有響應(yīng)時的超時
retriesARP請求重試的次數(shù)
sk_buff queue等待IP地址解析的sk_buff項列表


ARP表包括了指向 arp_table 鏈的指針( arp_table 向量) 。緩存這些表項可以加速對它們的訪問,每個表項用IP地址的最后兩個字節(jié)來生成索引,然后就可以查找表鏈以找到正確的表項 。Linux也以 hh_cache 結(jié)構(gòu)的形式來緩存 arp_table 項的預(yù)建的硬件頭 。

請求一個IP地址解析并且沒有相應(yīng)的 arp_table 項時,ARP必須發(fā)送一個ARP請求 。它在表和sk_buff隊列中 生成一個新的 arp_table 項,sk_buff 包含了需要進(jìn)行地址解析的網(wǎng)絡(luò)包 。發(fā)送ARP請求時運行ARP定時器 。如果沒有響應(yīng),ARP將重試幾次,如果仍然沒有響應(yīng),ARP將刪除該 arp_table 項 。同時會通知隊列中等待IP地址解析的 sk_buff 結(jié)構(gòu),傳送它們的上層協(xié)議將處理這一失敗 。UDP不關(guān)心丟包,而TCP則會建立TCP連接進(jìn)行重傳 。如果IP地址的所有者返回了它的硬件地址,則 arp_table 項被標(biāo)記為完成,隊列中的sk_buff將被刪除,傳輸動作繼續(xù) 。硬件地址被寫到每個sk_buff的硬件頭中 。

ARP協(xié)議層必須響應(yīng)ARP請求 。它注冊它的協(xié)議類型(ETH_P_ARP),生成一個 packet_type 結(jié)構(gòu) 。這表示它將檢查網(wǎng)絡(luò)設(shè)備收到的所有ARP包 。與ARP應(yīng)答一樣,這包括ARP請求 。用保存在接收設(shè)備的 device 結(jié)構(gòu)中的硬件地址來生成ARP應(yīng)答 。

推薦閱讀