ARP:地址解析協議
對於以太網,數據鏈路層上是根據48bit的以太網地址來確定目的接口,設備驅動程序從不檢查IP數據報中的目的IP地址。ARP協議為IP地址到對應的硬件地址之間提供動態映射。
工作過程
在以太網(ARP協議只適用於局域網)中,如果本地主機想要向某一個IP地址的主機(路由表中的下一跳路由器或者直連的主機,注意此處IP地址不一定是IP數據報中的目的IP)發包,但是並不知道其硬件地址,此時利用ARP協議提供的機制來獲取硬件地址,具體過程如下:
1) 本地主機在局域網中廣播ARP請求,ARP請求數據幀中包含目的主機的IP地址。意思是“如果你是這個IP地址的擁有者,請回答你的硬件地址”。
2) 目的主機的ARP層解析這份廣播報文,識別出是詢問其硬件地址。於是發送ARP應答包,里面包含IP地址及其對應的硬件地址。
3) 本地主機收到ARP應答后,知道了目的地址的硬件地址,之后的數據報就可以傳送了。
點對點鏈路不使用ARP協議。
幀格式

- 以太網目的地址:目的主機的硬件地址。目的地址全為1的特殊地址是廣播地址。
- 以太網源地址:源主機的硬件地址。
- 幀類型:對於ARP協議,該字段為0x0806。對於RARP協議,該字段為0x8035。
- 硬件類型:表示硬件地址的類型。值為1時表示以太網地址。也就是說ARP協議不僅僅應用於以太網協議,還可以支持別的鏈路層協議。
- 協議類型:表示要映射的協議地址類型。值為0x0800時表示IP協議。
- 硬件地址長度:與硬件類型對應的硬件地址的長度,以字節為單位。如果是以太網,則是6字節(MAC長度)。
- 協議地址長度:與協議類型對應的協議地址長度,以字節為單位。如果是IP協議,則是4字節(IP地址長度)。
- 操作類型(op):四中操作類型。ARP請求(1),ARP應答(2),RARP請求(3),RARP應答(4)。
- 發送端硬件地址:如果是以太網,則是源主機以太網地址,此處和以太網頭中的源地址對應。
- 發送端協議地址:如果是IP協議,則表示源主機的IP地址。
- 目的端硬件地址:如果是以太網,則是目的以太網地址,和以太網頭中的目的地址對應。
- 目的端協議地址:如果是IP協議,則表示源主機要請求硬件地址的IP地址。
- 對應ARP請求包來說,目的端的硬件地址字段無須填充,其他字段都需要填充。對於ARP回復包來說,所有字段都需要填充。
APR請求包是廣播的,但是ARP應答幀是單播的。
以太網數據報最小長度是60字節(14字節的以太網頭,不包含4字節的FCS),ARP數據包長度為42字節(14字節的以太網頭和28字節的ARP數據),需要加入填充字符到以太網最小長度要求:60字節。
ARP高速緩存
每個主機都有一個ARP高速緩存表,這樣避免每次發包時都需要發送ARP請求來獲取硬件地址。默認老化時間是20分鍾。利用arp -a命令可以查看顯示系統中高速緩存的內容。
Windows下“arp -d”命令可以清除arp高速緩存表。
有時候需要手動清除arp緩存,曾經就是因為arp緩存沒有做清理,導致迷惑了很久。遇到的問題:
1) 制作了一個寫路由器MAC地址的工具,每次寫完MAC地址,重啟路由器,會發現無法telnet登陸路由器。IP地址沒變,但是MAC地址更改了,而ARP緩存表中IP地址映射的仍然是舊的MAC地址。
2) 類似的問題,有兩個路由器具有相同的IP地址。先連接一個路由器,登陸成功后,再去連接另一台路由器,卻發現登陸不了。
ARP代理
如果ARP請求時從一個網絡的主機發往另一個網絡上的主機,那么連接這兩個網絡的路由器可以回答該請求,這個過程稱作委托ARP或者ARP代理。這樣可以欺騙發起ARP請求的發送端,使它誤以為路由器就是目的主機。
RARP:逆地址解析協議
將局域網中某個主機的物理地址轉換為IP地址,比如局域網中有一台主機只知道物理地址而不知道IP地址,那么可以通過RARP協議發出征求自身IP地址的廣播請求,然后由RARP服務器負責回答。RARP協議廣泛應用於無盤工作站引導時獲取IP地址。
RARP允許局域網的物理機器從網管服務器ARP表或者緩存上請求其IP地址。
幀格式
幀格式同ARP協議,幀類型字段和操作類型不同,具體見ARP幀格式描述。
工作原理
1. 主機發送一個本地的RARP廣播,在此廣播包中,聲明自己的MAC地址並且請求任何收到此請求的RARP服務器分配一個IP地址。
2. 本地網段上的RARP服務器收到此請求后,檢查其RARP列表,查找該MAC地址對應的IP地址。
3. 如果存在,RARP服務器就給源主機發送一個響應數據包並將此IP地址提供給對方主機使用。
4. 如果不存在,RARP服務器對此不做任何的響應。
5. 源主機收到從RARP服務器的響應信息,就利用得到的IP地址進行通訊;如果一直沒有收到RARP服務器的響應信息,表示初始化失敗。
