1. 程式人生 > >網路基礎之ARP地址解析協議(為什麼IP地址和MAC地址都要有,又是如何通過IP地址解析到MAC地址的)

網路基礎之ARP地址解析協議(為什麼IP地址和MAC地址都要有,又是如何通過IP地址解析到MAC地址的)

  • ARP協議      Address Resolution Protocol      地址解析協議

 在區域網中,網路中實際傳輸的是“幀”,幀裡面是有目標主機的MAC地址的。在乙太網中,一個主機要和另一個主機進行直接通訊,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。所謂“地址解析”就是主機在傳送幀之前將目標主機的IP地址轉換成目標主機的MAC地址的過程。ARP協議的基本功能就是通過目標主機的IP地址,查詢目標主機的MAC地址,以保證通訊的順利進行。協議又稱做服務,ARP協議也即ARP服務,提供把IP地址轉換成MAC地址的服務!

IP地址與MAC地址在互連網中的作用

  既然每個乙太網裝置在出廠時都有一個唯一的MAC地址了,那為什麼還需要為每臺主機再分配一個IP地址呢?或者說為什麼每臺主機都分配唯一的IP地址了,為什麼還要在網路裝置(如網絡卡,集線器,路由器等)生產時內嵌一個唯一的MAC地址呢?主要原因有以下幾點:(1)IP地址的分配是根據網路的拓樸結構,而不是根據誰製造了網路設定。若將高效的路由選擇方案建立在裝置製造商的基礎上而不是網路所處的拓樸位置基礎上,這種方案是不可行的。(2)當存在一個附加層的地址定址時,裝置更易於移動和維修。例如,如果一個乙太網卡壞了,可以被更換,而無須取得一個新的IP地址。如果一個IP主機從一個網路移到另一個網路,可以給它一個新的IP地址,而無須換一個新的網絡卡。

無論是區域網,還是廣域網中的計算機之間的通訊,最終都表現為將資料包從某種形式的鏈路上的初始節點出發,從一個節點傳遞到另一個節點,最終傳送到目的節點。資料包在這些節點之間的移動都是由ARP(Address Resolution Protocol:地址解析協議)負責將IP地址對映到MAC地址上來完成的。

  1. 我們的網路基礎硬體是工作在網絡卡與交換機的二層結構下的,只能識別MAC地址;
  2. 這二層結構並不能直接識別IP地址定址,如果要走TCP /IP協議必須最終轉換成MAC地址。
  3. IP地址只是一個邏輯地址,主機相互通訊時,首先要知道對方IP地址所對應的實體地址才能在物理網路上進行傳輸;地址解析通過ARP協議
    完成。

主機的乙太網網絡卡只能識別MAC地址,而不能識別IP地址,若資料幀中不指明主機B的MAC 地址,主機B的網絡卡不能識別該幀是發給自己的,因此主機A僅知道主機B的IP地址還不夠,還必須知道主機B的MAC地址,才能完成對主機B的訪問;網路之間是用IP地址定址,網路之內(同一物理網段或稱IP子網)是用MAC地址定址。

為了通俗易懂的解釋ARP協議的作用,這裡就舉一個簡單的PING命令例子:

  假設在一個區域網中,(注意這裡的前提是兩臺主機在同一區域網中)我們的計算機IP地址是192.168.1.1,現在DOS視窗中執行這個命令:ping192.168.1.2。該命令會通過ICMP協議傳送ICMP資料

包。該過程需要經過下面的步驟:

1、應用程式構造資料包,該步驟是產生ICMP包,然後把它提交給核心(網絡卡驅動程式);

2、核心檢查是否能夠轉化該IP地址為MAC地址,也就是在本地的ARP快取中檢視IP-MAC對應表;

3、如果存在該IP-MAC對應關係,那麼跳到步驟7;如果不存在該IP-MAC對應關係,那麼接續下面的步驟;

4、核心進行ARP廣播,即傳送 ARP Request,向整個網路中大喊,這個IP是誰的,這個IP是誰的(這個ARP Request中包含有我們計算機的MAC地址;

5、當192.168.1.2主機接收到該ARP請求後,就傳送一個ARP 迴應,即ARP REPLY命令,說道:這個IP是我的,你看這是我的MAC地址(ARP Request中包含自己的MAC地址);

6、我們的計算機獲得192.168.1.2主機的IP-MAC地址對應關係,就儲存到自己的ARP快取中;

7、核心將把目標主機IP轉化為MAC地址,然後封裝在乙太網頭結構中,再把資料傳送出去;

8、這樣主機B看到傳送過來的資料包包頭裡有自己的MAC地址,才會識別它,噢,這個資料是傳送給我的(當資料包包頭裡只有B的IP地址時,主機B會不認識它,不去接收這個資料包)

  IP地址具有全網範圍內的定址能力,主機A和B可能分別處在不同網路,主機A要訪問主機B首先要知道主機B的IP地址,不然找不到主機B所在的網路。也就是說有了主機B的IP地址,主機A會知道主機B在哪裡,知道它所在的網路,但不會把資料給它,只有得到它的MAC地址,之後,才會給它,就像驗證身份證一樣。

  使用  arp  -a  命令就可以檢視本地的ARP快取內容,所以,執行一個本地的PING命令後,ARP快取就會存在一個目的IP的記錄了。當

然,如果你的資料包是傳送到不同網段的目的地,那麼就一定存在一條閘道器的IP-MAC地址對應的記錄。

  知道了ARP協議的作用,就能夠很清楚地知道,資料包的向外傳輸是非常依賴MAC地址,可以看出ARP協議在網路傳輸中的不可缺少的作用。

假如說兩臺主機不在同一區域網,即便知道目的主機的MAC地址,兩者也不能直接通訊,必須經過路由轉發才可以。所以此時,傳送主機通過ARP協議獲得的將不是目的主機的MAC地址,而是一臺可以通往區域網外的路由器的某個埠的MAC地址。於是此後傳送主機發往目的主機的所有幀,都將發往該路由器,通過它向外傳送。這種情況稱為ARP代理(ARP Proxy)。也就是說,本地主機當尋求一個IP地址的MAC時,找不到,不是同一區域網,那它會收到路由器的MAC地址,說,這個資料就交給你了,剩下的事就你來處理了,你去找目的主機吧!

 每次都要用ARP request來尋求MAC是很低效的,ARP cache則很好的解決了這個問題

ARP協議工作在交換機(區域網內部)那一層面

總結:

  1. IP地址是邏輯地址定址,工作在網路層,具有全網範圍內的定址能力,可以快速定位目標地址所在的網路
  2. MAC地址是實體地址定址,工作在資料鏈路層,要將資料包發給對方必須知道對方的MAC地址,因為主機的乙太網網絡卡只能識別MAC地址