功能
地址解析協定由網際網路工程任務組(
IETF)在1982年11月發布的RFC 826中描述制定。地址解析協定是
IPv4中必不可少的協定,而IPv4是使用較為廣泛的網際網路協定版本(IPv6仍處在部署的初期)。
OSI模型把網路工作分為七層,IP位址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在通過
乙太網傳送IP數據包時,需要先封裝第三層(32位IP位址)、第二層(48位MAC地址)的報頭,但由於傳送時只知道目標IP位址,不知道其MAC地址,又不能跨第二、三層,所以需要使用地址解析協定。使用地址解析協定,可根據網路層IP數據包包頭中的IP位址信息解析出目標硬體地址(MAC地址)信息,以保證通信的順利進行。
原理
工作過程
主機A的IP位址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP位址為192.168.1.2,MAC地址為0A-11-22-33-44-02;
當主機A要與主機B通信時,地址解析協定可以將主機B的IP位址(192.168.1.2)解析成主機B的MAC地址,以下為工作流程:
第1步:根據主機A上的
路由表內容,IP確定用於訪問主機B的轉發IP位址是192.168.1.2。然後A主機在自己的本地ARP快取中檢查主機B的匹配MAC地址。
第2步:如果主機A在ARP快取中沒有找到映射,它將詢問192.168.1.2的硬體地址,從而將ARP請求幀廣播到本地網路上的所有主機。源主機A的IP位址和MAC地址都包括在ARP請求中。本地網路上的每台主機都接收到ARP請求並且檢查是否與自己的IP位址匹配。如果主機發現請求的IP位址與自己的IP位址不匹配,它將丟棄ARP請求。
第3步:主機B確定ARP請求中的IP位址與自己的IP位址匹配,則將主機A的IP位址和MAC地址
映射添加到本地ARP快取中。
第4步:主機B將包含其MAC地址的ARP回復訊息直接傳送回主機A。
第5步:當主機A收到從主機B發來的ARP回復訊息時,會用主機B的IP和MAC地址映射更新ARP快取。本機快取是有
生存期的,生存期結束後,將再次重複上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B傳送IP通信了。
工作要素:ARP快取
ARP快取是個用來儲存IP位址和MAC地址的
緩衝區,其本質就是一個IP位址-->MAC地址的對應表,表中每一個條目分別記錄了網路上其他主機的IP位址和對應的MAC地址。每一個乙太網或
令牌環網路適配器都有自己單獨的表。當地址解析協定被詢問一個已知IP位址
節點的MAC地址時,先在ARP快取中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才傳送ARP請求向
區域網路查詢。
為使廣播量最小,ARP維護IP位址到MAC地址映射的快取以便將來使用。ARP快取可以包含動態和靜態項目。動態項目隨時間推移自動添加和刪除。每個動態ARP快取項的潛在
生命周期是10分鐘。新加到快取中的項目帶有
時間戳,如果某個項目添加後2分鐘內沒有再使用,則此項目過期並從ARP快取中刪除;如果某個項目已在使用,則又收到2分鐘的生命周期;如果某個項目始終在使用,則會另外收到2分鐘的生命周期,一直到10分鐘的最長生命周期。靜態項目一直保留在快取中,直到重新啟動計算機為止。
工作媒介:報文
硬體類型 | 協定類型 |
硬體地址長度 | 協定長度 | 操作類型 |
傳送方硬體地址(0-3位元組) |
傳送方硬體地址(4-5位元組) | 傳送方IP位址(0-1位元組) |
傳送方IP位址(2-3位元組) | 目標硬體地址(0-1位元組) |
目標硬體地址(2-5位元組) |
目標IP位址(0-3位元組) |
硬體類型:指明了傳送方想知道的硬體
接口類型,乙太網的值為1;
協定類型:指明了傳送方提供的高層
協定類型,IP為0800(16進制);
硬體地址長度和協定長度:指明了硬體地址和高層協定地址的長度,這樣ARP報文就可以在任意硬體和任意協定的網路中使用;
操作類型:用來表示這個報文的類型,ARP請求為1,ARP回響為2,RARP請求為3,RARP回響為4;
傳送方硬體地址(0-3位元組):源主機硬體地址的前3個位元組;
傳送方硬體地址(4-5位元組):源主機硬體地址的後3個位元組;
傳送方IP位址(0-1位元組):源主機硬體地址的前2個位元組;
傳送方IP位址(2-3位元組):源主機硬體地址的後2個位元組;
目標硬體地址(0-1位元組):目的主機硬體地址的前2個位元組;
目標硬體地址(2-5位元組):目的主機硬體地址的後4個位元組;
目標IP位址(0-3位元組):目的主機的IP位址。
套用
ARP命令
ARP快取中包含一個或多個表,它們用於存儲IP位址及其經過解析的MAC地址。ARP命令用於查詢本機ARP快取中IP位址-->MAC地址的對應關係、添加或刪除靜態對應關係等。如果在沒有參數的情況下使用,
ARP命令將顯示幫助信息。
常見用法
arp -a或arp –g
用於查看快取中的所有項目。-a和-g參數的結果是一樣的,多年來-g一直是UNIX平台上用來顯示ARP快取中所有項目的選項,而Windows用的是arp -a(-a可被視為all,即全部的意思),但它也可以接受比較傳統的-g選項。
arp -a Ip
如果有多個網卡,那么使用arp -a加上接口的IP位址,就可以只顯示與該接口相關的ARP快取項目。
arp -s Ip 物理地址
可以向ARP快取中人工輸入一個靜態項目。該項目在計算機引導過程中將保持有效狀態,或者在出現錯誤時,人工配置的物理地址將自動更新該項目。
arp -d Ip
使用該命令能夠人工刪除一個靜態項目。
ARP欺騙
地址解析協定是建立在網路中各個主機互相信任的基礎上的,它的誕生使得網路能夠更加高效的運行,但其本身也存在缺陷:
ARP地址轉換表是依賴於計算機中高速緩衝存儲器動態更新的,而高速緩衝存儲器的更新是受到更新周期的限制的,只保存最近使用的地址的
映射關係表項,這使得攻擊者有了可乘之機,可以在高速緩衝存儲器更新表項之前修改地址轉換表,實現攻擊。ARP請求為廣播形式傳送的,網路上的主機可以自主傳送ARP應答訊息,並且當其他主機收到應答報文時不會檢測該報文的真實性就將其記錄在本地的MAC地址轉換表,這樣攻擊者就可以向目標主機傳送偽ARP應答報文,從而篡改本地的MAC地址表。ARP欺騙可以導致目標計算機與
網關通信失敗,更會導致通信
重定向,所有的數據都會通過攻擊者的機器,因此存在極大的安全隱患。
防禦措施
不要把網路安全信任關係建立在IP基礎上或MAC基礎上(RARP同樣存在欺騙的問題),理想的關係應該建立在IP+MAC基礎上。
設定靜態的MAC-->IP對應表,不要讓主機刷新設定好的轉換表。
除非很有必要,否則停止使用ARP,將ARP做為永久條目保存在對應表中。
使用ARP伺服器。通過該伺服器查找自己的ARP轉換表來回響其他機器的ARP廣播。確保這台ARP伺服器不被黑。
使用硬體禁止主機。設定好
路由,確保IP位址能到達合法的路徑(靜態配置路由ARP條目),注意,使用交換集線器和網橋無法阻止ARP欺騙。
管理員定期用回響的IP包中獲得一個RARP請求,然後檢查ARP回響的真實性。
使用
防火牆連續監控網路。注意有使用
SNMP的情況下,ARP的欺騙有可能導致陷阱包丟失。
若感染ARP病毒,可以通過清空ARP快取、指定ARP對應關係、添加路由信息、使用防病毒軟體等方式解決。
對比
RARP
地址解析協定是根據IP位址獲取物理地址的協定,而反向地址轉換協定(
RARP)是區域網路的物理機器從網關伺服器的ARP表或者快取上根據MAC地址請求IP位址的協定,其功能與地址解析協定相反。與ARP相比,RARP的工作流程也相反。首先是查詢主機向網路送出一個RARP Request廣播封包,向別的主機查詢自己的IP位址。這時候網路上的RARP伺服器就會將傳送端的IP位址用RARP Reply封包回應給查詢者,這樣查詢主機就獲得自己的IP位址了。
代理ARP
地址解析協定工作在一個網段中,而
代理ARP(Proxy ARP,也被稱作混雜ARP(Promiscuous ARP))工作在不同的網段間,其一般被像
路由器這樣的設備使用,用來代替處於另一個
網段的主機回答本網段主機的ARP請求。
例如,主機PC1(192.168.20.66/24)需要向主機PC2(192.168.20.20/24)傳送報文,因為主機PC1不知道
子網的存在且和目標主機PC2在同一主網路網段,所以主機PC1將傳送ARP協定請求廣播報文請求192.168.20.20的MAC地址。這時,路由器將識別出報文的目標地址屬於另一個子網(注意,路由器的接口IP位址配置的是28位的
掩碼),因此向請求主機回復自己的硬體地址(0004.dd9e.cca0)。之後,PC1將發往PC2的數據包都發往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器將數據包轉發到目標主機PC2。(接下來路由器將為PC2做同樣的代理髮送數據包的工作)。代理ARP協定使得子網化
網路拓撲對於主機來說時透明的(或者可以說是路由器以一個不真實的PC2的MAC地址欺騙了源主機PC1)。
NDP
地址解析協定是IPv4中必不可少的協定,但在IPv6中將不再存在地址解析協定。在IPv6中,地址解析協定的功能將由
NDP(鄰居發現協定,Neighbor Discovery Protocol)實現,它使用一系列IPv6控制信息報文(
ICMPv6)來實現相鄰節點(同一
鏈路上的節點)的互動管理,並在一個子網中保持網路層地址和
數據鏈路層地址之間的映射。鄰居發現協定中定義了5種類型的信息:路由器宣告、路由器請求、路由重定向、鄰居請求和鄰居宣告。與ARP相比,NDP可以實現路由器發現、前綴發現、參數發現、地址自動配置、地址解析(代替ARP和RARP)、下一跳確定、鄰居不可達檢測、重複地址檢測、重定向等更多功能。
NDP與ARP的區別