當(dāng)一臺主機把以太網(wǎng)數(shù)據(jù)幀發(fā)送到位于同一局域網(wǎng)上的另一臺主機時,是根據(jù)48bit的以太網(wǎng)地址來確定目的接口的。設(shè)備驅(qū)動程序從不檢查IP數(shù)據(jù)報中的目的IP地址。
地址解析為這兩種不同的地址形式提供映射32bit的IP地址和數(shù)據(jù)鏈路層使用的任何類型的地址
ARP的功能是在32bit的IP地址和采用不同網(wǎng)絡(luò)技術(shù)的硬件地址之間提供動態(tài)映射。
ARP協(xié)議干的事就是通過IP找MAC
ARP高效運行的關(guān)鍵是由于每個主機上都有一個ARP高速緩存。這個高速緩存存放了最近Internet地址到硬件地址之間的映射記錄。高速緩存中每一項的生存時間一般為20分鐘,起始時間從被創(chuàng)建時開始算起。而對于不完整的表項設(shè)置超時值為3分鐘。(即以太網(wǎng)上對一個不存在的主機發(fā)出ARP請求),當(dāng)這些表項再次使用時,這些實現(xiàn)一般都把超時時間重新設(shè)為20分鐘。
ARP的分組格式

- 兩個字節(jié)長的以太網(wǎng)幀類型表示后面數(shù)據(jù)的類型。對于ARP請求或應(yīng)答來說,該字段的值為0x0806
- 硬件類型字段表示硬件地址的類型。它的值為1即表示以太網(wǎng)地址,協(xié)議類型字段表示要映射的協(xié)議地址類型。它的值為0x0800即表示IP地址。它的值與包含IP數(shù)據(jù)報的以太網(wǎng)數(shù)據(jù)幀中的類型字段的值相同。
- 兩個1字節(jié)的字段,硬件地址長度和協(xié)議地址長度分別指出硬件地址和協(xié)議地址的長度,以字節(jié)為單位。對于以太網(wǎng)上IP地址的ARP請求或應(yīng)答來說,它們的值分別為6和4
- 操作字段指出四種操作類型,它們是ARP請求(值為1 )、ARP應(yīng)答(值為2)、RARP請求(值為3)和RARP應(yīng)答(值為4)。這個字段是必需的,因為ARP請求和應(yīng)答幀類型字段值是相同的。
- 接下來的四個字段是發(fā)送端的硬件地址(在本例中是以太網(wǎng)地址)、發(fā)送端的協(xié)議地址(IP地址)、目的端的硬件地址和目的端的協(xié)議地址。注意:這里有重復(fù)信息,在以太網(wǎng)的數(shù)據(jù)幀報頭中和ARP請求數(shù)據(jù)幀中都有發(fā)送端的硬件地址。
對于一個ARP請求來說,除目的端硬件地址外的所有其他字段都有填充值。當(dāng)系統(tǒng)收到一份目的端為本機的ARP請求報文后,它就把硬件地址填進去,然后用兩個目的端地址分別替換兩個發(fā)送端地址,并把操作字段置為2 ,最后把它發(fā)送回去。
ARP的請求是廣播的,ARP的應(yīng)答是直接送到請求端主機的,是單播的。
如果查詢的主機已關(guān)機或不存在會發(fā)生什么事情?為此我們指定一個并不存在的Internet地址——根據(jù)網(wǎng)絡(luò)號和子網(wǎng)號所對應(yīng)的網(wǎng)絡(luò)確實存在,但是不存在所指定的主機號。
tcpdump命令輸出的超時限制為29.5秒
ARP代理
如果ARP請求是從一個網(wǎng)絡(luò)的主機發(fā)往另一個網(wǎng)絡(luò)上的主機,那么連接這兩個網(wǎng)絡(luò)的路由器就可以回答該請求,這個過程稱為委托ARP或ARP代理(Proxy ARP)。這樣可以欺騙發(fā)起ARP請求的發(fā)送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當(dāng)于目的主機的代理,把分組從其他主機轉(zhuǎn)發(fā)給它。
ARP代理也稱作混合ARP(promiscuousARP)或ARP出租(ARP hack)這些名字來自于ARP代理的其他用途:通過兩個物理網(wǎng)絡(luò)之間的路由器可以互相隱藏物理網(wǎng)絡(luò)。在這種情況下,兩個物理網(wǎng)絡(luò)可以使用相同的網(wǎng)絡(luò)號,只要把中間的路由器設(shè)置成一個ARP代理,以響應(yīng)一個網(wǎng)絡(luò)到另一個網(wǎng)絡(luò)主機的ARP請求。

的主機號。
免費ARP
ARP的另一個特性稱作免費ARP(gratuitous ARP),它是指主機發(fā)送ARP查找自己的IP地址。通常,它發(fā)生在系統(tǒng)引導(dǎo)期間進行接口配置的時候。