ARP協議詳解


ARP協議簡介

IP地址屬於網絡層,但ip地址在傳輸的時候需要跨越不同的物理網絡進行交換,此時如果一台主機要將一個幀發送到另一台主機,光知道其ip地址是不夠的,還需要知道其有效的“硬件地址”。

ARP(地址解析協議)就提供了一種在32位IPv4地址和以太網的48位MAC地址(硬件地址)之間的映射。

 

ARP提供的是網絡層地址到相關硬件地址的“動態映射”,即:會自動執行和隨時間變化,而不需要系統管理員的配置。(如一台一台主機改變了它的網卡后(mac地址改變),ARP可以在一定延時后繼續正常工作)

 

整體流程

http://10.0.01當本地計算機在瀏覽器中瀏覽一個網頁時:

本地計算機先是判斷該服務是位於本地(看ip地址是否位於同一子網)還是遠程。

如果是遠程,且發送端與遠程接收端之間是“直接交付”(擁有相同的ip地址前綴)的形式,

整體流程如下圖:

 

 

(1)瀏覽器調用一個特殊的函數來解析URL,看其是否包含域名(主機名)。(此例子使用的是IPv4地址)

(2)應用程序要求TCP協議建立一條到10.0.0.1的連接。

(3)TCP嘗試向遠程主機發送一個連接請求(此時由於假定的是直接交付,所以中途不經過任何路由器)。

(4)、(5)查看本地主機的“ARP緩存(或表)”中是否已經緩存了ip地址與mac地址之間的映射,如果沒有緩存,則進入下面的步驟。

(6)在一個共享的鏈路層網段上(ARP協議多用於局域網內的直接交付),ARP向“所有主機”發送一個稱為“ARP請求”的以太網幀。這種行為被稱為“以太網廣播”(也叫鏈路層廣播)。而“ARP請求”的目的是:如果某主機接收了該ARP請求,且該主機IPv4地址也與10.0.0.1一致,那么這台主機請返回給我你的MAC地址。(ARP協議就是用這種方式,知道了10.0.0.1地址所對應的MAC地址)。(IP地址不匹配的主機會主動丟棄掉ARP請求)

(7)假設找到了“使用10.0.0.1作為IPv4地址”的主機,那么該主機的ARP協議需要響應一個“ARP應答”。該應答包含該主機的IPv4地址和MAC地址。該應答會直接發送給請求的發送方。

(8)“ARP應答”被原始請求的發送方接收。

(9)發送方將數據報封裝在以太網幀中,使用通過ARP協議獲取到的接收方的MAC地址,直接將以太網幀發送給接收方。

 

由此該以太網幀僅指向正確的目的主機,其他主機或路由不會接收到這個數據報。

通過這個流程,我們也能明白:當僅使用直接交付時,並不需要經過路由器。

 

APR緩存

為了使ARP高效運行,每個主機或路由器上都維護有一張“ARP緩存表”。

該緩存存儲了每個接口從網絡層地址(ip地址)到硬件地址(mac地址)的最新映射關系。

緩存正常的到期時間為:條目創建開始后的20分鍾。(管理員也可設置緩存條目永不超時)

 

每個映射的緩存條目包含5個元素:

主機名(對應一個ip地址)、硬件地址類型、硬件地址、標志、本地網絡接口。

 

其中“標志”包含了一個符號:C、M或P.

C表示,該緩存條目是由ARP協議自己“動態學習”得來的。

M表示,該緩存條目是手工輸入的。

P表示,該緩存條目是“發布的”。對於任何P類的緩存條目,主機對輸入的ARP請求都返回一個ARP相應。該選項用於配置代理ARP。

 

ARP幀格式

 

 

前14個字節(MAC頭部)是一個標准的以太網幀頭部,DST表示目的MAC地址,SRC表示源MAC地址,長度或類型用於確定頭部后面的數據類型,常見的值包括:0x0800(IPv4)、0x86DD(IPv6)、0x0806(ARP)

 

前14個字節之后,由ARP協議來定義,ARP幀的前8個字節時通用的:

硬件類型字段指出硬件地址類型,對於以太網,該值為1.

 

協議類型字段指出映射的協議地址類型,對於IPv4地址,該值為0x0800。(當以太網幀包含“IPv4數據報”時,長度或類型字段與協議字段可能一樣,即都是0x0800)

 

硬件大小和協議大小分別指出硬件地址和協議地址的字節數。(對於以太網中使用IPv4地址的ARP應答,其值為6和4)

 

Op字段指出該操作是:ARP請求(值為1)、ARP應答(2)、RARP請求(3)、RARP應答(4)

 

代理ARP

代理ARP是一個系統(通常是一個路由器)可回應不同主機的ARP請求(簡單的說就是不管你找的是不是我,我都響應你,把我的mac地址告訴你,這樣你下次再訪問該ip時,通過arp緩存表,自動就訪問到我這台冒名的主機上了)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM