第5章:RARP(Reverse Address Resolution Protocol)
逆地址解析协议
一、导读
1.1 本章学习目标
第5章介绍RARP(逆地址解析协议)——ARP的反向操作。ARP将IP地址转换为MAC地址,而RARP将MAC地址转换为IP地址。RARP主要用于无盘工作站启动时获取自己的IP地址。虽然RARP在现代网络中已被BOOTP和DHCP取代,但理解RARP有助于理解IP地址分配的历史演进和协议设计的思路。
本章的核心学习目标包括:
- 理解RARP的基本功能和用途:为什么无盘工作站需要RARP
- 掌握RARP的报文格式:与ARP的异同
- 理解RARP的工作流程:请求广播、响应单播
- 认识RARP的局限性:为什么它被BOOTP/DHCP取代
- 了解RARP的历史地位:从RARP到BOOTP到DHCP的演进路径
- 理解现代IP地址分配方案:DHCP如何取代了RARP的所有功能
1.2 为什么本章如此重要
虽然RARP已经过时,但它在协议设计史上占有重要地位。RARP是第一个尝试解决"主机如何获取自己的IP地址"这一问题的协议。这个问题的解决经历了RARP→BOOTP→DHCP三个阶段,每个阶段都在前一个阶段的基础上增加了功能。
理解这个演进过程,有助于你理解为什么DHCP是今天的设计——它不是凭空产生的,而是从简单到复杂、从功能不足到功能完善的渐进演化。同时,RARP的局限性也揭示了网络协议设计中的一些基本原则:可扩展性、跨子网能力、配置灵活性。
1.3 核心问题引导
在阅读本章时,请带着以下问题思考:
无盘工作站启动时面临什么问题?为什么它不能像普通主机一样配置IP地址?
RARP和ARP的报文格式几乎相同,它们的核心区别是什么?
RARP为什么只能在单个物理网络工作?如何让它支持跨路由器?
RARP的静态映射表管理有什么困难?为什么动态分配更好?
BOOTP在RARP的基础上增加了哪些功能?DHCP又在BOOTP的基础上增加了什么?
现代网络中还有哪些场景需要"从MAC地址获取IP地址"的功能?
二、核心概念详解
2.1 RARP的背景:无盘工作站
在1980年代和1990年代初期,许多组织使用无盘工作站(diskless workstation)。这些工作站没有硬盘,甚至没有软盘,它们的操作系统和应用程序存储在远程服务器上。
无盘工作站启动时面临一个基本问题:它不知道自己的IP地址。
普通主机的IP地址通常通过手动配置(静态IP)或配置文件(如 /etc/network/interfaces)获得。但无盘工作站没有本地存储,无法保存配置文件。它唯一知道的是自己的MAC地址(烧录在网卡ROM中)。
RARP就是为解决这个问题而设计的:无盘工作站广播自己的MAC地址,请求网络中的RARP服务器告诉它对应的IP地址。
2.2 RARP的报文格式
RARP的报文格式与ARP几乎完全相同,唯一的区别是操作码:
| 字段 | ARP | RARP |
|---|---|---|
| 硬件类型 | 1(以太网) | 1(以太网) |
| 协议类型 | 0x0800(IPv4) | 0x0800(IPv4) |
| 硬件地址长度 | 6 | 6 |
| 协议地址长度 | 4 | 4 |
| 操作码 | 1=请求, 2=响应 | 3=请求, 4=响应 |
| 发送方MAC | 请求方的MAC | 请求方的MAC |
| 发送方IP | 请求方的IP | 0.0.0.0(未知) |
| 目标MAC | 00:00:00:00:00:00(请求)/ 目标MAC(响应) | 00:00:00:00:00:00(请求)/ 目标MAC(响应) |
| 目标IP | 目标IP | 目标IP(服务器填写) |
RARP报文同样封装在以太网帧中,类型字段为 0x8035。
2.3 RARP的工作流程
2.3.1 基本流程
无盘工作站 (MAC: 00:11:22:33:44:55, IP: 未知)
│
│ RARP请求(广播):
│ "我的MAC是00:11:22:33:44:55,请告诉我我的IP地址"
│ 以太网帧:目的MAC = FF:FF:FF:FF:FF:FF
│ ──────────────────────────────────────────→ 局域网所有主机
│
│ RARP服务器 (192.168.1.1) 收到请求:
│ 查找映射表:00:11:22:33:44:55 → 192.168.1.100
│
│ RARP响应(单播):
│ "你的MAC对应的IP地址是192.168.1.100"
│ ←────────────────────────────────────────── RARP服务器
│
│ 无盘工作站获得IP地址:192.168.1.100
│ 接下来可以使用TFTP下载引导程序2.3.2 RARP服务器的配置
RARP服务器维护一个静态映射表,记录MAC地址到IP地址的对应关系。管理员必须手动配置这个表:
# /etc/ethers 文件示例(Solaris系统)
00:11:22:33:44:55 192.168.1.100
00:11:22:33:44:66 192.168.1.101
00:11:22:33:44:77 192.168.1.1022.4 RARP的局限性
RARP虽然解决了无盘工作站获取IP地址的问题,但存在严重的局限性:
2.4.1 不支持跨路由器
RARP请求是链路层广播帧,路由器不会转发广播帧。因此,每个物理网络都需要一个RARP服务器。在大型网络中,这意味着需要在每个子网都部署一台RARP服务器,管理成本极高。
2.4.2 只能提供IP地址
RARP只能告诉客户端IP地址,不能提供其他重要的网络配置信息:
- 子网掩码
- 默认网关
- DNS服务器地址
- 引导文件名(用于TFTP下载)
这些信息对于主机的正常启动和运行至关重要,但RARP无法满足。
2.4.3 静态映射管理困难
RARP服务器使用静态映射表,管理员必须为每台无盘工作站手动配置MAC-IP对应关系。当设备数量增加或设备更换时,维护成本很高。
2.5 从RARP到BOOTP到DHCP的演进
2.5.1 BOOTP(Bootstrap Protocol)
BOOTP(RFC 951, 1985年)在RARP的基础上做了重大改进:
| 特性 | RARP | BOOTP |
|---|---|---|
| 传输方式 | 链路层广播 | UDP数据报(可跨路由器) |
| 提供的信息 | 仅IP地址 | IP地址、网关、引导文件名等 |
| 地址映射 | 静态 | 静态(但支持更丰富的选项) |
| 跨路由器 | 不支持 | 支持(通过BOOTP中继代理) |
BOOTP使用UDP传输(客户端端口68,服务器端口67),因此可以跨路由器传播。BOOTP还引入了"选项"(options)字段,可以携带子网掩码、网关、DNS等额外信息。
2.5.2 DHCP(Dynamic Host Configuration Protocol)
DHCP(RFC 2131, 1997年)是BOOTP的超集,增加了动态地址分配能力:
| 特性 | BOOTP | DHCP |
|---|---|---|
| 地址分配 | 静态(预配置) | 动态(租约机制) |
| 地址复用 | 不支持 | 支持(租约到期后回收) |
| 地址续约 | 不支持 | 支持(T1/T2定时器) |
| 兼容BOOTP | — | 完全兼容 |
DHCP的DORA过程(Discover→Offer→Request→Acknowledge)实现了动态地址分配,是现代网络中IP地址管理的标准方案。
三、实战案例
3.1 案例一:查看现代系统的DHCP配置
虽然RARP已经过时,但我们可以查看现代系统如何使用DHCP获取IP地址:
# 查看DHCP租约信息
cat /var/lib/dhcp/dhclient.leases
# lease {
# interface "eth0";
# fixed-address 192.168.1.100;
# option subnet-mask 255.255.255.0;
# option routers 192.168.1.1;
# option domain-name-servers 8.8.8.8, 8.8.4.4;
# renew 2 2026/10/07 12:00:00;
# rebind 2 2026/10/07 18:00:00;
# expire 2 2026/10/08 12:00:00;
# }
# 手动释放和获取DHCP地址
sudo dhclient -r eth0 # 释放
sudo dhclient eth0 # 获取
# 查看DHCP配置文件
cat /etc/dhcp/dhclient.conf3.2 案例二:使用tcpdump观察DHCP过程
# 在DHCP服务器上抓包
sudo tcpdump -i eth0 -nn 'udp port 67 or udp port 68'输出示例(DORA过程):
# Discover(客户端广播)
12:34:56.789 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request
# Offer(服务器广播)
12:34:56.790 IP 192.168.1.1.67 > 255.255.255.255.68: BOOTP/DHCP, Offer
# Request(客户端广播)
12:34:56.791 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request
# Acknowledge(服务器广播)
12:34:56.792 IP 192.168.1.1.67 > 255.255.255.255.68: BOOTP/DHCP, ACK3.3 案例三:搭建简单的DHCP服务器(dnsmasq)
# 安装dnsmasq
sudo apt install dnsmasq
# 配置 /etc/dnsmasq.conf
# interface=eth1
# dhcp-range=192.168.2.100,192.168.2.200,12h
# dhcp-option=3,192.168.2.1
# dhcp-option=6,8.8.8.8
# 启动服务
sudo systemctl start dnsmasq四、常见误区与难点
4.1 误区一:"RARP还在使用"
RARP早已被DHCP完全取代。现代操作系统不再支持RARP客户端。如果你在教材中看到RARP,它主要是为了讲解协议演进的历史脉络。
4.2 误区二:"RARP和ARP使用相同的以太网类型"
RARP使用以太网类型 0x8035,而ARP使用 0x0806。它们虽然报文格式相似,但在链路层的标识不同。
4.3 难点:理解BOOTP中继代理
BOOTP/DHCP可以跨路由器工作,但需要路由器配置为中继代理(relay agent)。中继代理收到客户端的广播BOOTP请求后,将其封装为单播UDP数据报,发送给指定的BOOTP/DHCP服务器。
五、本章小结
第5章介绍了RARP及其历史演进:
RARP是ARP的反向操作,将MAC地址转换为IP地址,主要用于无盘工作站。
RARP的局限性:不支持跨路由器、只能提供IP地址、静态映射管理困难。
BOOTP在RARP基础上增加了跨路由器支持和丰富的配置选项。
DHCP在BOOTP基础上增加了动态地址分配和租约机制,成为现代标准。
理解RARP→BOOTP→DHCP的演进,有助于理解网络协议设计的渐进式改进思路。
六、思考与练习
思考题
如果让你从零设计一个"主机自动获取IP地址"的协议,你会如何设计?与RARP相比,你会增加哪些功能?
DHCP的租约机制解决了什么问题?如果没有租约机制,地址池耗尽后会发生什么?
为什么DHCP的Discover和Offer使用广播,而Request和Ack也使用广播而不是单播?
练习题
查看本机的DHCP租约信息,分析获得的IP地址、网关、DNS等配置。
使用tcpdump捕获一次完整的DHCP DORA过程,分析每个报文的字段。
研究IPv6的无状态地址自动配置(SLAAC),它与RARP/DHCP有什么区别?