地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。主機發(fā)送信息時將包含目標IP地址的ARP請求廣播到局域網(wǎng)絡(luò)上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。地址解析協(xié)議是建立在網(wǎng)絡(luò)中各個主機互相信任的基礎(chǔ)上的,局域網(wǎng)絡(luò)上的主機可以自主發(fā)送ARP應(yīng)答消息,其他主機收到應(yīng)答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發(fā)送偽ARP應(yīng)答報文,使其發(fā)送的信息無法到達預(yù)期的主機或到達錯誤的主機,這就構(gòu)成了一個ARP欺騙。ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應(yīng)關(guān)系、添加或刪除靜態(tài)對應(yīng)關(guān)系等。相關(guān)協(xié)議有RARP、代理ARP。NDP用于在IPv6中代替地址解析協(xié)議。
地址解析協(xié)議由互聯(lián)網(wǎng)工程任務(wù)組(IETF)在1982年11月發(fā)布的RFC 826中描述制定。地址解析協(xié)議是IPv4中必不可少的協(xié)議,而IPv4是使用較為廣泛的互聯(lián)網(wǎng)協(xié)議版本(IPv6仍處在部署的初期)。OSI模型把網(wǎng)絡(luò)工作分為七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在通過以太網(wǎng)發(fā)送IP數(shù)據(jù)包時,需要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的包頭,但由于發(fā)送時只知道目標IP地址,不知道其MAC地址,又不能跨第二、三層,所以需要使用地址解析協(xié)議。使用地址解析協(xié)議,可根據(jù)網(wǎng)絡(luò)層IP數(shù)據(jù)包包頭中的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通信時,地址解析協(xié)議可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,以下為工作流程:第1步:根據(jù)主機A上的路由表內(nèi)容,IP確定用于訪問主機B的轉(zhuǎn)發(fā)IP地址是192.168.1.2。然后A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址。第2步:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網(wǎng)絡(luò)上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網(wǎng)絡(luò)上的每臺主機都接收到ARP請求并且檢查是否與自己的IP地址匹配。如果主機發(fā)現(xiàn)請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。第3步:主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。第4步:主機B將包含其MAC地址的ARP回復(fù)消息直接發(fā)送回主機A。第5步:當主機A收到從主機B發(fā)來的ARP回復(fù)消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結(jié)束后,將再次重復(fù)上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發(fā)送IP通信了。
ARP緩存是個用來儲存IP地址和MAC地址的緩沖區(qū),其本質(zhì)就是一個IP地址-->MAC地址的對應(yīng)表,表中每一個條目分別記錄了網(wǎng)絡(luò)上其他主機的IP地址和對應(yīng)的MAC地址。每一個以太網(wǎng)或令牌環(huán)網(wǎng)絡(luò)適配器都有自己單獨的表。當?shù)刂方馕鰠f(xié)議被詢問一個已知IP地址節(jié)點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應(yīng)的MAC地址,若不存在,才發(fā)送ARP請求向局域網(wǎng)查詢。為使廣播量最小,ARP維護IP地址到MAC地址映射的緩存以便將來使用。ARP緩存可以包含動態(tài)和靜態(tài)項目。動態(tài)項目隨時間推移自動添加和刪除。每個動態(tài)ARP緩存項的潛在生命周期是10分鐘。新加到緩存中的項目帶有時間戳,如果某個項目添加后2分鐘內(nèi)沒有再使用,則此項目過期并從ARP緩存中刪除;如果某個項目已在使用,則又收到2分鐘的生命周期;如果某個項目始終在使用,則會另外收到2分鐘的生命周期,一直到10分鐘的最長生命周期。靜態(tài)項目一直保留在緩存中,直到重新啟動計算機為止。