位址解析協定ARP
在以太網協定中規定,同一區域網路中的一台主機要和另一台主機進行直接通信,必須要知道目标主機的MAC位址。而在TCP/IP協定中,網絡層和傳輸層隻關心目标主機的IP位址。這就導緻在以太網中使用IP協定時,資料鍊路層的以太網協定接到上層IP協定提供的資料中,隻包含目的主機的IP位址。于是需要一種方法,根據目的主機的IP位址,獲得其MAC位址。這就是ARP協定要做的事情。所謂位址解析(address resolution)就是主機在發送幀前将目标IP位址轉換成目标MAC位址的過程。
對于TCP/IP網絡,位址解析協定ARP提供了一種在IPv4位址和各種網絡技術使用的硬體位址之間的映射。這裡的ARP僅用于IPv4,IPv6使用鄰居發現協定,被合并入ICMPv6中。
ARP是一個通用協定,被設計為支援多種位址之間的映射。但是,實際中ARP總是被用于32位IPv4位址和48位MAC位址之間的映射。
參考自維基百科
一個例子介紹ARP運作過程
僅在到達同一子網的主機,ARP才能工作。這裡,主機A (IP位址192.168.38.10 MAC位址 00-AA-00-62-D2-02)使用Web浏覽器通路位于同一子網中的伺服器(IP位址192.168.38.11 MAC位址00-BB-00-62-C2-02)使用直接傳遞的過程。

- 應用程式要求TCP協定建立一條到192.168.38.11的連接配接。
- 向192.168.38.11發送一個IPv4資料報,TCP嘗試向遠端主機發送一個連接配接請求。
- 位于同一子網,則資料報傳遞不經過任何路由器。
-
在将資料報封裝進以太網幀之前需要将32位的IPv4目的主機轉換為48位的以太網位址。
主機A會在自己的ARP快取記錄中尋找是否有目标IP位址。如果找到就知道目标MAC位址(00-BB-00-62-C2-02),直接把目标MAC位址寫入幀裡面發送就可。
否則,就需要ARP。
ARP工作在正常模式下,僅适用于廣播網絡,鍊路層能将一個消息傳遞到它所連結的所有裝置。
在非廣播網絡中,可能需要更複雜的映射協定[RFC 2332]。
-
在一個共享的鍊路層網段上,ARP向所有主機發送一個ARP請求的以太網幀(目标MAC位址是“FF.FF.FF.FF.FF.FF”),即進行鍊路層廣播。
ARP請求包含的内容包括發送請求主機的MAC位址和IP位址,并尋找答案:“如果你的IPv4位址為192.168.38.11,請向我回應你的MAC位址”。
-
同一廣播域中的所有系統都可接收該ARP請求,收到以太網幀的系統可能包括并不運作IPv4或IPv6協定的系統,但不包括位于不同VLAN中的系統。
如果某個系統所使用的IPv4位址是ARP請求中指定的位址,該系統将向發送請求的主機以單點傳播方式響應一個ARP應答。其餘主機不響應這個請求。
同時,接收ARP請求的主機學習IPv4到MAC位址的映射,并記錄在記憶體中供以後使用。
-
ARP應答被原始請求的發送方接收,現在就可以發送引起這次ARP請求/應答交換過程的資料報了。
将資料報封裝在以太網幀中,以ARP交換學習到的以太網位址作為目的位址,将幀發送給目的主機。這是直接傳遞,是以不需要使用路由器。并且也會将這次映射更新在ARP緩存,以便下次查表就行。
ARP用于運作IPv4的多接傳入連結路層網絡,每個主機都有自己的首選硬體位址。
在點對點鍊路中不使用ARP,實際上在點對點網絡中也不使用MAC位址,因為在此類網絡中分别已經擷取了對端的IP位址。
另外,當發送主機和目的主機不在同一個區域網路中時,即便知道目的主機的MAC位址,兩者也不能直接通信,必須經過路由轉發才可以。是以此時,發送主機通過ARP協定獲得的将不是目的主機的真實MAC位址,而是一台可以通往區域網路外的路由器的MAC位址。于是此後發送主機發往目的主機的所有幀,都将發往該路由器,通過它向外發送。這種情況稱為委托ARP或ARP代理(ARP Proxy)。
ARP緩存
ARP能夠高效運作是因為ARP維護着每個主機個路由器上的ARP緩存(或表)。該緩存使用位址解析為每個接口維護從網絡層位址到硬體位址的最新映射。當一個映射條目被建立時,其正常到期時間是條目建立開始後的20分鐘。
在Linux或Windows中可使用arp指令(百度百科)檢視arp緩存。
ARP幀格式
了解了ARP運作的基本過程,下面繼續深入了解ARP幀的具體格式。
上圖為IPv4位址映射到48位的MAC位址時使用的ARP請求和應答分組的格式。
- 在ARP幀的以太網頭部中, DST和SRC
分别代表目的和源的以太網位址。
對于ARP請求,DST為ff:ff:ff:ff:ff:ff,即廣播位址。
- 在以太網幀中,對于ARP(請求或應答),2位元組長度的 長度或類型 字段的值必須為0x0806。
- 固定大小的前四個字段指出了可變大小的四個字段的類型和大小。
- 硬體類型 指出硬體位址類型。對于以太網該值為1。 協定類型 字段指出映射的協定位址類型。對于IPv4位址,該值為0x0800。
- 硬體大小和協定大小
分别指出硬體位址和協定位址的位元組數。
對于以太網中使用IPv4位址的ARP請求或應答,它們的值分别為6和4。
- Op字段
指出該操作是ARP請求(值為1),ARP應答(值為2),RARP請求(值為3)或RAPR應答(值為4)(RAAP是ARP的反向映射協定)。
此字段用于區分ARP分組是請求還是應答分組。
-
這後面的四個字段如圖上描述。這裡也會出現一些重複資訊:以太網頭部和ARP消息都包含發送方的硬體位址。
在ARP請求中,除目的硬體位址(設為0)外,其他字段都要填充。
在ARP應答中,接收主機收到請求填上自己的硬體位址,并置換源和目的位址,Op設為2。
與ARP相關的一些補充
ARP緩存逾時
在大多數實作中,完整條目的逾時時間為20分鐘,不完整條目(如強迫執行一次到不存在主機的ARP請求)為3分鐘。[RFC 1122]中規定條目即使在使用時也啟動逾時,但是很多實作是在每次使用條目後啟動逾時。
這是關于軟狀态的一個重要例子。軟狀态是指在逾時到達前沒有更新而被丢棄的資訊。
如果網絡條件發生變化,軟狀态有助于啟動自動重新配置,是以很多Internet協定使用軟狀态。
軟狀态的成本是協定必須重新整理狀态以免過期。
在一些協定設計中,經常包含“軟狀态”重新整理,以保持軟狀态活躍。
代理ARP
代理ARP使一個系統(通常為一個專門配置的路由器)可回答不同主機的ARP請求。
它使ARP請求發送者認為做出響應的系統就是目的主機(目的主機在其他地方)。
代理ARP也被稱為混雜ARP或者ARP黑客。這兩個名詞源于代理ARP的用途:兩個實體網絡互相隐蔽自己。
從前,一個網絡使用代理響應其他網絡對于自己的請求,有兩個常見原因:①有些系統無法進行子網劃分②有些系統使用比較久的廣播位址
免費ARP
ARP還有一個功能被稱為免費ARP。通常發生在啟動,接口被配置為“上行”,一台主機發送ARP請求尋址自己的位址時。
免費ARP需要達到兩個目标:
-
允許一台主機确定另一台主機是否配置相同的IPv4位址。
發送免費ARP的主機并不期望收到應答。但是,若收到一個應答,通常顯示的就是錯誤消息:“從以太網位址······發送的重複IP位址”。
-
如果發送免費ARP的主機以已改變硬體位址(關閉主機或替換接口卡,然後重新啟動主機),
該幀導緻任何接收廣播并其緩存中有該條目的其他主機,将該條目中地舊硬體位址更新為與該幀一緻。
免費ARP提供的一些迹象顯示,多個站可以嘗試使用相同的IPv4位址,但是沒有對産生IP位址沖突有解決機制。為解決這個問題,[RFC 5227]描述了IPv4位址沖突檢測(ACD),采用一種持續的類似于免費ARP的交換,來避免在同一廣播域中位址重複。
推薦使用DHCP配置設定位址。
《TCP/IP詳解 卷1》學習筆記
每天進步一點點,不要停止前進的腳步~