網路層(七)地址解析協議ARP
地址解析協議ARP需求
我們知道,在網路層使用的是IP地址,但 在實際網路的鏈路中傳送資料幀時,最終還是必須使用該網路的硬體地址。 但 IP地址和硬體地址 之間由於格式不同而 不存在簡單的對映關係 ,(例如IP地址有32位,而區域網的硬體地址有48位)。我們需要已知一個機器(主機或者路由器)的IP地址,找到其對應的硬體地址的方法
址解析協議ARP(Address Resolve Protocal)就是用來解決這樣的問題 的,下圖說明了ARP協議的作用

由於是IP協議使用了ARP協議,因此通常就把ARP協議劃歸網路層, 但ARP協議的用途是為了從網路層使用的IP協議解析出在資料鏈路層使用的硬體地址
地址解析協議ARP的實現
地址解析協議的用途是完成IP協議至硬體地址的解析,ARP解決這個問題的辦法是在 主機ARP快取記憶體中存放一個從IP地址到硬體地址的對映表 ,並且這個對映表還經常動態更新(新增或者超時刪除)
主機獲取快取的例子
使用ARP的需求
每一臺主機都設有一個ARP快取記憶體(ARP cache), 裡面有本區域網上的各主機和路由器的IP地址到硬體地址的對映表,這些都是該主機目前知道的一些地址。那麼 主機是如何知道這些地址的呢? 這裡我們以一個例子說明

在上圖中,主機A要向 本區域網 上的某個主機B傳送IP資料報時,就在其ARP快取記憶體中,檢視有無B的IP地址。如有,就在ARP快取記憶體中查出其對應的硬體地址,再把這個硬體地址寫入MAC幀,然後通過區域網把該MAC幀發往此硬體地址。
若查不到主機B的IP地址的專案,這可能主機B剛入網,也可能主機A剛加電,其快取記憶體還是空的。在這種情況下,主機A就自動執行ARP,按以下步驟獲取主機B的硬體地址
步驟
(1)ARP程序在本區域網上 廣播 傳送一個ARP請求分組,主要內容是,我的IP地址是209.0.0.5, 硬體地址是00-00-C0-15-AD-18。 我想知道IP地址為209.0.0.6的主機的硬體地址
(2)在本區域網上的所有主機上執行的ARP程序都收到此ARP請求分組
(3)主機 B的IP地址與ARP請求分組中要查詢的IP地址一致,就收下這個ARP請求分組, 向主機A傳送ARP響應分組,並寫上自己的硬體地址。 雖然ARP 請求分組是廣播發送的,但是ARP響應分組是普通的單播 ,即從一個源地址發向一個目的地址
其餘所有主機的IP地址與ARP請求分組中要查詢的不一致,不理睬這個請求
(4)主機A收到主機B的ARP請求響應分組後,就在其ARP快取記憶體中寫入主機B的IP地址到硬體地址的對映

快取記憶體作用及生存時間
快取記憶體的作用
如果 不使用ARP快取記憶體 ,那麼任何一個主機只要進行一次通訊,就必須在網路上用廣播方式傳送ARP請求分組,這就使得 網路上的通訊量大大增加 。ARP把已經得到的地址對映儲存在快取記憶體中國,這樣就使得該主機下次再和具有同樣目的地址的主機通訊時,可以 直接從快取記憶體中找到所需的硬體地址 而不必再用廣播方式傳送ARP請求分組
例如,在上面的例子中,當主機B收到A的ARP請求分組時,就把主機A的這一地址對映(IP->硬體地址)寫入自己的ARP快取記憶體中。以後主機B可以不再發起ARP請求,而直接向A傳送資料
快取記憶體中對映的生存時間
我們講快取記憶體可以降低網路的通訊量,便於不同主機間通訊,但是IP至硬體地址的對映不是恆定的,是需要動態更新的。 ARP把儲存在快取記憶體中的每一個對映地址專案都設定生存時間 (例如10 ~ 20分鐘)。凡是超過生存時間的專案就要從快取記憶體中刪除掉,這樣動態更新,保證了IP至硬體地址的可靠性
設想這樣一種情況,主機A和主機B通訊,A的ARP快取記憶體中有B的硬體地址,但是B的網路介面卡突然壞了,B立即換了一塊,因此B的硬體地址發生了改變。A使用其ARP快取記憶體B原先的硬體地址,向B傳送資料幀,此時A無法找到B。但過了一段不長的生存時間,A的ARP快取記憶體裡面已經刪除了B原先的硬體地址,A重新廣播發送ARP請求分組,又找到了B
ARP使用的典型情況
ARP解決同一個區域網上IP至硬體地址的對映問題
請注意,ARP是解決同一個區域網上的主機或者路由器的 IP地址和硬體地址的對映 ,如果所要找的目的主機H2和源主機H1不在一個區域網上,則主機H1需要將傳送給H2的IP資料報,交同一區域網內的R1轉發。此時,H1需要把路由器R1的IP地址IP3解析為硬體地址HA3。此後,R1從轉發表中找到下一跳路由器R2,同時使用ARP解析出R2的硬體地址HA5.路由器R2在轉發這個IP資料報時,使用類似的方法解析出目的主機H2的硬體地址HA2,使IP資料報最終交付給主機H2

使用ARP的四種典型情況
面介紹了ARP協議適用於同一區域網上IP至硬體地址的對映問題,下面我們歸納出使用ARP的四種典型情況。在其他情況下,也是以上幾種情況的反覆使用而已

(1) (H1 ->H2,不需中轉) 傳送方是主機(如H1),要把IP資料報傳送到 同一個網路 上的另一個主機(如H2).這時H1傳送ARP請求分組(區域網1上廣播),找到目的主機H2的硬體地址
(2) (H1 ->H3,需R1中轉) 傳送方是主機(如H1),要把IP資料報傳送到 另外一個網路(H3或H4) 。這時H1傳送ARP請求分組(區域網1上廣播),找到網1上的一個路由器R1的硬體地址。剩下的工作由路由器R1來完成
(3) (R1->H3,不需中轉) 傳送方是路由器(如R1),要把IP資料報傳送到 同一個網路 上的主機(如H3).這時R1傳送ARP請求分組(區域網2上廣播),找到目的主機H3的硬體地址
(4) (R1->H4,需中轉) 傳送方是路由器(如R1),要把IP資料報傳送到 另外一個網路 上的主機(如H4).這時R1傳送ARP請求分組(區域網2上廣播),找到網2上的一個路由器R2的硬體地址。剩下的工作由路由器R2來完成
問題
既然在網路鏈路層上傳送的幀最終按照硬體地址找到目的主機的,那麼我們為什麼不直接使用硬體地址進行通訊,而是使用抽象的IP地址並呼叫ARP來尋找相應的硬體地址呢?
由於全世界存在各式各樣的網路,它們使用不同的硬體地址。要使這些異構網路能夠互相通訊就必須進行非常複雜的硬體地址轉換工作,但是統一的IP地址把這個複雜的問題解決了,連線到因特網上的主機只需擁有統一的IP地址,它們之間的通訊就像連線在一個網路上那樣方便
因此,在虛擬的IP網路上,用IP地址進行通訊為廣大使用者帶來了方便。這就好像不同國家貨幣兌換,價值並不變化,IP地址將所有裝置構建在一個虛擬互聯的網路裡面,但是在單一區域網內,依舊使用本區域網特定的硬體地址進行定址,進行資料交付