如果ARP請求是從一個網絡的主機發往另一個網絡上的主機,那么連接這兩個網絡的路由器就可以回答該請求,這個過程稱作委托ARP或ARP代理(Proxy ARP)。這樣可以欺騙發起ARP請求的發送端,使它誤以為路由器就是目的主機,而事實上目的主機是在路由器的“另一邊”。路由器的功能相當于目的主機的代理,把分組從其他主機轉發給它。
舉例是說明ARP代理的最好方法。如圖3-10所示,系統sun與兩個以太網相連。但是,我們也指出過,事實上并不是這樣,請把它與封內圖1進行比較。在sun和子網140.252.1之間實際存在一個路由器,就是這個具有ARP代理功能的路由器使得sun就好像在子網140.252.1上一樣。具體安置如圖4-6所示,路由器Telebit NetBlazer,取名為netb,在子網和主機sun之間。
當子網140.252.1(稱作gemini)上的其他主機有一份IP數據報要傳給地址為140.252.1.29的sun時,gemini比較網絡號(140.252)和子網號(1),因為它們都是相同的,因而在圖4-6上面的以太網中發送IP地址140.252.1.29的ARP請求。路由器netb識別出該IP地址屬于它的一個拔號主機,于是把它的以太網接口地址140.252.1作為硬件地址來回答。主機gemini通過以太網發送IP數據報到netb,netb通過撥號SLIP鏈路把數據報轉發到sun。這個過程對于所有140.252.1子網上的主機來說都是透明的,主機sun實際上是在路由器netb后面進行配置的。

如果在主機gemini上執行arp命令,經過與主機sun通信以后,我們發現在同一個子網140.252.1上的netb和sun的IP地址映射的硬件地址是相同的。這通常是使用委托ARP的線索。
~~~
gemini % arp -a #這里是子網1 4 0 . 2 5 2 . 1上其他主機的輸出行
netb (140.252.1.183) at 0:80:ad:3:6a:80
sun (140.252.1.29) at 0:80:ad:3:6a:80
~~~
圖4-6中的另一個需要解釋的細節是在路由器netb的下方(SLIP鏈路)顯然缺少一個IP地址。為什么在撥號SLIP鏈路的兩端只擁有一個IP地址,而在bsdi和slip之間的兩端卻分別有一個IP地址?在3.8小節我們已經指出,用ifconfig命令可以顯示撥號SLIP鏈路的目的地址,它是140.252.1.183。NetBlazer不需要知道撥號SLIP鏈路每一端的IP地址(這樣做會用更多的IP地址)。相反,它通過分組到達的串行線路接口來確定發送分組的撥號主機,因此對于連接到路由器的每個撥號主機不需要用唯一的IP地址。所有的撥號主機使用同一個IP地址140.252.1.183作為SLIP鏈路的目的地址。
ARP代理可以把數據報傳送到路由器sun上,但是子網140.252.13上的其他主機是如何處理的呢?選路必須使數據報能到達其他主機。這里需要特殊處理,選路表中的表項必須在網絡140.252的某個地方制定,使所有數據報的目的端要么是子網140.252.13,要么是子網上的某個主機,這樣都指向路由器netb。而路由器netb知道如何把數據報傳到最終的目的端,即通過路由器sun。
ARP代理也稱作混合ARP(promiscuous ARP)或ARP出租(ARP hack)。這些名字來自于ARP代理的其他用途:通過兩個物理網絡之間的路由器可以互相隱藏物理網絡。在這種情況下,兩個物理網絡可以使用相同的網絡號,只要把中間的路由器設置成一個ARP代理,以響應一個網絡到另一個網絡主機的ARP請求。這種技術在過去用來隱藏一組在不同物理電纜上運行舊版TCP/IP的主機。分開這些舊主機有兩個共同的理由,其一是它們不能處理子網劃分,其二是它們使用舊的廣播地址(所有比特值為0的主機號,而不是目前使用的所有比特值為1的主機號)。
- 第1章 概述
- 1.1 引言
- 1.2 分層
- 1.3 TCP/IP的分層
- 1.4 互聯網的地址
- 1.5 域名系統
- 1.6 封裝
- 1.7 分用
- 1.8 客戶-服務器模型
- 1.9 端口號
- 1.10 標準化過程
- 1.11 RFC
- 1.12 標準的簡單服務
- 1.13 互聯網
- 1.14 實現
- 1.15 應用編程接口
- 1.16 測試網絡
- 1.17 小結
- 第2章 鏈路層
- 2.1 引言
- 2.2 以太網和IEEE 802封裝
- 2.3 尾部封裝
- 2.4 SLIP:串行線路IP
- 2.5 壓縮的SLIP
- 2.6 PPP:點對點協議
- 2.7 環回接口
- 2.8 最大傳輸單元MTU
- 2.9 路徑MTU
- 2.10 串行線路吞吐量計算
- 2.11 小結
- 第3章 IP:網際協議
- 3.1 引言
- 3.2 IP首部
- 3.3 IP路由選擇
- 3.4 子網尋址
- 3.5 子網掩碼
- 3.6 特殊情況的IP地址
- 3.7 一個子網的例子
- 3.8 ifconfig命令
- 3.9 netstat命令
- 3.10 IP的未來
- 3.11 小結
- 第4章 ARP:地址解析協議
- 4.1 引言
- 4.2 一個例子
- 4.3 ARP高速緩存
- 4.4 ARP的分組格式
- 4.5 ARP舉例
- 4.5.1 一般的例子
- 4.5.2 對不存在主機的ARP請求
- 4.5.3 ARP高速緩存超時設置
- 4.6 ARP代理
- 4.7 免費ARP
- 4.8 arp命令
- 4.9 小結
- 第5章 RARP:逆地址解析協議
- 5.1 引言
- 5.2 RARP的分組格式
- 5.3 RARP舉例
- 5.4 RARP服務器的設計
- 5.4.1 作為用戶進程的RARP服務器
- 5.4.2 每個網絡有多個RARP服務器
- 5.5 小結
- 第6章 ICMP:Internet控制報文協議
- 6.1 引言
- 6.2 ICMP報文的類型
- 6.3 ICMP地址掩碼請求與應答
- 6.4 ICMP時間戳請求與應答
- 6.4.1 舉例
- 6.4.2 另一種方法
- 6.5 ICMP端口不可達差錯
- 6.6 ICMP報文的4.4BSD處理
- 6.7 小結
- 第7章 Ping程序
- 7.1 引言
- 7.2 Ping程序
- 7.2.1 LAN輸出
- 7.2.2 WAN輸出
- 7.2.3 線路SLIP鏈接
- 7.2.4 撥號SLIP鏈路
- 7.3 IP記錄路由選項
- 7.3.1 通常的例子
- 7.3.2 異常的輸出
- 7.4 IP時間戳選項
- 7.5 小結
- 第8章 Traceroute程序
- 8.1 引言
- 8.2 Traceroute程序的操作
- 8.3 局域網輸出
- 8.4 廣域網輸出
- 8.5 IP源站選路選項
- 8.5.1 寬松的源站選路的traceroute程序示例
- 8.5.2 嚴格的源站選路的traceroute程序示例
- 8.5.3 寬松的源站選路traceroute程序的往返路由
- 8.6 小結
- 第9章 IP選路
- 9.1 引言
- 9.2 選路的原理
- 9.2.1 簡單路由表
- 9.2.2 初始化路由表
- 9.2.3 較復雜的路由表
- 9.2.4 沒有到達目的地的路由
- 9.3 ICMP主機與網絡不可達差錯
- 9.4 轉發或不轉發
- 9.5 ICMP重定向差錯
- 9.5.1 一個例子
- 9.5.2 更多的細節
- 9.6 ICMP路由器發現報文
- 9.6.1 路由器操作
- 9.6.2 主機操作
- 9.6.3 實現
- 9.7 小結