1. 程式人生 > >【網路基礎】ARP地址解析協議

【網路基礎】ARP地址解析協議

什麼是ARP協議?

ARP被稱為地址解析協議,它在區域網內部通過IP地址查詢到目標主機的MAC地址。即ARP協議完成了一次從IP地址到MAC地址的轉化。

為什麼需要ARP協議?

因為在區域網中,如果源主機要和目的主機建立通訊關係,那麼源主機必須要知道目的主機的MAC地址(即硬體地址),但是如果目的主機或者源主機是第一次進行通訊的,那麼源主機要怎樣才能知道目的主機的MAC地址呢? 所以這樣就引入了ARP地址協議。

ARP資料報

什麼是ARP資料報? 由上面的問題我們知道了,ARP地址解析協議的引入是為了讓源主機和目標主句在進行通訊時能夠獲得目標主機的MAC地址,那麼是如何獲得的呢?
我們知道,在網路中,主機A要獲得主機B的資訊,主機B不能給主機A主動傳送它自己的資訊,主機A要想獲得主機B的資訊,它就必須向主機B傳送相關資訊,請求主機B把自己的資訊傳送給他,這裡主機A傳送的請求資訊和主機B的應答資訊就是我們所說的ARP資料報,它有請求和應答兩種型別。
arp協議的資料報格式如下圖:
這裡寫圖片描述

下面來解釋下里面相關結構的用途:
* 幀型別*:用來向收到資料報的主機表示該資料報的型別,常見型別如下:
0800:IP資料報;
0806:ARP請求/應答資料報;
8035:RAPP請求/應答;
協議型別:表示的是ARP資料報是傳給哪一層的協議。
op:表示是應答包(0x2),還是請求包(0x1);
剩餘的一些欄位都是相關的地址,在這裡我們要注意一個問題,就是外面的首部地址和裡面的傳送端還有目的乙太網地址都是一樣的,那麼為什麼還要在一個數據報中有兩個呢? 這個問題大家先不要著急,會在下個問題中被解決。

ARP地址解析協議是如何工作的?

下面我們就來談一談ARP地址解析協議是如何把目的地址的IP地址轉化成MAC地址的。
1. 首先,主機A想要向主機B傳送訊息,但它不知道主機B的MAC地址,只知道主機B的IP地址。這時,主機A會在當前區域網下以廣播的形式傳送ARP請求資料報,表示主機A想知道主機B的MAC地址(注:廣播時,乙太網首部的目的地址為全f)。
(ARP請求資料報.png)
2. 由於是廣播,所以在本區域網上的所有主機都會受到主機A傳送的ARP資料報,然後所有主機會把乙太網首部這個報頭給去掉,向上面的網路層傳送ARP資料報。在這裡我們便可以回答上面的問題了,乙太網首部和ARP資料報內的MAC地址都不能少,一個是在資料鏈路層使用的,一個是在網路層使用的,因為兩個層都不能看到互相的資料。
3. 網路層首先會檢查op欄位,發現這時個ARP請求資料報,然後又會檢查目的IP地址欄位,檢查完畢後,這時除了主機B外,在這個區域網內的其他主機都會把資料報丟棄,因為只有主機B的IP地址和目的IP地址是相同的。
(ARP應答資料報)


5. 主機A在收到主機B的ARP應答資料報後,會在其ARP快取記憶體中寫入主機B的IP地址到主機B的硬體地址的對映,還會設定相應的生存時間。
注:
快取記憶體的引入是為了解決如果主機A在一段時間內反覆向主機B傳送資料,如果沒有快取記憶體儲存第一次傳送後得到的主機B的MAC地址,那麼每次都要傳送ARP資料報帶來的開銷是非常大的。

生存時間的引入是為了每次都要定期更新各個快取記憶體的對映關係,防止主機地址發生變化而導致沒有主機可以收到資料報,這個生存時間就是更新時間。