地址解析協議

概述

 

       根據OSI模型的要求,爲了跨越不同類型物理網絡進行分組交換,需要網絡層軟件使用的地址和底層網絡硬件使用的地址之間進行轉換。網絡接口硬件通常有一個主要的硬件地址(如MAC地址),由硬件交換的幀需要使用正確的硬件地址定位到正確的接口。但Internet網絡需要使用自己的IP地址。主機之間的通信需要跨越多層網絡,僅知道IP地址是不夠的,還需要知道主機在網絡中的有效硬件地址。在TCP/IP中,地址解析協議(Address Resolution Protocol,ARP)提供了IP地址到硬件地址(主要是MAC地址)的動態映射,可以根據IP地址獲取到MAC地址。
       ARP提供的從網絡層地址到相關硬件地址的映射是動態的,它會自動執行並隨時間變化,這意味着當網絡發生改變時,ARP可以在一定延時後繼續正常運作,不需要管理員重新配置。
       ARP僅用於IPv4,IPv6使用鄰居發現協議(Neighbor Discovery Protocol,NDP),它被合入ICMPv6。

 

工作過程

ARP的工作過程如圖所示:

 

       ARP工作在正常模式下,僅適用於廣播網絡,以使鏈路層能將一個消息(ARP幀)交付到它連接的所有網絡設備,這是ARP運行的一個重要要求。在一個共享的鏈路層網段上,ARP向所有主機發送一個稱爲ARP請求的以太網幀,這被稱爲鏈路層廣播,ARP請求包含目的主機的IP地址。
       通過ARP,同一廣播域中的所有主機可以接收ARP請求,這包括可能根本不運行IPv4或IPv6協議的系統,但不包括位於不同VLAN中的主機。如果某個主機使用請求中指出的IPv4地址,它僅需要相應一個ARP應答(也是以太網幀)。這個應答包含IPv4地址(與請求相匹配)和對應的MAC地址。這個應答通常不是廣播,而是僅直接發送給請求的發送方。同時接收ARP請求的主機學習IPv4到MAC地址的映射並記錄到內存中供以後使用。
       ARP應答被對應ARP請求的發送方接收,現在可發送引起這次ARP請求/應答過程的數據報,即雙方可以正式開始通信了。發送方可將數據報封裝在以太網幀中直接發送到目的主機,因爲已經通過ARP獲取了目的主機的MAC地址。
點到點鏈路(例如PPP)不使用ARP。因爲當這些鏈路被建立後(通常是由用戶或系統來發起創建),在鏈路兩端通知正在使用的地址。由於不涉及硬件地址,因此不需要地址解析。

 

ARP緩存

 

       ARP高效運行的關鍵是維護每個主機和路由器上的ARP緩存。該緩存使用地址解析爲每個接口維護從網絡層地址到硬件地址的最新映射。當IPv4地址映射到硬件地址時,它對應於高速緩存中的一個條目,其正常到期時間是條目創建後的20分鐘。

 

ARP緩存超時

 

       ARP緩存中的條目都有一個動態的生存週期,超時通常與ARP緩存中的每個條目有關(arp命令允許管理員設置緩存條目永遠不超時,即設置爲靜態條目)。通常情況下,完整條目的超時爲20分鐘,而不完整條目的超時爲3分鐘,當條目在使用後會重置超時時間。軟狀態(在超時到達前沒有更新而被丟棄的信息)有助於在網絡狀態發生改變後啓動自動重新配置。軟狀態的成本是協議必須刷新狀態以避免過期。

 

代理ARP

 

       代理ARP(proxy ARP)是ARP協議的一個變種,它使一個系統(通常是一臺專門配置的路由器)可回答不同主機的ARP請求。它使ARP請求的發送者認爲做出響應的系統就是目的主機,但實際上目的主機可能在其他地方或根本不存在。對於沒有配置默認網關的主機,要和其他網絡中的主機實現通信,網關收到發送方的ARP請求會使用自己的MAC地址與目標主機的IP地址對發送方進行應答。代理ARP會給網絡帶來巨大風險,除了ARP欺騙攻擊和某個網段內ARP增加,還會導致無法對網絡拓撲進行概括。因此代理ARP並不常用,通常應儘量避免使用它。
       代理ARP的歷史用途主要是讓兩個物理網絡相互隱蔽自己。在這種情況下,兩個物理網絡可使用相同的IP前綴,只要將中間的路由器配置爲一個代理ARP,由代理響應其他網絡中主機的ARP請求。這種技術可用於向一組主機隱藏另一組主機。以前ARP之所以被應用是因爲它能夠在不影響其他路由器的路由表的情況下在網絡上添加一個新的路由器,這樣使得子網的變化對主機是透明的,因此還可以複用IP地址。
       Linux支持一種稱爲自動代理ARP的功能,它可通過在特定文件中寫入字符1或使用sysctl命令來啓用。它支持使用代理ARP功能,而不必爲被代理的每個可能的IPv4地址手工輸入ARP條目。這樣做允許自動代理一個地址範圍而不是單個地址。

 

免費ARP和地址衝突檢測

 

       免費ARP(gratuitous ARP)是ARP的另一個功能,它發生在一臺主機發送ARP請求以尋找自己的地址時。主機啓動時,當接口被配置爲“上行”時(即系統引導期間進行接口配置時)常這樣做。免費ARP不僅可以在自身物理地址改變(如更換物理網卡)時更新自身的MAC地址,還被用於IP地址衝突檢測。

 

獲取MAC地址

 

       如果發送免費ARP的主機已改變硬件地址,該幀導致任何接收廣播並且其緩存中有該條目的其他主機將該條目彙總的舊硬件地址更新爲與該幀中包含的硬件地址一致,這由接收到免費ARP的主機完成。
發送免費ARP的主機並不期望它的請求獲得應答。但是,如果它接收到一個應答,通常顯示的是錯誤信息“從以太網地址……發送的重複IP地址”以警告系統管理員和用戶,在同一廣播域中有一個系統配置錯誤。這允許一臺主機確定另一臺主機是否配置相同的IPv4地址。

 

地址衝突檢測

 

       地址衝突檢測(Address Conflict Detection,ACD)定義了ARP探測分組和ARP通告分組。ARP探測分組是一個ARP請求分組,其中發送方協議地址字段被設置爲0。探測分組用於查看一個候選IPv4地址是否被廣播域中的任何其他系統所使用。通過將發送方協議地址字段設置爲0,避免候選IPv4地址被另一臺主機使用時的緩存污染,這是它與免費ARP工作方式的一個差別。ARP通告分組與ARP探測分組相同,除了其發送方協議地址和目的協議地址字段被填充爲候選IPv4地址以外。ARP通告分組用於向廣播域中的其他主機通告發送方使用候選IPv4地址的意圖。
       當一個接口被啓用或從睡眠中喚醒,或從一個新鏈路建立時,主機發送一個ARP探測分組。在發送3個探測分組之前,首先需要等待一個隨機事件(範圍爲0~1秒,均勻分佈)。當多個系統同時啓動時,通過延遲來避免擁塞,否則都立即執行ACD將導致網絡流量激增。探測分組之間存在一個隨機的時間間隔,大約1~2秒的延遲(均勻分佈)。
       當ARP探測分組的發送方發送探測時,可能接收到ARP請求或應答,對其探測的應答表明其他主機已經使用了該候選IP地址。從不同的系統發送的請求,其目的地址協議字段中包含相同的候選IPv4地址,表明其他系統也在同時嘗試獲得候選IPv4地址。這兩種情況下,該系統會顯示一個地址衝突信息,並採用其他可選地址。
       如果發送探測分組的主機沒有發現衝突,它會間隔2秒向廣播域中發送2個ARP通告,以表明它將要使用這個地址。發送通告的目的是確保更新其他系統更新緩存地址映射,以正確反映發送方當前使用的地址,同時避免地址衝突。

 

       ACD是一個持續的過程,這是它與免費ARP的區別。當一臺主機通告它正在使用的地址後,它會繼續檢查輸入的ARP流量(請求和應答),查看自己的地址是否出現在發送方協議地址字段中。如果是,說明其他系統與自己在使用相同的地址。這種情況下,[RFC5227]提供了3種可能的解決方案:停止使用該地址;保留地址但發送一個“防禦性”ARP通告,如果衝突繼續,則停止使用它;不理會衝突,繼續使用該地址。對於最後一個選項,僅建議那些真正需要一個固定、穩定地址的系統,如打印機、路由器等嵌入式設備。

免費ARP與普通ARP

        普通ARP向廣播域中的其他系統發送ARP請求/應答分組,用於請求目的主機的硬件地址或發送自己的硬件地址以進行通信;免費ARP則向廣播域中其他系統發送ARP檢測/通告分組,用於通知其他系統自己要使用的IP地址及自身的硬件地址,加上檢測機制就可以檢測IP地址衝突問題。

使用ARP設置嵌入式設備的IPv4地址

 

       物聯網時代的到來讓越來越多的嵌入式設備與以太網、TCP/IP協議兼容,這些嵌入式設備往往無法直接輸入網絡配置信息。這些設備通常採用以下兩種方式配置:使用DHCP(詳情點擊:傳送門)自動分配地址和其他信息;使用ARP設置IPv4地址,雖然這種方法並不常見。

 

       通過ARP爲嵌入式設備配置IPv4地址並不是該協議的初衷,因爲它不是完全自動的。它的基本思路是爲設備手動建立一個ARP映射,然後向這個地址發送一個IP分組。由於相應ARP條目已經存在,因此不會產生ARP請求/應答。相反,硬件地址可以立即使用。這樣的配置的前提是設備的MAC地址已知(通常印在設備上,有時兼做製造商的設備序列號)。當設備接收到一個目標爲自身硬件地址的分組時,這個數據報包含的目的地址用於指定其初始的IPv4地址。此後,這臺設備可以用其他方式(例如通過一臺嵌入式Web)完成配置。

 

                                                    本文部分內容摘自《TCP/IP詳解 卷1:協議(中文版)第2版》,有改動

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章