第 4章 地址解析互联网地址能够 将不同的物理地址统一 起来,
采用的技术是在各种物理网络技术上覆盖一层软件 (IP协议 +ARP协议 +RARP协议 ),将物理地址隐藏起来。但因特网技术并没有改变底层的物理网络,最终数据还是在物理网络上传输,
而 在物理网络上传输时使用的仍是物理地址 。
因特网 在网络层使用 IP地址的同时,在物理网络中仍使用物理地址 。这样一来,网络中就同时存在两套地址,而且在这 两套地址之间必须建立映射关系 。
IP地址又称为 逻辑地址,逻辑地址由软件进行处理 。 建立逻辑地址与 物理地址 之间 映射的方法通常有两种,
静态映射 主要采用地址映射表格来实现逻辑地址与物理地址之间的映射 。 由于地址映射表一般由 人工方式建立和维护,所以 不能适应 物理地址和逻辑地址频繁变化的网络和规模庞大的网络 。
动态映射 是在需要获得地址映射关系时 利用网络通信协议 直接从其他主机上获得映射信息。
因特网采用了动态映射的方法进行地址映射。
逻辑地址与物理地址之间的映射称为地址解析 (Address resolution)。 地址解析包括 两个方面 的内容:
从 IP地址到物理地址的映射从物理地址到 IP地址的映射
TCP/IP用 两个协议 来实现这两种映射,一个是地址解析协议 ARP,另一个是 反向地址解析协议 RARP。
ARP用于从 IP地址到物理地址的映射
RARP用于从物理地址到 IP地址的映射第 4章 地址解析
4.1 地址解析协议 (ARP)
4.2 反向地址解析协议 (RARP)
4.3 地址解析报文
4.4 代理 ARP
4.1 地址解析协议 (ARP)
4.1.1 地址解析原理
地址解析协议 ARP使 IP能够获得与某个给定 IP地址相关的主机物理地址。
ARP的功能分为 两部分,
– 发送数据包请求获得目的主机的物理地址
– 向请求物理地址的主机发送解析结果。
当主机 A需要向同一物理网络中的主机 B发送 IP数据报时,主机 A的 IP层要将 IP数据报传给 数据链路层进行帧封装,封装时要求给出目的主机的物理地址。
ARP请求帧将包括如下 信息,
请求主机的物理地址 PA
请求主机的 IP地址 IA
目的主机的 IP地址 IB
主机 A在本地网络中广播 ARP请求帧,请求帧的目的地址为广播地址(全,1” )。
ARP应答帧 直接发回 给发送 ARP请求的主机
A 。 ARP应答帧包含以下 信息,
应答主机的物理地址 PB;
应答主机的 IP地址 IB;
请求主机的物理地址 PA;
请求主机的 IP地址 IA
图 4 - 2 A R P 请求以广播方式发送
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
A R P 请求
196,16 8,27,19
主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址,196,16 8,27,21
物理地址,0x 45 E F 69 5A 27 12
IP 地址,196,16 8,27,1
物 理地址,0x C 0E 16 23 41 8A 1
196,16 8,27,22 对应的物理地址是什么?
图 4 - 3 A R P 应答以单播方式发送
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
A R P 应答
196,16 8,27,19
主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址,196,16 8,27,21
物理地址,0x 45 E F 69 5A 27 12
IP 地址,196,16 8,27,1
物理地址,0x C 0E 16 23 41 8A 1
196,16 8,27,22 对应的物理地址是 0x 45 E F 69 5A 17 16
利用从应答帧中得到的目的主机的物理地址 PB完成 IP
数据报的帧封装,并将该帧发送给主 B。 这里需要 注意两点,
<1> ARP请求帧在物理网络中是以 广播方式 发送的,
ARP应答帧是以 单播方式 发送的。
<2> 目的主机必须与源主机位于同一物理网络 。
4.1.2 ARP缓存
问题,如果每次在发送 IP数据报前都重复上面的过程,势必会带来较大的开销。广播
ARP请求不仅要耗费 带宽,而且使得本地网络中的每台主机都要 处理 该广播帧,或忽略或给出响应帧。
解决,为了使地址解析时的广播尽可能少,
每台主机都维护一个名为 ARP高速缓存 的本地列表。 ARP高速缓存中含有 最近使用过的
IP地址与物理地址的映射列表 。 ARP请求和应答方都把对方的地址映射存储在 ARP高速缓存中。
使用,当发送 IP数据报需要获取目的主机的物理地址时,首先 检查 它的 ARP高速缓存,
如果 ARP高速缓存中已经 存在 对应的映射表项,则目的主机的硬件地址可以从 ARP高速缓存中获得,主机可以立即发送 IP数据报。
只有当 ARP高速缓存中 不存在 与该目的 IP地址对应的映射表项时,才广播 ARP请求。
创建,由于 ARP高速缓存位于内存中,因此每次计算机或路由器重新启动时,都必须 动态地创建地址映射表 。当主机收到一个 ARP
请求帧或响应帧时,检查它的 ARP高速缓存,
如果 ARP高速缓存中 不存在 对应的映射表项,
则将 ARP请求帧或响应帧中的发送方的 IP地址和物理地址 加入 到 ARP高速缓存中。
1,ARP高速缓存中地址映射表项的超时问题,由于 IP地址与物理地址的 映射关系 可能因网络接口或 IP地址的变化而 发生变化,
对于 ARP高速缓存中地址映射表项都存在一个 过时 的问题。
解决,给 ARP高速缓存中的每一个表项设置一个超时值,使得每个地址映射表项都有一个生命期。
不同的 TCP/IP实现 使用不同的超时值,短的仅有几十秒钟,而长的则长达几个小时。超时值越 短,系统中出现的 ARP请求广播就越多。但若超时值过 长,主机又不能及时地发现地址映射关系的改变,也可能会引起问题。
2,静态 ARP表项
一种控制地址映射表项超时值的方法是在 ARP高速缓存中创建一个 静态表项 。
静态表项是永不超时的地址映射表项。
静态表项主要用在一台主机经常向另一台主机发送 ARP请求的情况下。为了提高效率,减少不必要的开销,可以在
ARP高速缓存中创建一个静态表项,使该地址映射表项始终存在于 ARP高速缓存中,避免向某一主机发送 ARP广播。
静态表项也有可能发生变化,
–当主机接收到 ARP广播,而且该广播所含的地址信息与当前 ARP高速缓存中对应的静态表项不一致时,主机将用新收到的物理地址替代原有的物理地址,并为该表项设置超时值,使其不再是静态表项。
–使用 arp实用程序可以人工删除静态表项。
–重新启动主机也会使静态表项丢失。
静态表项的 不足之处 是不能很好地适应地址映射的变化。
4.1.3 ARP实用程序
通过 arp实用程序,可以 对 ARP高速缓存进行查看和管理 。 ARP命令可以 显示 或 删除
ARP高速缓存中的 IP地址与物理地址的映射表项,而且还可以 添加 静态表项。
arp命令的格式如下:
arp -a [inet_addr] 显示地址映射表项,[ ]为可选项。
arp -g [inet_addr] 功能与 arp -a [inet_addr]相同。
arp -d inet_addr 删除由 inet_addr所指定的表项。
arp -s inet_addr phys_addr 增加由 inet_addr和
phys_addr指定的静态表项。
inet_addr为点分十进制格式的 IP地址,phys_addr
为十六进制形式的物理地址,物理地址的字节之间用短横线分割,例如,0C-26-1B-23-45-67 。
4.1.4 地址解析实例
参与通信的源主机与目的主机可能位于同一个子网,也可能位于不同的子网。
1,源主机与目的主机 位于同一子网假设一台 IP地址为 196.168.27.20的主机,
希望向位于同一子网中 IP地址为
196.168.27.22的主机发送 IP数据报。
进行 IP地址解析的过程如图 4-4和 4-5所示,其具体步骤如下,
图 4 - 4 位于同一子网的主机进行通信时的 ARP 请求过程
IP 地址,196,16 8,27,20
物理地址,0x4 5E F 695 A 263 B
主机 A
⑵ 发送 ARP 请求主机 B
IP 地址,196,16 8,27,22
物理地址,0x4 5E F 695 A 171 6
IP 地址 物理地址
IP 地址 物理地址
196,16 8,27,20 0x4 5E F 695 A 263 B
主机 A 的 ARP 高速缓存 主机 B 的 ARP 高速缓存
⑴ 查询 ARP 高速缓存 ⑶ 写 ARP 高速缓存
⑴
⑶
图 4 - 5 位于同一子网的主机进行通信时的 ARP 应答处理
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
⑷ 发送 ARP 应答主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址 物理地址
196,16 8,27,22 0x 45 E F 69 5 A 17 16
IP 地址 物理地址
196,16 8,27,20 0x 45 E F 69 5 A 26 3B
主机 A 的 ARP 高速缓存 主机 B 的 ARP 高速缓存
⑸ 更新 ARP 高速缓存
⑸
( 1) 检查本地 ARP高速缓存
当试图确定同一子网上目的主机的物理地址时,ARP首先 检查 本地的 ARP高速缓存,确定它是否含有目的主机的 IP地址与物理地址的映射。如果 包含,则取出目的主机的物理地址,利用物理地址将 IP数据报封装成帧。
此时不需要广播 ARP请求,因为目的主机的物理地址已经在以前的通信中被存入了本地的 ARP高速缓存。如果 ARP高速缓存中 不包含 相关的地址映射,则进行下一步操作。
( 2)向目的主机 发送 ARP请求
若 ARP高速缓存不包含所需的地址映射,主机就会形成一个 ARP请求,以物理广播地址在本子网上 广播,并等待目的主机的应答。
( 3)将请求者的地址信息 写入 ARP高速缓存
由于 ARP请求是子网上的广播,因而该子网上的每台主机都会收到广播,并将自己的 IP地址和该 ARP请求中的目的主机 IP地址进行 比较 。如果 不匹配,则 ARP请求被忽略;如果
ARP请求中的目的主机 IP地址与本机的 IP地址相 匹配,则目的主机就将发送者的 IP地址与物理地址写入到本机的 ARP高速缓存中。
( 4)向请求者 发送 ARP响应
如果在 ARP请求期间产生准确的匹配,则目的主机就向发送主机以单播方式发出一个
ARP应答 (因为此时应答主机已经知道了请求方的物理地址)。
( 5)请求方 更新 ARP高速缓存
请求主机收到 ARP应答后,取出应答中应答者的 IP地址与物理地址,将其写入它的 ARP
高速缓存。至此,双方都已知道了对方的地址映射,完成了地址解析,下面就可以进行两主机之间的通信了
2,源主机与目的主机位于不同的子网
目的主机与源主机不在同一子网中时,源主机与目的主机之间有一台或多台路由器,
ARP必须为 IP数据报通过的每个路由器解析
IP地址。
源主机根据源 IP地址、目的 IP地址以及子网掩码可以 判断 出本主机与目的主机位于不同的子网,源主机 根据其路由表 (或默认网关设置)得到去往目的主机的下一跳路由器 —
— 路由器 1的 IP地址,源主机通过 ARP解析 得到路由器 1端口 1A的物理地址,然后将要传送给目的主机的 IP数据报用该物理地址封装成帧后发送给路由器 1。
图 4 - 6 位于不同子网的主机进行通信时的地址解析和数据传输处理源主机目的主机路由器 1
网络端口 1A
路由器 2
网络端口 2A
路由器 n
网络端口 nA
ARP 解析
IP 数据报传输
ARP 解析 ARP 解析
IP 数据报传输 IP 数据报传输路由器 1收到该 IP数据报后,根据目的主机的 IP
地址和自己的 路由表 确定去往目的主机的 下一跳路由器 —— 路由器 2的 IP地址,并通过 ARP解析得到路由器 2端口 2A的物理地址,然后将要传送给目的主机的 IP数据报用该物理地址封装 成帧 后发送 给路由器 2。
如此下去,以 逐级跳 的方式将 IP数据报传至路由器 n。 路由器 n根据目的主机的 IP地址解析得到目的主机的物理地址,用该物理地址将 IP数据报封装成帧后发送给目的主机。
假设一台 IP地址为 172.16.1.9,子网掩码为
255.255.255.0的客户机希望向 IP地址为 172.16.2.5的主机发送 IP数据报。
当主机 A要向主机 B传输数据报时,TCP/IP软件会利用子网掩码确定主机 B位于 远程子网 上。
( 1)检查本地高速缓存当一台设备确认目的 IP地址不属于本子网时,它会根据本身的路由表找到去往目的网络的 路由器的 IP地址
(图中为 172.16.1.1)。然后根据此 IP地址确定路由器该端口的硬件地址,ARP首先 检查 本地的 ARP高速缓存,确定它是否含有路由器对应端口的 IP地址与物理地址的映射。如果包含,则 ARP取出路由器端口的硬件地址,并以此物理地址为目的地址完成数据帧的封装和传输。
图 4 - 7 位于不同子网的主机进行通信时先完成对路由器的地址解析和数据传输
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A
⑵ 发送 ARP 请求主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 401716
IP 地址 物理地址
172,16,1,9 0x0 260 8C 5A 263 B
主机 A 的 ARP 高速缓存 路由器的 ARP 高速缓存
⑴ 查询 ARP 高速缓存
⑶ 写 ARP 高速缓存
⑴
IP 地址 物理地址主机 B 的 ARP 高速缓存
IP 地址 物理地址
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑶
( 2)向下一跳路由器发送 ARP请求如果在 ARP高速缓存中没有发现路由器 IP地址的映射,则主机 A必须向该路由器 发送 ARP请求广播,并等待答复。该 ARP请求包含发送者的
IP地址和硬件地址,以及路由器的 IP地址。
( 3) 缓存 ARP请求由于 ARP请求是子网上的广播,因而网络上的每台设备都能接收到该数据包,并将自己的 IP地址和该 ARP请求中所指定的 IP地址相比较。若不匹配,则忽略;若相匹配,则刷新本地 ARP高速缓存。当路由器有多个网络接口时,每个接口都维护各自的高速缓存。
( 4)路由器将 ARP应答传给源主机路由器向源主机发出一个 ARP应答,应答给出了路由器与主机 A所在网络的接口的 IP地址解析。
( 5)源主机 刷新自己的 ARP高速缓存源主机刷新自己的 ARP高速缓存,使其包含从
ARP应答中得到的路由器的 IP地址 -物理地址映射。
图 4 - 8 位于不同子网的主机进行通信时路由器参与地址解析
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A
⑷ 发送 ARP 响应主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 4017 16
IP 地址 物理地址
172,16,1,9 0 x 0 2 6 0 8 C 5 A 2 6 3 B
主机 A 的 ARP 高速缓存 路由器的 ARP 高速缓存
⑸ 写 ARP 高速缓存
⑸
⑼
IP 地址 物理地址
172,16,2,1 0 x 0 0 0 0 0 C 3 0 2 4 1 2
主机 B 的 ARP 高速缓存
⑼ 写 ARP 高速缓存
IP 地址 物理地址
172,16,1,1 0 x 0 0 0 0 0 C 3 0 2 4 1 1
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑹ 发送数据帧
⑺
⑺ 查询 ARP 高速缓存
⑻ 发送 ARP 请求
( 6)源主机向路由器 发送数据完成路由器地址的解析后,将数据传给路由器。
( 7)路由器进行转发前查询 ARP高速缓存数据被传送到路由器后,路由器根据 IP数据报中目的主机的 IP地址和 路由表 确定数据是否已到达最后一跳路由器。若不是,则继续向下一跳路由器转发;否则,可以直接发往目的主机。
( 8)向目的主机发送 ARP请求如果在路由器的 ARP高速缓存中没有找到目的主机的地址映射,则路由器就必须向通往目的网络的接口广播一个 ARP请求,并等待答复。
( 9)刷新 ARP高速缓存目的子网上的所有主机均能接收到 ARP广播,并将自己的 IP地址与 ARP请求中所指定的 IP地址进行比较。如果不相匹配,则抛弃该 ARP请求;如果匹配,
则目的主机刷新它的 ARP高速缓存表目。
( 10)目的主机将 ARP应答发送回路由器目的主机向路由器发回一个 ARP应答。应答中包含对目的主机地址的解析结果。
( 11)路由器刷新高速缓存路由器收到应答后,刷新自己的高速缓存,使其包含目的主机的地址映射。
( 12)路由器向目的主机转发数据完成目的主机地址的解析后,源主机根据目的主机的物理地址进行物理数据帧的封装,然后将数据传给目的主机。
至此,源主机和目的主机完成了一次单向通信。
第一次通信时要完成 ARP高速缓存的写入,
后面的通信就变得容易得多了。 引入 ARP高速缓存的好处 在于:一次解析,多次使用。
这里需要 注意 的是:数据包在从源到目的地的传输是通过 逐级跳 的方式完成的。在转发过程中数据包的 IP地址是不发生变化的,而 物理地址在每一跳都会发生变化 。远程通信时的逐段地址解析正是为了满足这一要求。
图 4 - 9 位于不同子网的主机进行通信时路由器转发数据
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A 主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 401716
IP 地址 物理地址
172,16,1,9 0x0 260 8C 5A 263 B
172,16,2,5 0x0 260 8C 401 716
主机 A 的 A RP 高速缓存路由器的 ARP 高速缓存
IP 地址 物理地址
172,16,2,1 0x0 000 0C 302 412
主机 B 的 ARP 高速缓存
IP 地址 物理地址
172,16,1,1 0x0 000 0C 302 41 1
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑾ 刷新 ARP 高速缓存
⑿ 发送数据帧
⑽ 发送 ARP 请求返回
4.2 反向地址解析协议 (RARP)
反向地址解析协议 RARP可以实现从物理地址到 IP地址的转换。反向地址解析协议被无盘计算机用来获取其 IP地址。由于无盘计算机没有外部存储器来记录其 IP地址,一旦关机,就会丢掉它的 IP地址。
无盘计算机为了在开机时获得它的 IP地址,
必须有一个 唯一的且容易读取的标识符,根据这一标识,无盘计算机可以从 RARP服务器 上获得其 IP地址。
物理地址 可以直接从硬件( NIC) 中读取,而且物理地址在一个物理网络中是唯一的。因此,物理地址是解析协议地址的最佳标识符。
在进行反向地址解析前,无盘计算机只知道自己的物理地址,另外还具有一个位于 ROM中的基本输入 /输出系统。通过这个基本输入 /输出系统无盘计算机可以在网络上传送数据。
由于无盘计算机不知道自己的 IP地址,同时也不知道 RARP服务器的 IP地址和物理地址,因此,无盘计算机只能 以广播方式发出 RARP请求 。反向地址解析过程如图 4-10所示。
之所以 RARP服务器能够给出无盘计算机的地址映射,是因为 RARP服务器上存有管理人员配置好的 物理地址 -IP地址映射表 。
图 4 - 1 0 R A R P 请求与应答过程物理地址,0 x 4 5 E F 6 9 5 A 2 6 3 B
R A R P 地址映射表物理地址 I P 地址
0 x 4 5 E F 6 9 5 A 2 6 3 B 1 9 6,1 6 8,27,20
R A R P 请求 R A R P 应答
R A R P 服务器
( 1)无盘计算机以广播方式发出携带本机物理地址的
RARP请求。注意这里的广播是帧的广播,即目的
MAC地址为全,1”。
( 2)网上所有的计算机均收到该请求,但只有提供
RARP服务的 RARP服务器处理请求并根据请求者的物理地址 查物理地址 -IP地址映射表,然后形成应答。
应答以单播方式发送。
为了保证系统的 可靠性,可以在网络上设置若干台 RARP服务器,此时,请求者会收到多个 RARP服务器的应答,而请求者只认可最先到达的一个应答。
为了防止多个 RARP服务器同时给出应答造成冲突,可以将 RARP服务器分 为主 RARP服务器 和 备份 RARP服务器,主 RARP服务器只有一个而备份 RARP服务器可以有多个。正常情况下由主 RARP服务器给出应答,只有当主
RARP服务器不能给出应答时,备份 RARP服务器才介入解析工作。
设备不仅可以对自己的地址进行反向解析,
而且 可以对其他机器的地址进行反向解析 。
地址解析协议 ARP和反向地址解析协议
RARP的 不同之处,
ARP假定每个主机都知道自己的物理地址和
IP地址的映射,地址解析的目的是求取另一个设备的物理地址,而 RARP则主要是由本机的物理地址求取本机的 IP地址。
RARP需要有 RARP服务器帮助完成解析,
而 ARP不需要专门的服务器。
返回
4.3 地址解析报文
4.3.1 地址解析报文格式
ARP和 RARP都是通过一对请求和应答报文来完成解析的。 TCP/IP协议为了保证一致性和处理上的方便,
将 ARP和 RARP的请求和应答报文设计成 相同的格式,
通过 操作字段 来加以区别。这一设计思想在 TCP/IP
协议的设计中被反复使用。
硬件类型 协议类型硬件地址长度 协议地址长度 操作类型发送方硬件地址(如以 太网地址)
发送方协议地址(如 IP 地址)
目的协议地址(如 IP 地址)
目的硬件地址(如以太网地址)
图 4 - 1 1 A R P / R A R P 报文格式
0 8 16 31
4.3.2 地址解析报文处理
在 ARP请求 报文中,发送方在 发送方硬件地址字段填入本机的物理地址,在 发送方协议地址字段 填入本机的协议地址(对于 TCP/IP协议就是 IP地址),
在 目的协议地址字段 填入准备解析的目标机的 IP地址,目的硬件地址 不填(为 0),在 操作类型字段填入,1” 表示是 ARP请求。 ARP请求以 广播方式 在物理网络中发送。
在 ARP应答 报文中,目标机将收到的 ARP请求报文中的发送 方 硬件地址和发送 方 协议地址放入 目的硬件地址 和 目的协议地址,将自己的硬件地址和协议地址( IP地址)填入 发送 方 硬件地址 和 发送 方 协议地址,在 操作类型字段填入,2” 表示是 ARP应答。
ARP应答以 单播方式 在物理网络中发送。
在 RARP请求 报文中,本机一般既是发送方又是目标机(需要获得其 IP地址),因此,在发送方硬件地址字段和目的硬件地址字段都填本机的物理地址。操作类型字段填入,3”表示是 RARP请求。 RARP请求以广播方式在物理网络中发送。
RARP应答 报文由 RARP服务器给出,因此,RARP
服务器是发送方。在 RARP应答报文中,发送方硬件地址和发送方协议地址字段填的是给出应答的 RARP
服务器的物理地址和 IP地址,而 目的硬件地址和目的协议地址字段填的是被解析对象的 IP地址和物理地址,
操作类型字段填入,4”表示是 RARP应答。 RARP
应答以单播方式在物理网络中发送。
4.3.3 地址解析报文封装
ARP/RARP报文是作为一般数据直接封装在物理帧中进行传输的,ARP/RARP报文封装在以太网物理帧中的格式如图所示。
帧类型 A R P / R A R P 报文 P A D
字节
2 28 18
图 4 - 14 A R P / R A R P 报文封装在以太网帧中格式
C R C
4
硬件类型目的地址 源地址
6 6
协议类型硬件地址长度协议地址长度操作类型发送者以太网地址目标以太网地址发送者
IP 地址目标
IP 地址
2 2 2 1 1 6 6 4 4
A R P,0x0806
R A R P,0x8 03 5
1,ARP 请求
2,AR P 应答
3,RARP 请求
4,RARP 应答
0x0800 0x06 0x04 0x0001
返回
4.4 代理 ARP
代理 ARP被用在路由器上可以使 路由器代替隐藏在路由器后面的主机响应 ARP请求 。如图 4-15所示,当主机 A请求对隐藏在路由器后面的子网中的某一主机 IP地址
( 196.168.17.33~ 196.168.17.46)进行解析时,代理 ARP路由器将用自己的物理地址
0x45EF695A2712作为解析结果进行响应。
这样,主机 A就将此物理地址作为隐藏子网上的主机的物理地址进行通信,实际上,主机 A
发出的 信息被送到代理 ARP路由器,然后由代理 ARP路由器将信息 转发 给真正拥有那一
IP地址的主机。
图 4 - 15 代理 ARP
IP 地址,196,1 6 8,17,1 7
物理地址,0x 45 E F 69 5A 27 1 2
196,1 6 8,17,34
代理 ARP 路由器
192,1 6 8,17,35 196,1 6 8,1 7,46
196,1 6 8,17,33
隐藏子网主机 A
ARP 请求
196,1 6 8,17,18
主机 B
主机 A将隐藏子网中的主机都作为本物理网络上的主机对待,但事实上却是位于不同的子网。 隐藏子网完全可以采用和主机 A所在子网不同的物理网络技术 。
借助于代理 ARP进行通信和与远程主机的通信是 不同 的。以图 4-15为例,主机 A与主机 B
进行通信时,主机 A发出的 ARP请求中的目的协议地址是 196.168.17.46。而当路由器不运行代理 ARP时,必须通过子网掩码将主机
A和主机 B划分到不同的子网中,主机 A发出的 ARP请求中的目的协议地址一定是
196.168.17.17。
本章要点
建立逻辑地址与物理地址之间映射的方法通常有 静态映射 和 动态映射 。动态映射是在需要获得地址映射关系时利用网络通信协议直接从其他主机上获得映射信息。 因特网采用了动态映射 的方法进行地址映射。
获得逻辑地址与物理地址之间的映射关系称为 地址解析 。
地址解析协议 ARP是将逻辑地址( IP地址)
映射到物理地址的动态映射协议。
ARP高速缓存 中含有最近使用过的 IP地址与物理地址的映射列表 。
在 ARP高速缓存中创建的 静态表项 是永不超时的地址映射表项。
反向地址解析协议 RARP是将给定的物理地址映射到逻辑地址( IP地址)的动态映射。
RARP需要有 RARP服务器 帮助完成解析。
ARP请求和 RARP请求,都是采用本地物理网络 广播 实现的。
在 代理 ARP中,当主机请求对隐藏在路由器后面的子网中的某一主机 IP地址进行解析时,
代理 ARP路由器将用自己的物理地址作为解析结果进行响应。
采用的技术是在各种物理网络技术上覆盖一层软件 (IP协议 +ARP协议 +RARP协议 ),将物理地址隐藏起来。但因特网技术并没有改变底层的物理网络,最终数据还是在物理网络上传输,
而 在物理网络上传输时使用的仍是物理地址 。
因特网 在网络层使用 IP地址的同时,在物理网络中仍使用物理地址 。这样一来,网络中就同时存在两套地址,而且在这 两套地址之间必须建立映射关系 。
IP地址又称为 逻辑地址,逻辑地址由软件进行处理 。 建立逻辑地址与 物理地址 之间 映射的方法通常有两种,
静态映射 主要采用地址映射表格来实现逻辑地址与物理地址之间的映射 。 由于地址映射表一般由 人工方式建立和维护,所以 不能适应 物理地址和逻辑地址频繁变化的网络和规模庞大的网络 。
动态映射 是在需要获得地址映射关系时 利用网络通信协议 直接从其他主机上获得映射信息。
因特网采用了动态映射的方法进行地址映射。
逻辑地址与物理地址之间的映射称为地址解析 (Address resolution)。 地址解析包括 两个方面 的内容:
从 IP地址到物理地址的映射从物理地址到 IP地址的映射
TCP/IP用 两个协议 来实现这两种映射,一个是地址解析协议 ARP,另一个是 反向地址解析协议 RARP。
ARP用于从 IP地址到物理地址的映射
RARP用于从物理地址到 IP地址的映射第 4章 地址解析
4.1 地址解析协议 (ARP)
4.2 反向地址解析协议 (RARP)
4.3 地址解析报文
4.4 代理 ARP
4.1 地址解析协议 (ARP)
4.1.1 地址解析原理
地址解析协议 ARP使 IP能够获得与某个给定 IP地址相关的主机物理地址。
ARP的功能分为 两部分,
– 发送数据包请求获得目的主机的物理地址
– 向请求物理地址的主机发送解析结果。
当主机 A需要向同一物理网络中的主机 B发送 IP数据报时,主机 A的 IP层要将 IP数据报传给 数据链路层进行帧封装,封装时要求给出目的主机的物理地址。
ARP请求帧将包括如下 信息,
请求主机的物理地址 PA
请求主机的 IP地址 IA
目的主机的 IP地址 IB
主机 A在本地网络中广播 ARP请求帧,请求帧的目的地址为广播地址(全,1” )。
ARP应答帧 直接发回 给发送 ARP请求的主机
A 。 ARP应答帧包含以下 信息,
应答主机的物理地址 PB;
应答主机的 IP地址 IB;
请求主机的物理地址 PA;
请求主机的 IP地址 IA
图 4 - 2 A R P 请求以广播方式发送
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
A R P 请求
196,16 8,27,19
主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址,196,16 8,27,21
物理地址,0x 45 E F 69 5A 27 12
IP 地址,196,16 8,27,1
物 理地址,0x C 0E 16 23 41 8A 1
196,16 8,27,22 对应的物理地址是什么?
图 4 - 3 A R P 应答以单播方式发送
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
A R P 应答
196,16 8,27,19
主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址,196,16 8,27,21
物理地址,0x 45 E F 69 5A 27 12
IP 地址,196,16 8,27,1
物理地址,0x C 0E 16 23 41 8A 1
196,16 8,27,22 对应的物理地址是 0x 45 E F 69 5A 17 16
利用从应答帧中得到的目的主机的物理地址 PB完成 IP
数据报的帧封装,并将该帧发送给主 B。 这里需要 注意两点,
<1> ARP请求帧在物理网络中是以 广播方式 发送的,
ARP应答帧是以 单播方式 发送的。
<2> 目的主机必须与源主机位于同一物理网络 。
4.1.2 ARP缓存
问题,如果每次在发送 IP数据报前都重复上面的过程,势必会带来较大的开销。广播
ARP请求不仅要耗费 带宽,而且使得本地网络中的每台主机都要 处理 该广播帧,或忽略或给出响应帧。
解决,为了使地址解析时的广播尽可能少,
每台主机都维护一个名为 ARP高速缓存 的本地列表。 ARP高速缓存中含有 最近使用过的
IP地址与物理地址的映射列表 。 ARP请求和应答方都把对方的地址映射存储在 ARP高速缓存中。
使用,当发送 IP数据报需要获取目的主机的物理地址时,首先 检查 它的 ARP高速缓存,
如果 ARP高速缓存中已经 存在 对应的映射表项,则目的主机的硬件地址可以从 ARP高速缓存中获得,主机可以立即发送 IP数据报。
只有当 ARP高速缓存中 不存在 与该目的 IP地址对应的映射表项时,才广播 ARP请求。
创建,由于 ARP高速缓存位于内存中,因此每次计算机或路由器重新启动时,都必须 动态地创建地址映射表 。当主机收到一个 ARP
请求帧或响应帧时,检查它的 ARP高速缓存,
如果 ARP高速缓存中 不存在 对应的映射表项,
则将 ARP请求帧或响应帧中的发送方的 IP地址和物理地址 加入 到 ARP高速缓存中。
1,ARP高速缓存中地址映射表项的超时问题,由于 IP地址与物理地址的 映射关系 可能因网络接口或 IP地址的变化而 发生变化,
对于 ARP高速缓存中地址映射表项都存在一个 过时 的问题。
解决,给 ARP高速缓存中的每一个表项设置一个超时值,使得每个地址映射表项都有一个生命期。
不同的 TCP/IP实现 使用不同的超时值,短的仅有几十秒钟,而长的则长达几个小时。超时值越 短,系统中出现的 ARP请求广播就越多。但若超时值过 长,主机又不能及时地发现地址映射关系的改变,也可能会引起问题。
2,静态 ARP表项
一种控制地址映射表项超时值的方法是在 ARP高速缓存中创建一个 静态表项 。
静态表项是永不超时的地址映射表项。
静态表项主要用在一台主机经常向另一台主机发送 ARP请求的情况下。为了提高效率,减少不必要的开销,可以在
ARP高速缓存中创建一个静态表项,使该地址映射表项始终存在于 ARP高速缓存中,避免向某一主机发送 ARP广播。
静态表项也有可能发生变化,
–当主机接收到 ARP广播,而且该广播所含的地址信息与当前 ARP高速缓存中对应的静态表项不一致时,主机将用新收到的物理地址替代原有的物理地址,并为该表项设置超时值,使其不再是静态表项。
–使用 arp实用程序可以人工删除静态表项。
–重新启动主机也会使静态表项丢失。
静态表项的 不足之处 是不能很好地适应地址映射的变化。
4.1.3 ARP实用程序
通过 arp实用程序,可以 对 ARP高速缓存进行查看和管理 。 ARP命令可以 显示 或 删除
ARP高速缓存中的 IP地址与物理地址的映射表项,而且还可以 添加 静态表项。
arp命令的格式如下:
arp -a [inet_addr] 显示地址映射表项,[ ]为可选项。
arp -g [inet_addr] 功能与 arp -a [inet_addr]相同。
arp -d inet_addr 删除由 inet_addr所指定的表项。
arp -s inet_addr phys_addr 增加由 inet_addr和
phys_addr指定的静态表项。
inet_addr为点分十进制格式的 IP地址,phys_addr
为十六进制形式的物理地址,物理地址的字节之间用短横线分割,例如,0C-26-1B-23-45-67 。
4.1.4 地址解析实例
参与通信的源主机与目的主机可能位于同一个子网,也可能位于不同的子网。
1,源主机与目的主机 位于同一子网假设一台 IP地址为 196.168.27.20的主机,
希望向位于同一子网中 IP地址为
196.168.27.22的主机发送 IP数据报。
进行 IP地址解析的过程如图 4-4和 4-5所示,其具体步骤如下,
图 4 - 4 位于同一子网的主机进行通信时的 ARP 请求过程
IP 地址,196,16 8,27,20
物理地址,0x4 5E F 695 A 263 B
主机 A
⑵ 发送 ARP 请求主机 B
IP 地址,196,16 8,27,22
物理地址,0x4 5E F 695 A 171 6
IP 地址 物理地址
IP 地址 物理地址
196,16 8,27,20 0x4 5E F 695 A 263 B
主机 A 的 ARP 高速缓存 主机 B 的 ARP 高速缓存
⑴ 查询 ARP 高速缓存 ⑶ 写 ARP 高速缓存
⑴
⑶
图 4 - 5 位于同一子网的主机进行通信时的 ARP 应答处理
IP 地址,196,16 8,27,20
物理地址,0x 45 E F 69 5A 26 3B
主机 A
⑷ 发送 ARP 应答主机 B
IP 地址,196,16 8,27,22
物理地址,0x 45 E F 69 5A 17 16
IP 地址 物理地址
196,16 8,27,22 0x 45 E F 69 5 A 17 16
IP 地址 物理地址
196,16 8,27,20 0x 45 E F 69 5 A 26 3B
主机 A 的 ARP 高速缓存 主机 B 的 ARP 高速缓存
⑸ 更新 ARP 高速缓存
⑸
( 1) 检查本地 ARP高速缓存
当试图确定同一子网上目的主机的物理地址时,ARP首先 检查 本地的 ARP高速缓存,确定它是否含有目的主机的 IP地址与物理地址的映射。如果 包含,则取出目的主机的物理地址,利用物理地址将 IP数据报封装成帧。
此时不需要广播 ARP请求,因为目的主机的物理地址已经在以前的通信中被存入了本地的 ARP高速缓存。如果 ARP高速缓存中 不包含 相关的地址映射,则进行下一步操作。
( 2)向目的主机 发送 ARP请求
若 ARP高速缓存不包含所需的地址映射,主机就会形成一个 ARP请求,以物理广播地址在本子网上 广播,并等待目的主机的应答。
( 3)将请求者的地址信息 写入 ARP高速缓存
由于 ARP请求是子网上的广播,因而该子网上的每台主机都会收到广播,并将自己的 IP地址和该 ARP请求中的目的主机 IP地址进行 比较 。如果 不匹配,则 ARP请求被忽略;如果
ARP请求中的目的主机 IP地址与本机的 IP地址相 匹配,则目的主机就将发送者的 IP地址与物理地址写入到本机的 ARP高速缓存中。
( 4)向请求者 发送 ARP响应
如果在 ARP请求期间产生准确的匹配,则目的主机就向发送主机以单播方式发出一个
ARP应答 (因为此时应答主机已经知道了请求方的物理地址)。
( 5)请求方 更新 ARP高速缓存
请求主机收到 ARP应答后,取出应答中应答者的 IP地址与物理地址,将其写入它的 ARP
高速缓存。至此,双方都已知道了对方的地址映射,完成了地址解析,下面就可以进行两主机之间的通信了
2,源主机与目的主机位于不同的子网
目的主机与源主机不在同一子网中时,源主机与目的主机之间有一台或多台路由器,
ARP必须为 IP数据报通过的每个路由器解析
IP地址。
源主机根据源 IP地址、目的 IP地址以及子网掩码可以 判断 出本主机与目的主机位于不同的子网,源主机 根据其路由表 (或默认网关设置)得到去往目的主机的下一跳路由器 —
— 路由器 1的 IP地址,源主机通过 ARP解析 得到路由器 1端口 1A的物理地址,然后将要传送给目的主机的 IP数据报用该物理地址封装成帧后发送给路由器 1。
图 4 - 6 位于不同子网的主机进行通信时的地址解析和数据传输处理源主机目的主机路由器 1
网络端口 1A
路由器 2
网络端口 2A
路由器 n
网络端口 nA
ARP 解析
IP 数据报传输
ARP 解析 ARP 解析
IP 数据报传输 IP 数据报传输路由器 1收到该 IP数据报后,根据目的主机的 IP
地址和自己的 路由表 确定去往目的主机的 下一跳路由器 —— 路由器 2的 IP地址,并通过 ARP解析得到路由器 2端口 2A的物理地址,然后将要传送给目的主机的 IP数据报用该物理地址封装 成帧 后发送 给路由器 2。
如此下去,以 逐级跳 的方式将 IP数据报传至路由器 n。 路由器 n根据目的主机的 IP地址解析得到目的主机的物理地址,用该物理地址将 IP数据报封装成帧后发送给目的主机。
假设一台 IP地址为 172.16.1.9,子网掩码为
255.255.255.0的客户机希望向 IP地址为 172.16.2.5的主机发送 IP数据报。
当主机 A要向主机 B传输数据报时,TCP/IP软件会利用子网掩码确定主机 B位于 远程子网 上。
( 1)检查本地高速缓存当一台设备确认目的 IP地址不属于本子网时,它会根据本身的路由表找到去往目的网络的 路由器的 IP地址
(图中为 172.16.1.1)。然后根据此 IP地址确定路由器该端口的硬件地址,ARP首先 检查 本地的 ARP高速缓存,确定它是否含有路由器对应端口的 IP地址与物理地址的映射。如果包含,则 ARP取出路由器端口的硬件地址,并以此物理地址为目的地址完成数据帧的封装和传输。
图 4 - 7 位于不同子网的主机进行通信时先完成对路由器的地址解析和数据传输
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A
⑵ 发送 ARP 请求主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 401716
IP 地址 物理地址
172,16,1,9 0x0 260 8C 5A 263 B
主机 A 的 ARP 高速缓存 路由器的 ARP 高速缓存
⑴ 查询 ARP 高速缓存
⑶ 写 ARP 高速缓存
⑴
IP 地址 物理地址主机 B 的 ARP 高速缓存
IP 地址 物理地址
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑶
( 2)向下一跳路由器发送 ARP请求如果在 ARP高速缓存中没有发现路由器 IP地址的映射,则主机 A必须向该路由器 发送 ARP请求广播,并等待答复。该 ARP请求包含发送者的
IP地址和硬件地址,以及路由器的 IP地址。
( 3) 缓存 ARP请求由于 ARP请求是子网上的广播,因而网络上的每台设备都能接收到该数据包,并将自己的 IP地址和该 ARP请求中所指定的 IP地址相比较。若不匹配,则忽略;若相匹配,则刷新本地 ARP高速缓存。当路由器有多个网络接口时,每个接口都维护各自的高速缓存。
( 4)路由器将 ARP应答传给源主机路由器向源主机发出一个 ARP应答,应答给出了路由器与主机 A所在网络的接口的 IP地址解析。
( 5)源主机 刷新自己的 ARP高速缓存源主机刷新自己的 ARP高速缓存,使其包含从
ARP应答中得到的路由器的 IP地址 -物理地址映射。
图 4 - 8 位于不同子网的主机进行通信时路由器参与地址解析
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A
⑷ 发送 ARP 响应主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 4017 16
IP 地址 物理地址
172,16,1,9 0 x 0 2 6 0 8 C 5 A 2 6 3 B
主机 A 的 ARP 高速缓存 路由器的 ARP 高速缓存
⑸ 写 ARP 高速缓存
⑸
⑼
IP 地址 物理地址
172,16,2,1 0 x 0 0 0 0 0 C 3 0 2 4 1 2
主机 B 的 ARP 高速缓存
⑼ 写 ARP 高速缓存
IP 地址 物理地址
172,16,1,1 0 x 0 0 0 0 0 C 3 0 2 4 1 1
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑹ 发送数据帧
⑺
⑺ 查询 ARP 高速缓存
⑻ 发送 ARP 请求
( 6)源主机向路由器 发送数据完成路由器地址的解析后,将数据传给路由器。
( 7)路由器进行转发前查询 ARP高速缓存数据被传送到路由器后,路由器根据 IP数据报中目的主机的 IP地址和 路由表 确定数据是否已到达最后一跳路由器。若不是,则继续向下一跳路由器转发;否则,可以直接发往目的主机。
( 8)向目的主机发送 ARP请求如果在路由器的 ARP高速缓存中没有找到目的主机的地址映射,则路由器就必须向通往目的网络的接口广播一个 ARP请求,并等待答复。
( 9)刷新 ARP高速缓存目的子网上的所有主机均能接收到 ARP广播,并将自己的 IP地址与 ARP请求中所指定的 IP地址进行比较。如果不相匹配,则抛弃该 ARP请求;如果匹配,
则目的主机刷新它的 ARP高速缓存表目。
( 10)目的主机将 ARP应答发送回路由器目的主机向路由器发回一个 ARP应答。应答中包含对目的主机地址的解析结果。
( 11)路由器刷新高速缓存路由器收到应答后,刷新自己的高速缓存,使其包含目的主机的地址映射。
( 12)路由器向目的主机转发数据完成目的主机地址的解析后,源主机根据目的主机的物理地址进行物理数据帧的封装,然后将数据传给目的主机。
至此,源主机和目的主机完成了一次单向通信。
第一次通信时要完成 ARP高速缓存的写入,
后面的通信就变得容易得多了。 引入 ARP高速缓存的好处 在于:一次解析,多次使用。
这里需要 注意 的是:数据包在从源到目的地的传输是通过 逐级跳 的方式完成的。在转发过程中数据包的 IP地址是不发生变化的,而 物理地址在每一跳都会发生变化 。远程通信时的逐段地址解析正是为了满足这一要求。
图 4 - 9 位于不同子网的主机进行通信时路由器转发数据
IP 地址,172,16,1,9
物理地址,0x02608C 5A 263B
主机 A 主机 B
IP 地址,172,16,2,5
物理地址,0x02608C 401716
IP 地址 物理地址
172,16,1,9 0x0 260 8C 5A 263 B
172,16,2,5 0x0 260 8C 401 716
主机 A 的 A RP 高速缓存路由器的 ARP 高速缓存
IP 地址 物理地址
172,16,2,1 0x0 000 0C 302 412
主机 B 的 ARP 高速缓存
IP 地址 物理地址
172,16,1,1 0x0 000 0C 302 41 1
IP 地址,172,16,1,1
物理地址,0x00000C 30241 1
IP 地址,172,16,2,1
物理地址,0x00000C 302412
⑾ 刷新 ARP 高速缓存
⑿ 发送数据帧
⑽ 发送 ARP 请求返回
4.2 反向地址解析协议 (RARP)
反向地址解析协议 RARP可以实现从物理地址到 IP地址的转换。反向地址解析协议被无盘计算机用来获取其 IP地址。由于无盘计算机没有外部存储器来记录其 IP地址,一旦关机,就会丢掉它的 IP地址。
无盘计算机为了在开机时获得它的 IP地址,
必须有一个 唯一的且容易读取的标识符,根据这一标识,无盘计算机可以从 RARP服务器 上获得其 IP地址。
物理地址 可以直接从硬件( NIC) 中读取,而且物理地址在一个物理网络中是唯一的。因此,物理地址是解析协议地址的最佳标识符。
在进行反向地址解析前,无盘计算机只知道自己的物理地址,另外还具有一个位于 ROM中的基本输入 /输出系统。通过这个基本输入 /输出系统无盘计算机可以在网络上传送数据。
由于无盘计算机不知道自己的 IP地址,同时也不知道 RARP服务器的 IP地址和物理地址,因此,无盘计算机只能 以广播方式发出 RARP请求 。反向地址解析过程如图 4-10所示。
之所以 RARP服务器能够给出无盘计算机的地址映射,是因为 RARP服务器上存有管理人员配置好的 物理地址 -IP地址映射表 。
图 4 - 1 0 R A R P 请求与应答过程物理地址,0 x 4 5 E F 6 9 5 A 2 6 3 B
R A R P 地址映射表物理地址 I P 地址
0 x 4 5 E F 6 9 5 A 2 6 3 B 1 9 6,1 6 8,27,20
R A R P 请求 R A R P 应答
R A R P 服务器
( 1)无盘计算机以广播方式发出携带本机物理地址的
RARP请求。注意这里的广播是帧的广播,即目的
MAC地址为全,1”。
( 2)网上所有的计算机均收到该请求,但只有提供
RARP服务的 RARP服务器处理请求并根据请求者的物理地址 查物理地址 -IP地址映射表,然后形成应答。
应答以单播方式发送。
为了保证系统的 可靠性,可以在网络上设置若干台 RARP服务器,此时,请求者会收到多个 RARP服务器的应答,而请求者只认可最先到达的一个应答。
为了防止多个 RARP服务器同时给出应答造成冲突,可以将 RARP服务器分 为主 RARP服务器 和 备份 RARP服务器,主 RARP服务器只有一个而备份 RARP服务器可以有多个。正常情况下由主 RARP服务器给出应答,只有当主
RARP服务器不能给出应答时,备份 RARP服务器才介入解析工作。
设备不仅可以对自己的地址进行反向解析,
而且 可以对其他机器的地址进行反向解析 。
地址解析协议 ARP和反向地址解析协议
RARP的 不同之处,
ARP假定每个主机都知道自己的物理地址和
IP地址的映射,地址解析的目的是求取另一个设备的物理地址,而 RARP则主要是由本机的物理地址求取本机的 IP地址。
RARP需要有 RARP服务器帮助完成解析,
而 ARP不需要专门的服务器。
返回
4.3 地址解析报文
4.3.1 地址解析报文格式
ARP和 RARP都是通过一对请求和应答报文来完成解析的。 TCP/IP协议为了保证一致性和处理上的方便,
将 ARP和 RARP的请求和应答报文设计成 相同的格式,
通过 操作字段 来加以区别。这一设计思想在 TCP/IP
协议的设计中被反复使用。
硬件类型 协议类型硬件地址长度 协议地址长度 操作类型发送方硬件地址(如以 太网地址)
发送方协议地址(如 IP 地址)
目的协议地址(如 IP 地址)
目的硬件地址(如以太网地址)
图 4 - 1 1 A R P / R A R P 报文格式
0 8 16 31
4.3.2 地址解析报文处理
在 ARP请求 报文中,发送方在 发送方硬件地址字段填入本机的物理地址,在 发送方协议地址字段 填入本机的协议地址(对于 TCP/IP协议就是 IP地址),
在 目的协议地址字段 填入准备解析的目标机的 IP地址,目的硬件地址 不填(为 0),在 操作类型字段填入,1” 表示是 ARP请求。 ARP请求以 广播方式 在物理网络中发送。
在 ARP应答 报文中,目标机将收到的 ARP请求报文中的发送 方 硬件地址和发送 方 协议地址放入 目的硬件地址 和 目的协议地址,将自己的硬件地址和协议地址( IP地址)填入 发送 方 硬件地址 和 发送 方 协议地址,在 操作类型字段填入,2” 表示是 ARP应答。
ARP应答以 单播方式 在物理网络中发送。
在 RARP请求 报文中,本机一般既是发送方又是目标机(需要获得其 IP地址),因此,在发送方硬件地址字段和目的硬件地址字段都填本机的物理地址。操作类型字段填入,3”表示是 RARP请求。 RARP请求以广播方式在物理网络中发送。
RARP应答 报文由 RARP服务器给出,因此,RARP
服务器是发送方。在 RARP应答报文中,发送方硬件地址和发送方协议地址字段填的是给出应答的 RARP
服务器的物理地址和 IP地址,而 目的硬件地址和目的协议地址字段填的是被解析对象的 IP地址和物理地址,
操作类型字段填入,4”表示是 RARP应答。 RARP
应答以单播方式在物理网络中发送。
4.3.3 地址解析报文封装
ARP/RARP报文是作为一般数据直接封装在物理帧中进行传输的,ARP/RARP报文封装在以太网物理帧中的格式如图所示。
帧类型 A R P / R A R P 报文 P A D
字节
2 28 18
图 4 - 14 A R P / R A R P 报文封装在以太网帧中格式
C R C
4
硬件类型目的地址 源地址
6 6
协议类型硬件地址长度协议地址长度操作类型发送者以太网地址目标以太网地址发送者
IP 地址目标
IP 地址
2 2 2 1 1 6 6 4 4
A R P,0x0806
R A R P,0x8 03 5
1,ARP 请求
2,AR P 应答
3,RARP 请求
4,RARP 应答
0x0800 0x06 0x04 0x0001
返回
4.4 代理 ARP
代理 ARP被用在路由器上可以使 路由器代替隐藏在路由器后面的主机响应 ARP请求 。如图 4-15所示,当主机 A请求对隐藏在路由器后面的子网中的某一主机 IP地址
( 196.168.17.33~ 196.168.17.46)进行解析时,代理 ARP路由器将用自己的物理地址
0x45EF695A2712作为解析结果进行响应。
这样,主机 A就将此物理地址作为隐藏子网上的主机的物理地址进行通信,实际上,主机 A
发出的 信息被送到代理 ARP路由器,然后由代理 ARP路由器将信息 转发 给真正拥有那一
IP地址的主机。
图 4 - 15 代理 ARP
IP 地址,196,1 6 8,17,1 7
物理地址,0x 45 E F 69 5A 27 1 2
196,1 6 8,17,34
代理 ARP 路由器
192,1 6 8,17,35 196,1 6 8,1 7,46
196,1 6 8,17,33
隐藏子网主机 A
ARP 请求
196,1 6 8,17,18
主机 B
主机 A将隐藏子网中的主机都作为本物理网络上的主机对待,但事实上却是位于不同的子网。 隐藏子网完全可以采用和主机 A所在子网不同的物理网络技术 。
借助于代理 ARP进行通信和与远程主机的通信是 不同 的。以图 4-15为例,主机 A与主机 B
进行通信时,主机 A发出的 ARP请求中的目的协议地址是 196.168.17.46。而当路由器不运行代理 ARP时,必须通过子网掩码将主机
A和主机 B划分到不同的子网中,主机 A发出的 ARP请求中的目的协议地址一定是
196.168.17.17。
本章要点
建立逻辑地址与物理地址之间映射的方法通常有 静态映射 和 动态映射 。动态映射是在需要获得地址映射关系时利用网络通信协议直接从其他主机上获得映射信息。 因特网采用了动态映射 的方法进行地址映射。
获得逻辑地址与物理地址之间的映射关系称为 地址解析 。
地址解析协议 ARP是将逻辑地址( IP地址)
映射到物理地址的动态映射协议。
ARP高速缓存 中含有最近使用过的 IP地址与物理地址的映射列表 。
在 ARP高速缓存中创建的 静态表项 是永不超时的地址映射表项。
反向地址解析协议 RARP是将给定的物理地址映射到逻辑地址( IP地址)的动态映射。
RARP需要有 RARP服务器 帮助完成解析。
ARP请求和 RARP请求,都是采用本地物理网络 广播 实现的。
在 代理 ARP中,当主机请求对隐藏在路由器后面的子网中的某一主机 IP地址进行解析时,
代理 ARP路由器将用自己的物理地址作为解析结果进行响应。