對於以太網,數據鏈路層上是根據48bit的以太網地址來肯定目的接口,設備驅動程序從不檢查IP數據報中的目的IP地址。ARP協議爲IP地址到對應的硬件地址之間提供動態映射。緩存
在以太網(ARP協議只適用於局域網)中,若是本地主機想要向某一個IP地址的主機(路由表中的下一跳路由器或者直連的主機,注意此處IP地址不必定是IP數據報中的目的IP)發包,可是並不知道其硬件地址,此時利用ARP協議提供的機制來獲取硬件地址,具體過程以下:服務器
1) 本地主機在局域網中廣播ARP請求,ARP請求數據幀中包含目的主機的IP地址。意思是「若是你是這個IP地址的擁有者,請回答你的硬件地址」。網絡
2) 目的主機的ARP層解析這份廣播報文,識別出是詢問其硬件地址。因而發送ARP應答包,裏面包含IP地址及其對應的硬件地址。工具
3) 本地主機收到ARP應答後,知道了目的地址的硬件地址,以後的數據報就能夠傳送了。spa
點對點鏈路不使用ARP協議。代理
APR請求包是廣播的,可是ARP應答幀是單播的。blog
以太網數據報最小長度是60字節(14字節的以太網頭,不包含4字節的FCS),ARP數據包長度爲42字節(14字節的以太網頭和28字節的ARP數據),須要加入填充字符到以太網最小長度要求:60字節。接口
每一個主機都有一個ARP高速緩存表,這樣避免每次發包時都須要發送ARP請求來獲取硬件地址。默認老化時間是20分鐘。利用arp -a命令能夠查看顯示系統中高速緩存的內容。路由
Windows下「arp -d」命令能夠清除arp高速緩存表。it
有時候須要手動清除arp緩存,曾經就是由於arp緩存沒有作清理,致使迷惑了好久。遇到的問題:
1) 製做了一個寫路由器MAC地址的工具,每次寫完MAC地址,重啓路由器,會發現沒法telnet登錄路由器。IP地址沒變,可是MAC地址更改了,而ARP緩存表中IP地址映射的仍然是舊的MAC地址。
2) 相似的問題,有兩個路由器具備相同的IP地址。先鏈接一個路由器,登錄成功後,再去鏈接另外一臺路由器,卻發現登錄不了。
若是ARP請求時從一個網絡的主機發往另外一個網絡上的主機,那麼鏈接這兩個網絡的路由器能夠回答該請求,這個過程稱做委託ARP或者ARP代理。這樣能夠欺騙發起ARP請求的發送端,使它誤覺得路由器就是目的主機。
將局域網中某個主機的物理地址轉換爲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服務器的響應信息,表示初始化失敗。