1. 簡介
同一局域網(wǎng)中的一臺主機要和另一臺主機進(jìn)行直接通信盔然,必須要知道目標(biāo)主機的MAC地址桅打。如果知道其IP地址,則可以通過ARP(Address Resolution Protocol愈案,地址解析協(xié)議)查詢到其MAC地址挺尾。ARP僅用于IPv4,IPv6使用ICMPv6站绪。
2. ARP幀格式
ARP幀格式
上圖是一個以太網(wǎng)封裝上層ARP包后的以太網(wǎng)幀遭铺,其中的一些字段,如
- 硬件類型:硬件地址類型,如以太網(wǎng)的值為0x0001
- 協(xié)議類型:映射的協(xié)議的地址類型魂挂,如IPv4的值為0x0800
- 硬件地址長度:硬件地址占多少個字節(jié)的長度航厚,如以太網(wǎng)占6個字節(jié),該值就為6
- 協(xié)議地址長度:協(xié)議地址占多少個字節(jié)的長度锰蓬,如IPv4占4個字節(jié)幔睬,該值就為4
- OP:指出這個ARP包是一個請求或響應(yīng)包,請求為1芹扭,響應(yīng)為2
3. 原理
ARP抓包結(jié)果
以主機A(192.168.1.103)向所在子網(wǎng)的主機B(192.168.1.101)發(fā)送數(shù)據(jù)為例:
-
當(dāng)主機A發(fā)送數(shù)據(jù)時麻顶,主機A會在本機的ARP緩存表中尋找是否有主機B的IP地址。
- 如果找到就知道主機B的MAC地址為
主機B的MAC地址
舱卡,直接把主機B的MAC地址寫入幀首部發(fā)送數(shù)據(jù)辅肾。
- 如果找到就知道主機B的MAC地址為
-
如果在ARP緩存表中沒有找到主機B的MAC地址,主機A就會在網(wǎng)絡(luò)上廣播一個ARP請求幀轮锥。如下圖:
ARP請求結(jié)果 -
同一子網(wǎng)上的主機都會收到這個幀矫钓,并且根據(jù)ARP包的內(nèi)容更新自己的ARP緩存表。但只有主機B接收到這個幀時舍杜,單播一個目的IP地址為192.168.1.103的ARP響應(yīng)幀新娜,其他主機則丟棄這個請求幀。
ARP響應(yīng)結(jié)果
ARP緩存表采用老化機制既绩,在一段時間內(nèi)如果表中的某一行沒有使用概龄,就會被刪除,這樣可以大大減少ARP緩存表的長度饲握,加快查詢速度私杜。