1. 程式人生 > >計算機網路--地址解析協議ARP

計算機網路--地址解析協議ARP

很多時候,我們知道了目的主機的IP地址,然而在資料鏈路層運輸的時候我們還需要知道目的主機的MAC地址。那麼本文的標題,地址解析協議或者是ARP就能夠幫我們解決這個問題。

因為是IP協議使用了ARP協議,因此也常把ARP協議劃到網路層。然而ARP協議是為了把網路層的IP地址解析成資料鏈路層的MAC地址,所以將ARP協議劃歸資料鏈路層也是可以的。

從IP地址解析出MAC地址存在一些問題,比如說IP地址跟MAC地址因為格式不同而不存在簡單的對映關係。再比如說,網路中隨時可能有新的主機加入,也可能有主機撤出,或者是更換網絡卡(網路介面卡)也會改變主機的硬體地址。ARP通過在主機的ARP快取記憶體中存放一個從IP地址到MAC地址的對映表來解決這些問題,並且還動態更新這個表。

每一個主機都設有一個ARP快取記憶體(ARP cache),裡面存有本區域網內各主機和路由器的IP地址到MAC地址的對映。那麼問題就來了,主機是怎麼知道這些地址的呢?這裡舉個例子加以說明。

當主機A向同一區域網上的主機B傳送IP資料報時,就會先在自己的ARP快取中查詢有誤主機B的IP地址,如果有就直接把主機B的MAC地址寫入MAC幀,然後通過區域網直接發出。

但是也有可能查不到有B的IP地址的表項,在這種情況下就需要ARP協議出馬了。

  1. 首先ARP程序在區域網上廣播一個ARP請求分組,具體內容如下圖所示。
  2. 本區域網上所有主機上執行的ARP程序都收到此ARP請求分組。
  3. 主機B的IP地址與ARP請求分組中的IP地址一致,所以B就收下這個ARP請求,並向主機A傳送ARP響應分組,同時在這個響應分組裡寫入自己的MAC地址。其餘的主機由於IP地址與ARP請求分組中查詢的IP地址不同,於是都不會響應這個請求。
  4. 主機A收到主機B的ARP響應分組之後,就在其ARP快取記憶體中寫入主機B的IP地址到MAC地址的對映。主機B也會將主機A的IP地址到MAC地址的對映寫入自己的ARP快取。

在這裡插入圖片描述

在這裡插入圖片描述

對於儲存進APR快取記憶體的表項,儲存時間也不是沒有上限的,一般來說是10~20分鐘。這個儲存有效時間也稱為生存時間。但凡超過生存時間的表項一律會被刪除。

需要注意的是,ARP是解決同一個區域網內的主機或者路由器的IP地址和MAC地址的對映關係。如果所要查詢的主機和源主機不在同一個區域網上,那麼通過ARP協議是無法解析出主機MAC地址的。源主機在這個時候會將資料發給區域網的路由器,路由器根據路由表跳轉,最終到達主機所在網路。

最後,可能各位看官腦海中一直存在一個疑問,那就是為什麼不直接使用MAC地址?。這樣的話似乎就可以不使用ARP了。
其實是因為世界範圍記憶體在著許許多多的網路,它們使用不同的硬體地址,要使這些異構網路互相通訊就必須進行非常複雜的硬體地址轉換工作。IP地址將這個複雜問題解決了,所有主機都有一個唯一的IP地址,它們之間的通訊就像連線在同一個網路一樣。