ARP協議的流程示意
ARP協議我們雖然已經說過很多次了,但是這個協議的重要性值得我們再次來探討一下它的基本概念和流程過程。這對我們防范ARP攻擊和欺騙的重要途徑,所謂知己知彼百戰不殆也是這個道理。
這里我們要介紹的是 Address Resolution Protocol (ARP)。 ARP是 TCP IP 設計者利用乙太網的廣播性質﹐設計出來的地址解釋協定。它的主要特性和優點是它的地址對應關系是動態的﹐它以查詢的方式來獲得 IP協議地址和實體地址的對應。它的工作原理非常簡單:
1. 首先﹐每一臺主機都會在 ARP快取緩沖區 (ARPCache)中建立一個 ARP表格﹐用來記錄 IP協議地址和實體地址的對應關系。這個 Table 的每一筆資料會根據自身的存活時間遞減而最終消失﹐以確保資料的真實性。
2. 當發送主機有一個封包要傳送給目的主機的時候﹐并且獲得目的主機的 IP協議地址﹔那發送主機會先檢查自己的 ARP表格中有沒有該 IP協議地址的實體地址對應。如果有﹐就直接使用此地址來傳送框包﹔如果沒有﹐則向網路發出一個 ARPRequest 廣播封包﹐查詢目的主機的實體地址。這個封包會包含發送端的 IP協議地址和實體地址資料。
3. 這時﹐網路上所有的主機都會收到這個廣播封包﹐會檢查封包的 IP 欄位是否和自己的 IP協議地址一致。如果不是則忽略﹔如果是則會先將發送端的實體地址和 IP 資料更新到自己的 ARP表格去﹐如果已經有該 IP 的對應﹐則用新資料覆蓋原來的﹔然后再回應一個 ARPReply 封包給對方﹐告知發送主機關于自己的實體地址;
4. 當發送端接到 ARPReply 之后﹐也會更新自己的 ARP表格﹔然后就可以用此紀錄進行傳送了。
5. 如果發送端沒有得到 ARPReply ﹐則宣告查詢失敗。
ARP的查詢過程可參考下圖:

ARP的查詢過程
ARP的查詢過程
前面說的 ARP表格﹐只有在 TCP IP 協定被載入核心之后才會建立﹐如果 TCP IP 協定被卸載或關閉機器﹐那么表格就會被清空﹔到下次協定載入或開機的時候再重新建立﹐而同時會向網路發出一個 A廣播﹐告訴其它機器它的目前地址是什么﹐以便所有機器都能保持最正確的資料。
然而﹐ARPcache 的大小是有所限制的﹐如果超過了界限﹐那么越長時間沒被使用過渡資料就必須清理掉﹐以騰出空間來儲存更新的資料。所以﹐當機器收到 ARPequest 封包時﹐如果查詢對象不是自己﹐則不會根據發送端地址資料來更新自己的 ARP表格﹐而是完全忽略該封包。同時﹐每筆存在 cache 中的資料﹐都不是永久保存的﹕每筆資料再更新的時候﹐都會被賦予一個存活倒數計時值﹐如果在倒數時間到達的時候﹐該資料就會被清掉。然而﹐如果該資料在倒數時間到達之前被使用過﹐則計時值會被重新賦予。
當然了﹐ARP尚有一套機制來處理當 ARP表格資料不符合實際地址資料的狀況(例如﹐在當前連線尚未結束前﹐收到目的端的地址資料更新訊息)﹔或是目的主機太忙碌而未能回答 ARP請求等狀況。



















