本文描述代理地址解析協定(ARP)如何幫助主機在沒有主機路由或預設網關的情況下到達遠端子網。
本文檔需要瞭解ARP和乙太網環境。
本文中的資訊係根據以下軟體和硬體版本:
Cisco IOS®軟體版本12.2(10b)
Cisco 2600 系列路由器
附註:本檔案所述的行為不限於這些元件。代理ARP在多個Cisco IOS和Cisco IOS XE平台上可用。功能可用性、預設行為和命令支援因平台和軟體版本而異。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
代理ARP是主機(通常是路由器)應答發往另一台電腦的ARP請求的技術。路由器使用自己的MAC地址進行應答,並將資料包路由到實際目的地。代理ARP可以幫助子網中的機器到達遠端子網,而無需配置路由或預設網關。代理ARP在RFC 1027中定義。
以下是代理ARP運作方式的範例:
網路圖表
子網A上的主機A(172.16.10.100)需要將資料包傳送到子網B上的主機D(172.16.20.200)。如網路圖所示,主機A的子網掩碼為/16。這表示主機A認為它直接連線到網路172.16.0.0的所有裝置。當主機A需要與它認為直接相連的任何裝置通訊時,它會向目的裝置傳送ARP請求。因此,當主機A需要將封包傳送到主機D時,主機A認為主機D已直接連線,因此會向主機D傳送ARP要求。
為了到達主機D(172.16.20.200),主機A請求與目的IP地址關聯的MAC地址。
因此,主機A在子網A上廣播一個ARP請求,如下所示:
| 發件人MAC地址 | 發件人IP地址 | 目標MAC地址 | 目標IP地址 |
|---|---|---|---|
| 00-00-0c-94-36-aa | 172.16.10.100 | 00-00-00-00-00-00 | 172.16.20.200 |
在此ARP請求中,主機A(172.16.10.100)請求主機D(172.16.20.200)傳送其MAC地址。然後,ARP請求資料包被封裝到乙太網幀中,以主機A的MAC地址作為源地址,以廣播(FFFF.FFFF.FFFF)作為目的地址。由於ARP請求是廣播,因此它到達子網A上的所有節點,其中包括路由器的乙太網0(e0)介面,但並不到達主機D。廣播無法到達主機D,因為預設情況下,路由器不會在介面之間轉發第2層廣播幀。
由於代理ARP在接收介面上啟用,並且路由器具有通過另一介面到主機D(172.16.20.200)的路由,因此路由器使用自己的MAC地址回覆主機A。
| 發件人MAC地址 | 發件人IP地址 | 目標MAC地址 | 目標IP地址 |
|---|---|---|---|
| 00-00-0c-94-36-ab | 172.16.20.200 | 00-00-0c-94-36-aa | 172.16.10.100 |
這是路由器傳送到主機A的代理ARP應答。代理ARP應答資料包封裝在乙太網幀中,以路由器的MAC地址作為源地址,以主機A的MAC地址作為目的地址。此交換中的代理ARP回覆是單播給原始請求者。收到此 ARP 回覆後,主機 A 會更新其 ARP 表,如下所示:
| IP 位址 | MAC 地址 |
|---|---|
| 172.16.20.200 | 00-00-0c-94-36-ab |
在ARP條目過期或更改之前,主機A將發往172.16.20.200(主機D)的資料包傳送到屬於路由器的MAC地址00-00-0c-94-36-ab。由於路由器知道如何到達主機D,因此它會將封包轉送到主機D。子網A上主機的ARP快取包含路由器為其提供代理ARP應答的每個遠端目標的路由器MAC地址。因此,所有目的地為子網B的資料包都會傳送到路由器。路由器將這些資料包轉發到子網B中的主機。
主機A的ARP快取如下表所示:
| IP 位址 | MAC 地址 |
|---|---|
| 172.16.20.200 | 00-00-0c-94-36-ab |
| 172.16.20.100 | 00-00-0c-94-36-ab |
| 172.16.10.200 | 00-00-0c-94-36-bb |
附註:多個IP地址對映到單個MAC地址,該地址是此路由器的MAC地址。在此拓撲中,此模式可能表示代理ARP正在使用中。
必須在思科路由器介面上啟用代理ARP,以便路由器代表遠端目標做出響應。在Cisco IOS上,在支援ARP的介面上預設啟用代理ARP。在禁用代理ARP之前,請確保受影響的主機具有有效的路由或預設網關。在不需要代理ARP的介面上,使用no ip proxy-arp將其禁用:
Router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router(config)#interface ethernet 0 Router(config-if)#no ip proxy-arp Router(config-if)#^Z Router#
若要在介面上啟用代理ARP,請執行ip proxy-arp介面組態指令。執行show ip interface <interface>以驗證輸出是否報告代理ARP已啟用。
附註:當子網A上的主機B(172.16.10.200/24)嘗試將資料包傳送到子網B上的主機D(172.16.20.200)時,它會檢查其IP路由表。主機B不向主機D傳送ARP請求,因為目標位於主機B乙太網介面上配置的子網之外。主機B將封包傳送到已設定的下一個躍點。如果沒有匹配的路由或預設網關,通訊將失敗。
代理ARP的主要優點是可以在網路中的一台路由器上啟用,並且不會更改網路中其他路由器的路由表。
代理ARP可以用在IP主機沒有預設網關或通往遠端目的地的其他路由的網路上。
主機無法檢視物理網路拓撲,並將網路視為一個平面網段,ARP請求可以在其中解析任何目的地址。
代理ARP行為有幾個缺點:
它會增加網段上的ARP流量。
主機需要更大的ARP表來處理IP到MAC地址對映。
安全可能會受到破壞。一台機器可以聲稱自己是另一台機器以攔截資料包,這種行為稱為欺騙。
它不適用於不使用ARP進行地址解析的網路。
當多台路由器為同一個目的地提供代理ARP應答時,它可能會產生不可預知的下一跳選擇。
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
6.0 |
09-Sep-2026
|
固定連結和檢查的拼寫/語法。 |
5.0 |
29-May-2025
|
修復了幾個格式問題。 |
4.0 |
06-Mar-2025
|
已修復打字錯誤 |
3.0 |
02-Jun-2023
|
重新認證 |
2.0 |
28-Mar-2022
|
已修復或已移除損壞的連結。 |
1.0 |
02-Dec-2013
|
初始版本 |