協議介紹
地址解析協議ARP(Address Resolution Protocol)是一種通過解析網絡層IP地址來尋找數據鏈路層MAC地址的網絡傳輸協議。由互聯網工程任務組(IETF)在1982年11月發佈的RFC 826中描述制定。
協議原理
下圖是以太網幀結構:
媒體訪問控制地址MAC( Media Access Control Address),也稱爲局域網地址(LAN Address),以太網地址(Ethernet Address)或硬件地址(Physical Address),是用來唯一標識網絡接口的地址。
局域網中兩臺設備進行以太網通訊,必須要知道對方接口的MAC地址。這時即可利用對方(目標)IP發送ARP廣播請求幀獲得對方(目標)MAC地址。並存入本機對應接口A R P高速緩存的ARP列表中。
ARP幀格式如下:
協議工作流程
局域網中兩臺主機:
主機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(192.168.1.1)向主機B(192.168.1.2)發送數據爲例:
1.當發送數據時,主機A會在自己的ARP緩存表中尋找是否有目標IP地址。如果找到就知道目標MAC地址爲(0A-11-22-33-44-02),直接把目標MAC地址寫入幀中發送即可。
2.如果在ARP緩存表中沒有找到相對應的IP地址,主機A就會在網絡上發送一個廣播(ARP request),廣播幀中目標MAC地址是“FF.FF.FF.FF.FF.FF”,這表示向同一網段內的所有主機發出這樣的詢問:“192.168.1.2的MAC地址是什麼?”
3.網絡上其他主機並不響應ARP詢問,只有主機B接收到這個幀時,才向主機A做出這樣的迴應(ARP response):“192.168.1.2的MAC地址是0A-11-22-33-44-02”,此迴應爲單播方式。這樣,主機A就知道主機B的MAC地址,它就可以向主機B發送數據。同時它還更新自己的ARP高速緩存(ARP cache),下次再向主機B發送信息時,直接從ARP緩存表裏查找即可。
ARP命令
Windows中ARP命令用於顯示和修改地址解析協議(ARP)緩存中的條目。
語法:
arp [/a [<Inetaddr>] [/n <ifaceaddr>]]
arp [/d <Inetaddr> [<ifaceaddr>]]
arp [/s <Inetaddr> <Etheraddr> [<ifaceaddr>]]
參數:
參數 | 描述 |
/a [] [/n ] | 顯示所有接口的當前 arp 緩存表。 若要顯示特定 IP 地址的 arp 緩存條目,請將arp /a與Inetaddr參數一起使用,其中Inetaddr是一個 IP 地址。 若要顯示特定接口的 arp 緩存表,請結合 /a參數使用 /n ifaceaddr 參數,其中ifaceaddr是分配給接口的 IP 地址。 |
/d [] | 刪除具有特定 IP 地址的條目,其中Inetaddr是 ip 地址。 若要刪除表中特定接口的條目,請使用ifaceaddr參數,其中ifaceaddr是分配給接口的 IP 地址。 若要刪除所有條目,請使用星號(*)通配符替代Inetaddr。 |
/s [] | 將一個靜態條目添加到 arp 緩存,將 IP 地址Inetaddr解析爲物理地址Etheraddr。 若要爲特定接口將靜態 arp 緩存條目添加到表中,請使用ifaceaddr參數,其中ifaceaddr是分配給接口的 IP 地址。 |
說明:
-
Inetaddr和ifaceaddr的 IP 地址以點分隔的十進制表示法表示。Inetaddr爲條目IP地址,ifaceaddr爲接口IP。
-
Etheraddr的物理地址包含六個用十六進制表示法表示並由連字符分隔的字節(例如,FF-FF-FF-FF-FF-FF)。
-
用 /s 參數添加的條目是靜態的(需要管理員身份操作),不會在 arp 緩存中超時。 如果重啓 TCP/IP 協議(如重啓主機、禁用網卡),則會刪除這些條目。
示例:
顯示所有接口的 ARP 緩存表
這裏,arp -a 不會列出已斷開或已禁用的網絡接口的ARP緩存。
ARP高速緩存
爲最大限度地減少廣播 ARP 請求幀的數量,許多 TCP/IP 堆棧實現都包含一個 ARP 緩存,它是一個記錄了最近解析過的 IPv4 地址及其對應的 MAC 地址的表。在發送 ARP 請求幀之前,ARP 將首先檢查此緩存。每個接口都有其自己的 ARP 緩存。
ARP 緩存條目可以是動態的(基於 ARP 應答),也可以是靜態的。靜態 ARP 緩存條目是永久性的。動態 ARP 緩存條目擁有與之相關的老化時間,在超過指定的時間後,將從緩存中刪除它們。
ARP代理
當發送主機和目的主機不在同一個局域網中時,即便知道對方的MAC地址,兩者也不能直接通信,必須經過路由轉發纔可以。所以此時,發送主機通過ARP協議獲得的將不是目的主機的真實MAC地址,而是一臺可以通往局域網外的路由器的MAC地址。此後發送主機發往目的主機的所有幀,都將發往該路由器,通過它向外發送。這種情況稱爲委託ARP或ARP代理(ARP Proxy)。
免費ARP
免費ARP(gratuitous ARP),他是指主機發送ARP查詢自己的IP地址。通常發生在系統引導期間進行接口配置的時候。
兩個作用:
-
一個主機可以通過它來確定其他主機是否設置了相同的I P地址。
-
如果發送免費A R P的主機正好改變了MAC地址,那麼這個分組就可以使其他主機高速緩存中其舊的MAC地址進行相應的更新。如果主機收到某個I P地址的A R P請求,而且它已經在接收者的高速緩存中,那麼就要用A R P請求中的發送端MAC地址對高速緩存中相應的內容進行更新。主機接收到任何A R P請求都要完成這個操作( A R P請求是在網上廣播的,因此每次發送A R P請求時網絡上的所有主機都要這樣做)。
ARP相關問題
下面是西門子SIMATIC自動化系統中兩個與ARP有關的問題,可以幫助大家加深對ARP的理解。
CP 343/443 修改MAC地址後,使用TCP/IP協議的診斷連接被拒絕
文檔類型 常問問題 文檔編號 15144693, 文檔發佈日期 2004年1月30日
https://support.industry.siemens.com/cs/cn/zh/view/15144693
在網絡中分配了兩次的IP地址的識別
文檔類型 常問問題 文檔編號 14450682, 文檔發佈日期 2004年1月30日
https://support.industry.siemens.com/cs/cn/zh/view/14450682