網(wǎng)絡(luò)子系統(tǒng)鄰居系統(tǒng)_第1頁
網(wǎng)絡(luò)子系統(tǒng)鄰居系統(tǒng)_第2頁
網(wǎng)絡(luò)子系統(tǒng)鄰居系統(tǒng)_第3頁
網(wǎng)絡(luò)子系統(tǒng)鄰居系統(tǒng)_第4頁
網(wǎng)絡(luò)子系統(tǒng)鄰居系統(tǒng)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、【翻譯】鄰居子系統(tǒng):概念本章描述了鄰居協(xié)議使用的原因和時間,以及其主要功能。這主要是鄰居協(xié)議(如 arp)的一個簡單的概觀以及快速參考。包含了如下的常見問題:通用鄰居框架具功能高速緩存有何重要意義緩存中的鄰居條目能夠獲得的狀態(tài)可達探測和網(wǎng)絡(luò)不可達探測為什么使用Linux 內(nèi)核源碼中使用的鄰居術(shù)語來源于 RFC2461 和“鄰居協(xié)議”小節(jié)中描述的 IPv6 鄰居探測模型,但是的盡可能協(xié)議獨立。通常,L2 地址、二層地址、硬件地址、MAC 地址和鏈路層地址都指相同的概念。本章,將主要使用第一種說法。26.1 鄰居是什么?如果主機連接到和你同樣的局域網(wǎng),則它是你的鄰居(也就是說,你和它直接通過共享介

2、質(zhì)或點對點鏈路連接),都被配置為同樣的 L3 層網(wǎng)絡(luò)。例如,在 IP 網(wǎng)絡(luò)中,如果兩臺主機連接到同樣的局域網(wǎng),且每個主機至少有一個接口在同樣的 IP 子網(wǎng)(譯者注:對多網(wǎng)卡主機而言),則它們是鄰居。這樣的兩臺主機可以通過連接到它們的介質(zhì)(如以太網(wǎng))關(guān)聯(lián)的協(xié)議直接通信。另外一種定義鄰居的做法是離主機只有一個 L3 跳(hop)的主機都是鄰居。它的 L3 層(網(wǎng)絡(luò)層)路由表必須提供一個和其鄰居直接通信的方法。不是鄰居的主機必須通過網(wǎng)關(guān)或路由器通信。如果兩個主機由工作在 L2 層的系統(tǒng)(如網(wǎng)橋)分隔,則它們?nèi)匀皇青従印jP(guān)于這點第四部分已經(jīng)詳細介紹了,這里看些基于 IP 網(wǎng)絡(luò)的簡單例子,如圖 26-1

3、 所示:圖 26-1鄰居及非鄰居主機第 1頁 共 19 頁圖 26-1 中每個拓撲圖都表明了 L2 和 L3 層地址之間的不同的關(guān)系,這兩種地址對可達的鄰居而言有所聯(lián)系。圖 26-1(a)主機 a 和主機 b 屬于同樣的 /24IP 子網(wǎng),所以它們能夠直接通信,它們之間在 L3 層僅有一跳距離,所以它們是鄰居。圖 26-1(b)此圖展示的稍微復(fù)雜一點的情況,主機 a 和主機 b 仍然屬于同一子網(wǎng),所以相互間能夠之間通信;另一方面,主機 a 和主機 c 屬于不同的 IP 子網(wǎng),因此它們需要通過路由器(假設(shè)做了適當(dāng)?shù)呐渲?來互相通信。這種情況,圖 26-1(c)認為主機 a 和主機 c 之間在 L

4、3 層有兩跳的距離。此圖展示了兩個主機連接在同一個集線器上但不能相互通信的情況。即使每臺主機都可以接收到其它任何主機傳來的數(shù)據(jù),它們也不能夠在 L3 層通信,因為它們配置了不同的 ip 子網(wǎng)。這樣,第 2 頁 共 19 頁主機 a 認為它只能夠到達子網(wǎng) /24 內(nèi)的主機,如果目標地址在子網(wǎng)之外,它不會朝目標主機發(fā)送任何數(shù)據(jù)。這個問題有很多方法可以解決,圖 26-1(d)在接下來的章節(jié)中就會看到。此圖表明 /24 子網(wǎng)實際由兩個局域網(wǎng)通過集線器或網(wǎng)橋組成的一個子網(wǎng)的情況,在第 14 章就看到它們的不同之處,在本章中,認為這是同一種情況。注意,連接兩個局域網(wǎng)的的兩個接口(譯者注:網(wǎng)橋)沒有 ip

5、地址:這是因為所有的這三種設(shè)備類型必然是工作在 IP 層之下。當(dāng)兩臺主機在 L3 層相距一跳距離,實際上它們在 L2 層也是一跳的距離,如圖 26-1(a)、(b)、(c)所示。但并非總是這樣的,如圖 26-1(d)所示,主機 a 和路由器在 L3 層相距一跳(所以是鄰居)但在 L2 層卻相距兩跳。此外,物理子網(wǎng)(局域網(wǎng))和邏輯子網(wǎng)(IP 子網(wǎng))并非總是一一對應(yīng)的,如圖 26-2(a)所示:在一個局域網(wǎng)中可以有多個 IP 子網(wǎng)或者在一個 IP 子網(wǎng)中有多個局域網(wǎng)。比如,圖 26-1(a)展示了同一個局域網(wǎng)中的兩個 IP 子網(wǎng),圖 26-1(d)表明同一 IP 子網(wǎng)(左邊)中的兩個局域網(wǎng)通過集線

6、器相連,前者并不常見,后者常用于配置 ARP可以在第 28 章的“最終公共處理”小節(jié)看到或網(wǎng)橋時。ARP配置的例子,在第五部分看到網(wǎng)橋的例子。圖 26-2(b)表明:兩組主機通過配置在不同的ip子網(wǎng)中,即使這兩個組中的主機共享同一個局域網(wǎng),并因此能夠相互通信,但是它們必須通過兩邊請求的路由器。路由器必須具有兩個不同的網(wǎng)絡(luò)接口或雙網(wǎng)卡,或者具有單網(wǎng)卡多IP地址。后者比較罕見,常用于設(shè)備地址臨時短缺或配置失敗時,例如,在圖 26-2(a)的場景中LAN1 配置失敗的情況下,可以把LAN1 的主機移到LAN2(包括路由器的eth0 接口*),則LAN1 的主機的IP子網(wǎng)配置不需要任何改變即可再次工作

7、。已經(jīng)在LAN2 的主機仍然可以通過路由器其它主機。即使這種情況不常見,但內(nèi)核必須能夠正確處理它,這種情況,特別是當(dāng)路由器使用單個接口其子網(wǎng)時(也就是eth0 被移除,則它的地址被加進eth1)的情景將在第 28 章的“可調(diào)節(jié)的ARP選項”小節(jié)中描述。 *圖 26-2 (a)IP 子網(wǎng)_LAN1:1(b)IP 子網(wǎng)_LANn:1在接下來的章節(jié)中不會明確提到圖 26-2(b)的情況,但你應(yīng)該記得象這樣的配置是可能的,第 3 頁 共 19 頁不是的。26.2 需要鄰居協(xié)議的原因本節(jié)中,如以太網(wǎng)。會明白鄰居子系統(tǒng)存在的基本原因,它將基本網(wǎng)絡(luò)劃分成層以及共享介質(zhì)實體,26.2.1 當(dāng) L3 層地址需要

8、轉(zhuǎn)換為 L2 層地址時L3:layer three 網(wǎng)絡(luò)層L2:layer second 數(shù)據(jù)鏈路層在網(wǎng)絡(luò)二層(以太網(wǎng)、802.11 無限網(wǎng)、令牌網(wǎng)、點對點連接等等)和三層(IP 層、私有的)協(xié)議之間存在差異的原因就是許多不同的 L2 層協(xié)議存在且在鄰居之間傳送數(shù)據(jù),而 L3 層路又不需擔(dān)心所用的傳輸介質(zhì),更高的層能夠使用相同的對點連接中。在兩個系統(tǒng)間傳送報文而不管它在以太網(wǎng)上還是在點圖 26-3 表明了通過鄰居子系統(tǒng)獲得不同響應(yīng)的不同情況圖 26-3點對點連接與共享介質(zhì)圖 26-3(a) 表明了點對點連接,如線。其 L2 層協(xié)議相當(dāng)簡單,如果運行在半雙工介質(zhì)上它僅處理錯誤校驗和輪詢等問題。其

9、鄰居協(xié)議比較簡單,因為它僅僅只是使用 L2 層協(xié)議,鄰居沒有發(fā)送包給誰的決定權(quán)。圖 26-3(b) 展示了更復(fù)雜的情況:以太網(wǎng)或其它共享介質(zhì)通過廣播來通信。如果主機 a 要發(fā)送數(shù)據(jù)給主機 b,它必須把數(shù)據(jù)放到電纜上(或無線環(huán)境的電波中),并讓共享介質(zhì)上的所有系統(tǒng)都收到數(shù)據(jù)。它也必須指定一個 L2 層地址以標識數(shù)據(jù)使接收主機知道數(shù)據(jù)是發(fā)送給自己的,其它主機檢測地址并丟棄數(shù)據(jù)。由鄰居協(xié)議來選擇包中 L3 層地址對應(yīng)的 L2 層地址。如果主機a和主機b通過網(wǎng)橋分開,則橋接收到L2 層地址并直接傳遞給正確主機*;而鄰居子系統(tǒng)并不考慮這些情況,事實上,橋?qū)τ卩従幼酉到y(tǒng)是透明的。第 4 頁 共 19 頁*

10、通常在 L3 層地址及其對應(yīng)的 L2 層幀之間有一一對應(yīng)的關(guān)系,具有多個 L3 層地址的系統(tǒng)(通常是路由器)提供多個接口以保持 L3 層地址及其對應(yīng)的 L2 層幀之間有一一對應(yīng)的關(guān)系。但是后面“特殊情況”小節(jié)也解釋了,在 L3 層的多個多點傳輸?shù)刂纺軌騻€接口配置多個 IP 地址。到同樣的 L2 層地址上,也有可能一26.2.2 共享介質(zhì)在共享介質(zhì)中,主機傳輸?shù)娜魏螏急恢边B在介質(zhì)上的主機收到,無線連接就是一個簡單的例子,另外一個例子就是用于以太網(wǎng) 10-base2 的共享的同軸電纜。因此,用于共享介質(zhì)的鏈路層協(xié)議需要定義一個地址策略以便發(fā)送方能夠指定每幀的接受方,并且接受方也能夠識別發(fā)送方。這

11、個地址策略通常也定義一些特殊的地址以便對一個幀編址傳給多個主機或所有的主機:即多播地址和廣播地址。由于多播主機需要傳輸數(shù)據(jù)因此也同時需要使用共享介質(zhì),鏈路層協(xié)議也必須包含法以確保所有連接到共享介質(zhì)的主機能夠檢測到這種情況。以太網(wǎng)使用的是叫做帶檢測的載波偵聽多路協(xié)議(CSMA/CD),不關(guān)心這種如何處理,因為這偏離了本章的。所有這些以太網(wǎng)相關(guān)的信息都可以在“以太網(wǎng):指南”一書(OReilly)中獲取。另一方面,點對點介質(zhì),如串行線,被設(shè)計僅用于兩個節(jié)點間通信,在這種情況下,不需使用鏈路層地址標識源節(jié)點和目的節(jié)點,兩個節(jié)點能夠依靠同一條線或各自擁有一根線半雙工或全雙工通信,這兩種情況都不需要檢測機

12、制。兩端要麼各分配一根線(全雙工),要麼每端使用一種機制獲取共享介質(zhì)的使用權(quán)。因此,兩臺主機通過點對點介質(zhì)相連時不需要鄰居協(xié)議。以太網(wǎng)最先是被設(shè)計工作在共享介質(zhì)上,允許主機共享同樣的介質(zhì)并通過CSMA/CD 處理,這是共享同軸電纜時期(也就是 10Base-2)。但是,由于,隨著時間的過去,使用共享同軸電纜被使絞線(UTP)或 RJ-45 線代替。允許以太網(wǎng)接口配置成半雙工或全雙工模式,因為雙絞線有足夠的電纜允許雙方同時通信,全雙工模式的以太網(wǎng)僅用于兩個以太網(wǎng)接口間的點對點連接。在這種情況下,每端都指派一根線進行傳輸和接收,因此不需要 CSMA/CD。現(xiàn)在,以太局域網(wǎng)主要通過交換機*實現(xiàn),每臺

13、主機都通過雙絞線連接到交換機。在此情況下,可以配置接口為半雙工模式,這樣CSMA/CD主要用于處理交換機端口與主機以太網(wǎng)卡適配器之間的;或者配置兩個接口為全雙工模式,并允許交換機和主機同時傳輸數(shù)據(jù),此時兩端都必須用同樣的雙工模式。在絕大多數(shù)情況下,都不必明確配置連接雙方的雙工模式,因為有雙工模式檢測機制做了這件事。*本注意,主機生成的幀決不會被編址到交換設(shè)備(雖然通用規(guī)則也有例外);交換設(shè)備只是用于主機到達其它連在相同交換機上的其它主機。所以,即使在全雙工模式的接口不需要 CSMA/CD,我們?nèi)匀恍枰吹刂泛湍康牡刂芳班従訁f(xié)議。這也意味著共享介質(zhì),如同軸電纜提供多播和廣播功能由交換機以其它方式

14、提供了:當(dāng)交換機收到一個幀編址是多播或廣播的鏈路層地址,它會把數(shù)據(jù)拷除接收到此幀端口以外的所有其它端口,在第四部分看到,交換機這樣做是很迅速的。所知的當(dāng)前的局域網(wǎng)大體上都是由以太網(wǎng)交換設(shè)備實現(xiàn),主機都是通過點對點形式連接(UTP 雙絞線)到交換設(shè)備上。在新的以太網(wǎng)標準的設(shè)計中,CSMA/CD 的用途變得不那么重要了。也由于這個原因,新的以太網(wǎng)完全擯棄它。用于高速數(shù)據(jù)傳輸,它要麼將CSMA/CD 作為可選項,要麼表 26-1 展示了以太網(wǎng)支持 CSMA/CD 的情況,注意,G 比特以太網(wǎng)依然支持 CSMA/CD,雖然它主要用于全雙工的點對點連接。10G 比特標準化主要用于廣域網(wǎng)(與局域網(wǎng)相對),

15、它根本就不支第 5 頁 共 19 頁持 CSMA/CD,僅用在光纖介質(zhì)上的點對點連接。表 26-1 的每項實際上都有許多變量屬性,但由于它們不在的范圍,我也就沒有列出它們。表 26-1以太網(wǎng)類別和點對點/共享介質(zhì)功能以太網(wǎng)類別以太網(wǎng)(10 Mbit/s)點對點功能共享介質(zhì)功能(即支持 CSMA/CD)X X X快速以太網(wǎng)(100 G 比特以太網(wǎng) 10G 比特以太網(wǎng)Mbits/s)X26.2.3 為什么靜態(tài)指定地址不夠用在第 13 章已經(jīng)看到 L3 層和 L2 層地址及協(xié)議的功能,L3 層地址如 IP 地址是邏輯的,所以只要是有效的地址都能夠指派給任何接口;另一 ,L2 層地址綁定到網(wǎng)卡,并且不

16、支持可配置:它們由廠家被指派給網(wǎng)卡接口并且是全球唯一。但是,有些網(wǎng)卡接口可以通過 ifconfig 等常見工具強制配置 L2 層地址,這在處理本地 IEEE 地址時非常有用,第 13 章中有此描述。不過,當(dāng)你把網(wǎng)卡接口地址改成你不擁有的 L2 層地址時,這樣你會有一定的風(fēng)險:你不再能夠確定這個地址是否唯一以及以此 L2 層地址標識的網(wǎng)卡在共享介質(zhì)上是否能夠正常工作。通常只有比較資深的管理員才這樣做特殊的配置,比如虛擬服務(wù)器或高可用設(shè)備。因為 L3 層地址是邏輯的,所有有很多理由去改變它,下面是一些改變 L3 層地址的情形,這還需要在 L3 層地址和關(guān)聯(lián)的 L2 層地址間建立。動態(tài)配置:在 IP

17、 網(wǎng)絡(luò)中,主機可以通過某種協(xié)議如 DHCP 指定動態(tài) IP 地址,同樣的主機可以在它每次請求時獲得不同的 ip 地址。但是硬件地址被硬編碼進以太網(wǎng)卡或無線網(wǎng)卡,所以 L3 層到 L2 層地址的也要做響應(yīng)的更新。替換有問題的接口:一旦網(wǎng)卡被替換,則 L2 層地址也改變了,但是管理員可能更希望保持網(wǎng)絡(luò)邏輯地址即 L3 層地址不變。移動 L3 層地址:一臺服務(wù)器宕機時可能需要另外一臺不同的服務(wù)器來處理相同的通信量請求,這就意味著舊的L3 層地址需要關(guān)聯(lián)到新的服務(wù)器和網(wǎng)絡(luò)接口。如果管理員需要保留同樣的 L3 層地址在同一主機但是不同的接口,也需要做這樣的改變。需要L2 層和 L3 層之間的這種變化,因

18、為有許多沒有處理的不可預(yù)料的事以及棘手的事情要做,所以協(xié)議需要關(guān)聯(lián) L2 層和 L3 層之間的這種關(guān)聯(lián)。這就是本書鄰居協(xié)議部分需要的事情。26.2.4 特殊情況有時,不需要任何協(xié)議把 L3 層地址成 L2 層地址,下面就是這種情況:在點對點介質(zhì)上數(shù)據(jù)僅僅只可以發(fā)送給一個主機,如撥號連接或通過電纜臨時連接系統(tǒng)到另外一各管理員想的系統(tǒng)。此時,所有的 L2 層都不需要地址策略。(即使點對點介質(zhì)在某種情況下使用了 L2 層地址也不需要)第 6 頁 共 19 頁可能用一種簡單的公司也可以獲得與 L2 層地址關(guān)聯(lián)的特殊的 L3 層地址。因為沒有不明確的或動態(tài)的分配,所有不需要任何協(xié)議。多播地址不需要任何協(xié)

19、議就可以靜態(tài)傳遞。在IPv4/ARP網(wǎng)絡(luò)中,當(dāng)設(shè)備是以太網(wǎng)卡時,多播地址通過函數(shù)arp_mc_map來,這個函數(shù)輪流調(diào)用更為簡單的ip_eth_mc_map函數(shù)。在ip_eth_mc_map中不使用任何協(xié)議而通過一個公式實現(xiàn)解釋:。圖 26-4 就是插圖和最高的 24 位被指派為 IANA 分配的靜態(tài)值 01:00:5E23 位(低 24 位的最)被設(shè)置為 0低 23 位是從 IP 地址的低 23 位拷貝過來注意,同樣的以太網(wǎng)多播地址能夠被指派給 IP 地址(因為 IP 地址的高 9 位沒用)圖 26-4 根據(jù)IPv4 多播地址生成以太網(wǎng)多播地址廣播地址(IP 子網(wǎng)廣播)靜態(tài)成鏈路層廣播地址(

20、以太網(wǎng)是:)。如果有必要,每個設(shè)備的 L2 層廣播地址也可以被明確配置。26.2.5 誘發(fā)請求和響應(yīng)當(dāng) L3 層到 L2 層地址不能夠通過前面章節(jié)描述的來靜態(tài),則鄰居協(xié)議需要做此。不同的協(xié)議可能使用不同的機制,但是對所有的協(xié)議而言,熟悉下面的術(shù)語是很有用的,這些術(shù)語在本章將頻繁的使用:誘發(fā)請求(也叫鄰居請求):這導(dǎo)致網(wǎng)絡(luò)中的包傳輸,包詢問網(wǎng)絡(luò)中的所有主機是否知道和被給 L3 層地址相關(guān)聯(lián)的 L2 層地址。這個請求根據(jù)協(xié)議或環(huán)境能夠作為單播、多播或廣播。誘發(fā)響應(yīng)(也叫鄰居):即包通常作為誘發(fā)請求的響應(yīng)而發(fā)送,但是此包也可以單獨生成(例子可參考第 28 章的“免費ARP”)。在通常情況下,和目標

21、L3 層地址相關(guān)聯(lián)的主機生成響應(yīng)包單也有可能是在此位置的另外一臺主機去響應(yīng)(參考“情況下也可作為廣播發(fā)送。鄰居協(xié)議”小節(jié))。這種包通常作為單播發(fā)送,單在某些特殊26.3 linux 實現(xiàn)早期的 linux 內(nèi)核讓 L3 層協(xié)議直接調(diào)用鄰居協(xié)議提供的函數(shù),因此,IPv4 子系統(tǒng)直接和 ARP代碼交互。在最近的內(nèi)核版本中,開發(fā)者總結(jié)了各種不同協(xié)議的各種請求,并把它們抽象成新的一第 7 頁 共 19 頁個層,叫做鄰居框架。由于內(nèi)核仍然包含了許多未更新至協(xié)議獨立層的舊代碼,所以仍然可以看到直接調(diào)用不 的 ARP 代碼的現(xiàn)象(如 arp_find),但是這只是例外。第 27 章的“L3 層協(xié)議與鄰居協(xié)議

22、之間的通用接口”小節(jié)將詳細介紹鄰居體系結(jié)構(gòu)的接口。圖 26-5 展示了linux鄰居子系統(tǒng)的關(guān)鍵部分,以及與其交互的內(nèi)核其它系統(tǒng)。L3 層協(xié)議通過一個普通的接口與鄰居層交互,此接口根據(jù)L3 層協(xié)議來選擇正確的鄰居協(xié)議(如ARP、ND等),因此也被稱作服務(wù)*。*包在傳輸時,會經(jīng)歷下面的幾個環(huán)節(jié):1、本機的路由子系統(tǒng)選擇目標 L3 層地址(下一跳)圖 26-5 重要的2、根據(jù)路由表,如果下一跳在同一網(wǎng)絡(luò)(如果是這樣,則下一跳是鄰居),則鄰居系統(tǒng)將目標 L3 層地址 成 L2 層地址,這種關(guān)聯(lián)關(guān)系被緩存起來龔以后使用。這樣,如果一個應(yīng)用在很短的時間內(nèi)發(fā)送若干個包給另外的應(yīng)用,則鄰居協(xié)議僅在發(fā)送第一個

23、包時被使用一次。3、最后,某個函數(shù)如dev_queue_xmit(11 章已描述)負責(zé)具體的傳輸,它將包傳給流量控制與服務(wù)質(zhì)量(QoS)層。雖然圖 26-5 只是展示了dev_queue_xmit函數(shù),但是鄰居層實際上還可以調(diào)用其它函數(shù)(絕大部分是dev_queue_xmit函數(shù)的封裝),這點面會看到。在本章的后注意,dev_queue_xmit函數(shù)僅在要傳輸?shù)陌鼫蕚浒l(fā)送時才被調(diào)用。因此,如果需要 L2 層協(xié)議頭,鄰居協(xié)議必須在調(diào)用此函數(shù)之前加入L2 層協(xié)議頭。有些類型如點到點傳輸連接、廣播或多播都不需要L2 層協(xié)議頭,因此它們不需要L3 層到L2 層的。這些傳輸在“特殊情況”小節(jié)中有描述;其

24、它類型的傳輸由于采用共享介質(zhì)所以需要L2 層協(xié)議頭,這個協(xié)議頭要麼來自于鄰居子系統(tǒng)緩存要麼通過鄰居子系統(tǒng)向網(wǎng)絡(luò)發(fā)送一個請求(獲得)。26.3.1 鄰居協(xié)議現(xiàn)在,IP 網(wǎng)絡(luò)中正在使用兩個協(xié)議:大量系統(tǒng)使用的 IPv4 中的 ARP 和主要為 IPv6 開發(fā)的用于通用目的的 ND(Neighbor Discovery 鄰居探測)協(xié)議。還有其它一些協(xié)議在 linux 內(nèi)核中實現(xiàn)以用于et 實現(xiàn)的協(xié)議,由于其使用有限所有本書不去關(guān)心它。私有網(wǎng)絡(luò),如:第 8 頁 共 19 頁雖然 ARP 被認為是 L3 層協(xié)議,但是它實現(xiàn)的功能被 IPv6 的設(shè)計者移至 L4 層。如圖 26-6 所示, ND 協(xié)議被劃

25、為 ICMPv6(IPv6 implemenion of theernet Control Message Protocol(ICMP):ICMP 的 IPv6 的實現(xiàn))的一部分,這樣做是基于 IPv4 多年的運營經(jīng)驗,這樣提供給 ND 許多便利,其中之一就是有機會充分利用 L3 層的特點,如 IPSec 加密。28 章的“建立在 ARP(IPv4)上的 ND(IPv6)改進”一節(jié)中給出了在 ND 和 ARP 之間主要不同點的概觀。圖 26-6 網(wǎng)絡(luò)堆棧中 ARP/ND 協(xié)議所處的位置如前所述,linux 也提供了一個通用的體系框架以簡化上層服務(wù)的代碼,這些服務(wù)都極其類似的使用了鄰居協(xié)議。通常

26、鄰居協(xié)議提供的服務(wù)能夠被不同的協(xié)議裁剪以適應(yīng)其各自的需要,下面列出了連接體系結(jié)構(gòu)提供給各協(xié)議的一些服務(wù):用于L3L2 層轉(zhuǎn)換結(jié)果的各協(xié)議緩存區(qū)用于在緩存區(qū)中增加、刪除、修改、查找特定的轉(zhuǎn)換條目的函數(shù)。因為查找函數(shù)會極大的影響系統(tǒng)的性能,所以它必須快。協(xié)議緩沖區(qū)條目的失效(或老化)機制當(dāng)緩存區(qū)滿,但又有新的請求需要在緩存中創(chuàng)建一個新的條目時所采用的決策策略各協(xié)議對應(yīng)的鄰居請求隊列。當(dāng)包準備好了將被發(fā)送,而緩存中又沒有其 L2 層地址時,則包必須被放到包緩沖區(qū),直到誘發(fā)請求包發(fā)送并收到響應(yīng)時??蓞⒖?27 章的“隊列”一節(jié)為了使每個協(xié)議都能夠定制鄰居子系統(tǒng)的行為,它定義了一組占位符和和虛函數(shù)以使每

27、個協(xié)議替換為它應(yīng)該使用的函數(shù)。這于絕大多數(shù) linux 內(nèi)核允許用戶定制的原理類似。鄰居層也提供了一組可調(diào)整參數(shù)用于用戶命令、/proc 文件系統(tǒng)或協(xié)議自身的配置。最后,緩存區(qū)的函數(shù)通常是面向所有的協(xié)議,但是不同的協(xié)議可以使用不同大小的關(guān)鍵字(地址)。所有,鄰居協(xié)議體系結(jié)構(gòu)提供了一個通用的方法定義使用什么類型的關(guān)鍵字,后面的章節(jié)會降到這些細節(jié)要點。每個協(xié)議都能夠被使用與獨立配置,27 章的“協(xié)議初始化和清除一節(jié)”展示了鄰居協(xié)議如何在內(nèi)核中或注銷自己。26.4鄰居協(xié)議當(dāng)一個主機截獲發(fā)到另外的主機的數(shù)據(jù)包并代替后者處理數(shù)據(jù)包時,它實際上扮演著的角的例色。當(dāng)然,這個術(shù)語也包含了發(fā)動中間人(man-h

28、e-middle)的主機.常見的一個子就是 http 服務(wù)緩沖系統(tǒng),它通過中途請求截獲數(shù)據(jù)包并重定向到其它 web 服務(wù)器 ,同時它會緩存來自于這些 web 服務(wù)器的網(wǎng)頁并提供給請求者。如果主機和應(yīng)用不需要做明確的配置去標識提供的服務(wù)功能,則這種被稱作透明的,前面提到的 http 服務(wù)緩沖系統(tǒng)就是的一個例子。但是,如圖 26-7 所示,服務(wù)既可以通過提供也可通過非提供。展示了兩個使用 http的例子:(a)被安裝在本地網(wǎng)路的路由器上以ernet,所有網(wǎng)絡(luò)上的主機的瀏覽請求都通過路第 9 頁 共 19 頁由器,因此管理員可以把路由器配置成模式以所有的 http 請求。這種情況被視作透明,因為在主

29、機 B 上不需要任何的配置或特殊編程的瀏覽器。(b)主機 B 上的瀏覽器被設(shè)置成使用名叫 proxy 的主機作為要時使用路由器(即當(dāng)其緩存內(nèi)容失效時)。ernet。主機 proxy 在必去圖 26-7 (a)(b)非前面的例子展示了流行的類型:http 或 web,現(xiàn)在來看看本書這部分的。鄰居協(xié)議的服務(wù)器是被配置成響應(yīng)誘發(fā)請求的主機,這臺主機沒有相應(yīng)的下層地址,且它用來代替實際擁有這些地址的其它主機。由于有一個局域網(wǎng)中。,不同局域網(wǎng)的主機可以相互的交互,就像在同例如:ARP通常用在 IPv4 網(wǎng)絡(luò)中協(xié)助底層到子網(wǎng)的傳輸。由于是透明的,所以主機并不需要特殊的協(xié)議或配置。但是如果服務(wù)器宕機了,則被

30、的主機之間的也中斷了,這可以通過提供多個服務(wù)器來避免。在這種情況下,主機會收到它(所廣播)的請求的多個誘發(fā)響應(yīng)。通過選擇最先到達的響應(yīng),主機可以獲得最快且負載最小的服務(wù)器(的服務(wù))。的使用也可以使依賴的主機簡化配置。28 章的“與路由”提供了這樣的一個例子。Linux 內(nèi)核實現(xiàn)的鄰居協(xié)議中,僅 IPv4 和 IPv6 能夠使用其功能。這個通用的體系架構(gòu)被這兩個協(xié)議共享,并根據(jù)需要裁剪上的 ND(IPv6)改進”小節(jié)中描述。功能。兩者之間的不同之處在 28 章的“建立在 ARP(IPv4)在 27 章的“充當(dāng)角色”一節(jié),看到協(xié)議獨立組件特性的實現(xiàn)細節(jié)(如定時器、隊列會看到 IPv4 和 ARP

31、的特殊情況的一些細節(jié)。等待)。在 28 章的“ARP”一節(jié)中,26.4.1請求條件收到的誘發(fā)請求并非都被處理,如果碰到下述情況,則服務(wù)器會響應(yīng)誘發(fā)請求一個地址:地址和接收請求的所在網(wǎng)卡配址不屬于同一子網(wǎng)。因為服務(wù)器代替其它主機響應(yīng)誘發(fā)請求,這些主機和發(fā)送誘發(fā)請求的主機一般都不在同一個子網(wǎng)。否則,(如果在同一子網(wǎng))目標主機也會和一樣響應(yīng),這樣,它也不清楚發(fā)送請求的主機會選擇哪一個響應(yīng)了。特性開啟時。這個約束聽起來很直觀,但事實并非如此。有幾個標準制約著是否需要第 10 頁 共 19 頁響應(yīng)請求,這些在不同的鄰居協(xié)議里面又有不同。在 linux 中,內(nèi)核提供了通用和理形式:a 基于設(shè)備兩種代設(shè)備收

32、到的所有請求都被處理。這是 IPv4 網(wǎng)絡(luò)中使用最常見的情況,IPv6 不用這種策略b 基于目標(地址)能夠響應(yīng)對特定 IP 地址的請在決定是否時,目標地址和設(shè)備都要被考慮。意即求,基于目標的圖 26-8 展示了兩種在 IPv6 網(wǎng)絡(luò)中被標準化了,但是在 IPv4 網(wǎng)絡(luò)中也可以使用。之間的優(yōu)先權(quán),當(dāng)主機收到本地子網(wǎng)之外地址的誘發(fā)請求時,如果主機的特性開啟了,則它可以直接處理此請求。首先子系統(tǒng)會檢測設(shè)備上的特性是否全局性開啟;如果沒有,則檢測設(shè)備是否被配置成特殊地址。圖 26-8設(shè)備和地址間的優(yōu)先權(quán)服務(wù)器收到請求時,其轉(zhuǎn)發(fā)功能是開啟的。因為服務(wù)器處在各個主機之間,它不得不在兩個終端之間轉(zhuǎn)發(fā)數(shù)據(jù)*

33、。*這并不是說通過在主機上開啟功能,就可以自動開啟轉(zhuǎn)發(fā)功能,這兩個功能是分開配置的,但是需要轉(zhuǎn)發(fā)給核實的函數(shù)。ARP 誘發(fā)請求總是發(fā)送給 L2 層廣播地址,這確保所有共享同一介質(zhì)的所有主機都可以接收到。沒有設(shè)置為混雜模式。當(dāng) ARP 進行可達確這樣,能夠截獲對這些主機的地址請求,即使認(參考“可達確認”一節(jié))時,它采用單播而不是多播。ND 用 L3 層多播地址來處理誘發(fā)請求和響應(yīng)。當(dāng)路由器要為一個被給的 IP 地址作需要使用相關(guān)聯(lián)的 L3 層多播地址。時,它第 11 頁 共 19 頁26.5 誘發(fā)請求傳遞和處理過程看到基于接收主機以及網(wǎng)絡(luò)物理拓撲配置的誘發(fā)請求是何時處理的,圖 26-9本節(jié)中,

34、列出了促使主機發(fā)送誘發(fā)請求的,圖 26-10 顯示了決定收到誘發(fā)請求的linux主機是否處理它的常見的。為了展示接收者判斷的可能的復(fù)雜性,圖 26-10 假定接收者實現(xiàn)和網(wǎng)橋的功能*;移走任何一個功能都會簡化這故略去。注意圖 26-10 展示了。圖 26-10 假定是基于設(shè)備的;基于目標的與此一致,開啟”表示是服務(wù)器和未實現(xiàn)的普通服務(wù)器兩種情況:“服務(wù)器,“”表示普通的服務(wù)器。*我在圖 26-10 中加了橋表示橋在鄰居協(xié)議前處理,所以后面可能不會看到輸入隊列的誘發(fā)請求。橋的細節(jié)在第四部分已經(jīng)描述。圖 26-9 轉(zhuǎn)發(fā)誘發(fā)請求這是協(xié)議獨立的分析,關(guān)于 ARP 更詳細的描述放在第 28 章。圖 26

35、-10處理準入的誘發(fā)請求第 12 頁 共 19 頁當(dāng)網(wǎng)橋被使能啟用時,誘發(fā)請求并不是被此主機處理,而是根據(jù)網(wǎng)橋配置被轉(zhuǎn)發(fā)給正確的網(wǎng)絡(luò)接口;即網(wǎng)橋的轉(zhuǎn)發(fā)發(fā)生在正確的網(wǎng)絡(luò)接口的鄰居協(xié)議系統(tǒng)有機會處理進入的包之前。換句話說,在 linux 內(nèi)核中實現(xiàn)的處理誘發(fā)請求之前,網(wǎng)橋就已經(jīng)處理過了,參考第四部分。假設(shè)網(wǎng)橋被了,要記住,建立在共享介質(zhì)基礎(chǔ)上的主機依然能夠收到屬于其它主機的誘發(fā)地址請求。下面是幾個影響 linux 主機是否響應(yīng)進入的誘發(fā)請求的變量:邏輯子網(wǎng)(如 IP 子網(wǎng))當(dāng)請求地址和接收誘發(fā)請求的的網(wǎng)卡所配置的L3 層地址屬于同樣的邏輯子網(wǎng)時(根據(jù)接收主機的配置),即圖 26-10 中的Same

36、 logical subnet就是這種情況。拿 IPv4 作為例子,(請求的地址)和 /24(接收網(wǎng)卡配置的地址)屬于同樣的 IP 子網(wǎng) /24當(dāng)兩個主機屬于同樣的邏輯子網(wǎng)時,它們能夠直接交互通信。否則需要路由器的協(xié)助。注意,在同樣的邏輯子網(wǎng)中,一個接口可能配置為擁有多個地址(其中之一時主地址,其它都是次地址); 在不同的邏輯子網(wǎng)中,接口也可能配置為擁有多個地址;或者上述兩種情況的組合。如果接收網(wǎng)卡在不同的邏輯子網(wǎng)并被配置擁有都個地址,則請求地址必須屬于某個子網(wǎng)。物理子網(wǎng)(LAN)當(dāng)兩臺主機屬于同一局域網(wǎng)時,原則上它們時可以直接通信的,但是實際上它們能否通信是由L3 層邏輯配置決定的。例如,圖

37、 26-1(c)中,主機在同一局域網(wǎng),但分屬不同的 ip 子網(wǎng)。每臺主機都不會去屬于不同子網(wǎng)的其它主機的地址,但是它要路由器的地址,因為路由器是它需要通信以到達遠端的主機。可以參考圖 26-9。除非使用了,否則主機決不會在網(wǎng)卡接收請求其它網(wǎng)卡配置的 L3 層地址的誘發(fā)請求。因第 13 頁 共 19 頁為圖 26-10 所示的接收者情形中,在不同的邏輯子網(wǎng)下,并不能區(qū)別同樣的物理子網(wǎng)和不同的物理子網(wǎng),因為它們沒有任何的不同,僅僅狀態(tài)是比較重要的。請求:收到的誘發(fā)請求也并非都處理,細節(jié)請參考“請求條件”一節(jié)第 28 章的“處理入隊列的 ARP 包”一節(jié)展示了 ARP 協(xié)議如何處理圖 26-10 中

38、的各種情形。26.6 鄰居狀態(tài)和網(wǎng)絡(luò)不可到達檢測(NUD)圖 26-11 簡單概括了將包傳遞給 L3 層地址的時,內(nèi)核所經(jīng)歷的步驟流程圖。圖 26-12 是一個簡單模型,展示了鄰居協(xié)議所經(jīng)歷的各種狀態(tài)。圖 26-11 和圖 26-12 中的兩個模型工作在各種情況,但 linux 內(nèi)核采用更經(jīng)典的模型處理各種可能的狀態(tài)。下一節(jié)將擴展圖 26-12 模型,后面的章節(jié)將集中在圖 26-11 所示的細節(jié)。正如看到的,管理鄰居系統(tǒng)的一個很重要的部分就是查看是否可達。圖 26-11 L3 到 L2 層地址步驟圖 26-12 L3 層到 L2 層狀態(tài)第 14 頁 共 19 頁26.6.1 可達性根據(jù)鄰居子系

39、統(tǒng)的觀點,可達性可以做如下相關(guān)類推。假設(shè)你和很多人包括我都在一個暗室里面,你說,每個人都到房間外面去,則每個人都會走出去,因為大家都能夠聽到你說話;但是如果你需要叫我出去,你需要提供某種信息,如:名字。所以,發(fā)送給廣播目的地址的誘發(fā)響應(yīng)并不能夠提供一些發(fā)送給單播目標地址的信息:任何人都可以接收廣播包,但是如果你想和某個接收者交互,必須提確的地址。鄰居系統(tǒng)認為,如果內(nèi)核能夠驗證接收者能夠正確接收到以其單播地址編址的包,主機認為是可達的,反之亦然。換句話說,就是必須雙向可達時內(nèi)核才會認為鄰居是可達的。本章接下來的部分用術(shù)語可達表示雙向可達。會在“可達確認”小節(jié)中看到可達確認的兩種方4 層確認和誘發(fā)

40、響應(yīng)。26.6.2 在 NUD 狀態(tài)間的傳輸IPv6 定義了 NUM 機制有助于快速判斷鄰居是否斷開或宕機,linux 內(nèi)核在IPv4 和 IPv6 的實現(xiàn)中采用同樣的機制。類似的模塊也會被本書沒有講述的其它協(xié)議使用,如:et。圖 26-13 總結(jié)了鄰居協(xié)議支持的狀態(tài)以及觸發(fā)狀態(tài)改變的條件。有幾種事件會導(dǎo)致創(chuàng)建鄰居條目,包括轉(zhuǎn)發(fā)數(shù)據(jù)報給鄰居的請求、或者從鄰居接收到誘發(fā)請求。鄰居條目的狀態(tài)可以在其生命期改變多次,同一個狀態(tài)可能多次出現(xiàn)在條目生命周期的不同階段。不同的協(xié)議可能導(dǎo)致不同的狀態(tài)遷移,有些特定條件下才出現(xiàn)的狀態(tài)變遷未在圖中顯示,如: IPv4 直接置最近創(chuàng)建的鄰居條目的狀態(tài)為:NUD_S

41、TALE,而IPv6 卻不這樣做。圖 26-13 后面是這些狀態(tài)的描述,可能的狀態(tài)值都是基于某類常見的屬性。每個狀態(tài)下都有圖中狀態(tài)遷移的,特別是 NUD 機制。第 15 頁 共 19 頁 基本狀態(tài)圖 26-13 的狀態(tài)定義如下,NUD_NONE表示鄰居條目被創(chuàng)建,但目前尚不可用。圖 26-13 NUD 狀態(tài)遷移從新建鄰居條目時的默認狀態(tài)開始:下面的狀態(tài)來自于 IPV6 鄰居定義,并在還在 linux ARP/IPv4 的實現(xiàn)中采用:PLETE誘發(fā)請求已經(jīng)發(fā)送,但是尚未收到響應(yīng)時所處的狀態(tài)。在這個狀態(tài)下,不可以使用任何硬件地址(not even an old one, as there is w

42、ith NUD_STALE)NUD_REACHABLE鄰居地址被緩存,并且最近已知是可達的(即以及驗證是可達的)NUD_FAILED由于誘發(fā)請求失敗而標記鄰居是不可達狀態(tài)。包括創(chuàng)建條目時生成的和由NUD_PROBE觸發(fā)的誘發(fā)請求失敗。NUD_STALE NUD_DELAYNUD_PROBE第 16 頁 共 19 頁這幾個是遷移的中間狀態(tài);當(dāng)本達確認”小結(jié)。機判斷鄰居是否可達的過程中設(shè)置這些狀態(tài)??梢詤⒖肌翱上旅鎺讉€狀態(tài)代表一組特殊的狀態(tài),通常一旦設(shè)置就不會改變了。NUD_NOARP這個狀態(tài)用于標記鄰居不需要任何協(xié)議來L3 層到 L2 層的地址轉(zhuǎn)換(參考“特殊情況”小節(jié))。28 章的“ARP 構(gòu)

43、造函數(shù)”小節(jié)中描述了在 IPv4/ARP 中為什么設(shè)置這個狀態(tài)的原因以及如何設(shè)置它。雖然這個狀態(tài)的名稱暗示它僅用于 ARP,但實質(zhì)上它使用于所有鄰居協(xié)議。 NUD_PERMANENTL2 層鄰居地址被靜態(tài)配置時的狀態(tài)置(如用戶空間命令配置),所以不需要任何鄰居協(xié)議考慮它。參考 29 章的“鄰居的系統(tǒng)管理”一節(jié)。 衍生狀態(tài)除了前面小節(jié)所列出的基本狀態(tài),為了代碼的清晰可讀,當(dāng)在某些情況下需要系統(tǒng)定義了下面的一些衍生狀態(tài):多個狀態(tài)時,NUD_VALID如果一個鄰居條目的狀態(tài)是下述幾個狀態(tài)中的一個,則可以認定它是NUD_VALID狀態(tài)。這表明鄰居確信現(xiàn)在有一個可用地址。即:NUD_PERMANENT、

44、NUD_NOARP、NUD_REACHABLE、NUD_PROBE、NUD_STALE、NUD_DELAYNUD_CONNECTED這個狀態(tài)是NUD_VALID的子集,表明沒有未決的確認處理,即如下幾個狀態(tài)都表示處在NUD_CONNECTED狀態(tài):NUD_PERMANENT、NUD_NOARP、NUD_REACHABLENUD_IN_TIMER表示鄰居子系統(tǒng)為鄰居條目提供了一個正在運行的定時器,這發(fā)生在在鄰居條目狀態(tài)不確定PLETE、NUD_DELAY、NUD_PROBE時。符合這個狀態(tài)的基本狀態(tài)是:來看一個為何衍生狀態(tài)在內(nèi)核代碼中的作用的例子,當(dāng)鄰居實例被移出時,系統(tǒng)需要停止和這個數(shù)據(jù)結(jié)構(gòu)相

45、關(guān)聯(lián)的所有未決的定時器,此時它不是將鄰居狀態(tài)與這三個狀態(tài)相比較以判斷與它們是否有相關(guān)聯(lián)的未決定時器。,而是扮演清潔器的角色,定義一個NUD_IN_TIMER,并通過為操作符&來與鄰居狀態(tài)進行比較。 初始狀態(tài)當(dāng)鄰居實例被創(chuàng)建時,其缺省的狀態(tài)是 NUD_NONE。但是當(dāng)一個外部用戶命令創(chuàng)建鄰居實例時,它將直接設(shè)置其狀態(tài)為 NUD_NONE(參考 29 章)。27 章的“鄰居初始化”一節(jié)解釋說:協(xié)議的constructor方法也可以根據(jù)相關(guān)設(shè)備驅(qū)動(如點對點)的屬性和L3 層地址(如廣播)來改變這個狀態(tài)26.6.3 可達確認在“為什么靜態(tài)指定地址不夠用”一節(jié)中看到,L3 層到 L2 層的地址可能會變

46、化。因此,如果信息有一段時間未使用了,確認信息已經(jīng)正常的達確認。在緩存中是很有意義的。這就稱為可第 17 頁 共 19 頁根據(jù)“需要鄰居協(xié)議的原因”一節(jié)中列出的原因,可達狀態(tài)的變化就不是必要的了,路由器、網(wǎng)橋、或其它網(wǎng)絡(luò)設(shè)備可能會可能仍然有效而被臨時使用。某些問題。在進行可達確認的過程中,緩存中的信息被假定為有支持可達確認工作的三個NUD狀態(tài)是:NUD_STALE, NUD_DELAY, 和NUD_PROBE。使用這三個狀態(tài)的主要原因是直到包需要被發(fā)送到相關(guān)鄰居時才有必要啟動可達確認處理。下面再次詳細說明下這三個NUD狀態(tài)的精確的意思,并看一下確認的兩種方法:NUD_STALE緩存中有鄰居的地址,但之后有一段時間沒有被確認(參考 29 章的“neigh_parms結(jié)構(gòu)”一節(jié)中關(guān)于reachable_time的)。下次,一個發(fā)送給鄰居,則會啟動可達確認處理過程NUD_DELAY這個狀態(tài)與N

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論