ARP協(xié)議的流程示意
ARP協(xié)議我們雖然已經(jīng)說過很多次了,但是這個協(xié)議的重要性值得我們再次來探討一下它的基本概念和流程過程。這對我們防范ARP攻擊和欺騙的重要途徑,所謂知己知彼百戰(zhàn)不殆也是這個道理。
這里我們要介紹的是 Address Resolution Protocol (ARP)。 ARP是 TCP IP 設(shè)計者利用乙太網(wǎng)的廣播性質(zhì)﹐設(shè)計出來的地址解釋協(xié)定。它的主要特性和優(yōu)點是它的地址對應(yīng)關(guān)系是動態(tài)的﹐它以查詢的方式來獲得 IP協(xié)議地址和實體地址的對應(yīng)。它的工作原理非常簡單:
1. 首先﹐每一臺主機都會在 ARP快取緩沖區(qū) (ARPCache)中建立一個 ARP表格﹐用來記錄 IP協(xié)議地址和實體地址的對應(yīng)關(guān)系。這個 Table 的每一筆資料會根據(jù)自身的存活時間遞減而最終消失﹐以確保資料的真實性。
2. 當(dāng)發(fā)送主機有一個封包要傳送給目的主機的時候﹐并且獲得目的主機的 IP協(xié)議地址﹔那發(fā)送主機會先檢查自己的 ARP表格中有沒有該 IP協(xié)議地址的實體地址對應(yīng)。如果有﹐就直接使用此地址來傳送框包﹔如果沒有﹐則向網(wǎng)路發(fā)出一個 ARPRequest 廣播封包﹐查詢目的主機的實體地址。這個封包會包含發(fā)送端的 IP協(xié)議地址和實體地址資料。
3. 這時﹐網(wǎng)路上所有的主機都會收到這個廣播封包﹐會檢查封包的 IP 欄位是否和自己的 IP協(xié)議地址一致。如果不是則忽略﹔如果是則會先將發(fā)送端的實體地址和 IP 資料更新到自己的 ARP表格去﹐如果已經(jīng)有該 IP 的對應(yīng)﹐則用新資料覆蓋原來的﹔然后再回應(yīng)一個 ARPReply 封包給對方﹐告知發(fā)送主機關(guān)于自己的實體地址;
4. 當(dāng)發(fā)送端接到 ARPReply 之后﹐也會更新自己的 ARP表格﹔然后就可以用此紀(jì)錄進行傳送了。
5. 如果發(fā)送端沒有得到 ARPReply ﹐則宣告查詢失敗。
ARP的查詢過程可參考下圖:
ARP的查詢過程
ARP的查詢過程
前面說的 ARP表格﹐只有在 TCP IP 協(xié)定被載入核心之后才會建立﹐如果 TCP IP 協(xié)定被卸載或關(guān)閉機器﹐那么表格就會被清空﹔到下次協(xié)定載入或開機的時候再重新建立﹐而同時會向網(wǎng)路發(fā)出一個 A廣播﹐告訴其它機器它的目前地址是什么﹐以便所有機器都能保持最正確的資料。
然而﹐ARPcache 的大小是有所限制的﹐如果超過了界限﹐那么越長時間沒被使用過渡資料就必須清理掉﹐以騰出空間來儲存更新的資料。所以﹐當(dāng)機器收到 ARPequest 封包時﹐如果查詢對象不是自己﹐則不會根據(jù)發(fā)送端地址資料來更新自己的 ARP表格﹐而是完全忽略該封包。同時﹐每筆存在 cache 中的資料﹐都不是永久保存的﹕每筆資料再更新的時候﹐都會被賦予一個存活倒數(shù)計時值﹐如果在倒數(shù)時間到達的時候﹐該資料就會被清掉。然而﹐如果該資料在倒數(shù)時間到達之前被使用過﹐則計時值會被重新賦予。
當(dāng)然了﹐ARP尚有一套機制來處理當(dāng) ARP表格資料不符合實際地址資料的狀況(例如﹐在當(dāng)前連線尚未結(jié)束前﹐收到目的端的地址資料更新訊息)﹔或是目的主機太忙碌而未能回答 ARP請求等狀況。