RARP 协议

RARP 协议详解

RARP(Reverse Address Resolution Protocol,反向地址解析协议)是早期TCP/IP协议族中的链路层协议,用于将已知的MAC地址映射为IP地址。主要用于无盘工作站和磁盘less设备的网络启动,已被BOOTP和DHCP完全取代。

1. RARP 协议概述

基本概念

  • 作用:MAC地址到IP地址的反向解析
  • 发布年份:1984年
  • 协议层:链路层(OSI第2层)
  • 封装:以太网帧(EtherType=0x8035)
  • 状态已废弃,RFC 903(1984)定义
  • 工作范围:同一广播域

RARP vs ARP

特性RARPARP
解析方向MAC → IPIP → MAC
操作码3(请求),4(响应)1(请求),2(响应)
EtherType0x80350x0806
使用场景无盘启动正常通信
安全性无认证无认证
状态已废弃仍在使用

为什么需要RARP?

早期网络设备:

  • 无盘工作站:无本地存储,无法保存IP配置
  • 磁盘less终端:启动时需从网络获取IP
  • 引导加载:PXE前身,通过MAC分配固定IP

2. RARP 报文格式

以太网封装的RARP报文

以太网头部 (14字节)
+-----------------------------------+
| 目的MAC (6B,全FF广播) | 源MAC (6B) |
+-----------------------+-----------+
| 类型 (2B: 0x8035 RARP)            |
+-----------------------------------+
RARP数据 (28字节,格式与ARP相同)
+-----------------------------------+
| 硬件类型|协议类型|硬件长度|协议长度|操作码 |
+---------+--------+--------+--------+-------+
| 源MAC(6B)            | 源IP(4B,全0)       |
+----------------------+--------------------+
| 目标MAC(6B,客户端MAC)| 目标IP(4B,全0)     |
+-----------------------------------+

字段详解

字段大小RARP值ARP对比
硬件类型2字节1(以太网)1(相同)
协议类型2字节0x0800(IPv4)0x0800
硬件地址长度1字节66
协议地址长度1字节44
操作码2字节3=请求,4=响应1/2
源MAC6字节客户端MAC发送方MAC
源IP4字节全0(0.0.0.0)发送方IP
目标MAC6字节客户端MAC(请求时)全0(请求时)
目标IP4字节全0(请求),响应IP(响应时)目标IP

RARP 请求示例(十六进制)

RARP Request: MAC 00:11:22:33:44:55 请求IP
FF:FF:FF:FF:FF:FF  00:11:22:33:44:55  80:35
00:01  08:00  06:04  00:03  00:11:22:33:44:55  00:00:00:00  00:11:22:33:44:55  00:00:00:00:00:00
└广播      └客户端MAC            └操作码3    └源MAC     └源IP(0)   └目标MAC(自身)  └目标IP(0)

RARP 响应示例

RARP Reply: 00:11:22:33:44:55 的IP是192.168.1.100
00:11:22:33:44:55  AA:BB:CC:DD:EE:FF  80:35
00:01  08:00  06:04  00:04  AA:BB:CC:DD:EE:FF  C0:A8:01:64  00:11:22:33:44:55  00:00:00:00
└客户端MAC  └服务器MAC            └操作码4    └源MAC     └源IP     └目标MAC     └目标IP(0)

3. RARP 工作流程

完整启动流程

无盘工作站启动
    ↓
1. ROM代码加载,获取MAC地址
    ↓
2. 发送RARP请求(广播)
    ├─ 网络广播
    ├─ RARP服务器接收
    └─ 根据MAC查询IP地址数据库
    ↓
3. RARP服务器单播响应IP地址
    ↓
4. 客户端更新网络配置
    ↓
5. 使用IP发送BOOTP/DHCP请求获取更多配置
    ↓
6. TFTP下载引导文件,启动操作系统

RARP 服务器配置(历史)

# 早期Unix rarpd守护进程
rarpd -a          # 监听所有接口
rarpd eth0        # 指定接口

# /etc/ethers 文件(MAC到IP映射)
00:11:22:33:44:55    johnws
AA:BB:CC:DD:EE:FF    maryws

# 启动服务
/etc/init.d/rarpd start

交互示例

[无盘工作站] → RARP Request: MAC=00:11:22:33:44:55
[RARP服务器] → 查询 /etc/ethers 或数据库
[RARP服务器] → RARP Reply: IP=192.168.1.100
[工作站] → 配置IP,发送BOOTP请求
[BOOTP服务器] → 提供TFTP服务器、引导文件
[工作站] → TFTP下载 vmlinuz, initrd → 启动

4. RARP 的局限性和问题

技术限制

  1. 广播开销:每个请求产生广播风暴
  2. 单IP分配:无法提供子网掩码、网关等配置
  3. 手动配置:需要维护MAC-IP静态映射
  4. 安全性差:无认证,易受伪造响应攻击
  5. 扩展性差:局域网规模受限
  6. 仅IPv4:不支持IPv6

配置复杂性

# 传统RARP配置问题
# 1. 每个客户端需要静态/etc/ethers条目
# 2. 服务器重启丢失动态分配
# 3. 跨子网不支持(广播限制)
# 4. 无租约管理,IP冲突风险

5. RARP 替代方案

BOOTP(Bootstrap Protocol)

  • RFC 951(1985):RARP的直接继任者
  • UDP端口:67(服务器),68(客户端)
  • 功能增强
  • UDP可靠传输
  • 支持子网掩码、网关、DNS
  • 文件服务器地址
  • 仍需静态配置:MAC-IP映射

DHCP(Dynamic Host Configuration Protocol)

  • RFC 2131(1997):BOOTP的动态扩展
  • 动态IP分配:地址池管理
  • 租约机制:IP地址回收
  • 自动配置:完整网络参数
  • 重绑定:租约续期和迁移

演进路径

RARP (1984) → BOOTP (1985) → DHCP (1997)
  ↓              ↓              ↓
静态MAC-IP    静态+配置      动态+自动配置
广播风暴      UDP可靠        地址池+租约
局域网限制    跨子网支持     完整DHCP功能
已废弃        过渡方案       当前标准

6. 现代PXE启动流程

PXE(Preboot Execution Environment)

1. BIOS/UEFI → PXE ROM加载
2. 发送PXE发现包(DHCP Discover变种)
3. DHCP服务器响应:IP + PXE选项
4. TFTP下载pxelinux.0引导程序
5. 加载内核和initrd
6. 启动操作系统

DHCP/PXE配置示例

# /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.1;
    option domain-name-servers 8.8.8.8;

    # PXE支持
    next-server 192.168.1.10;  # TFTP服务器
    filename "pxelinux.0";
}

# 静态保留(类似RARP)
host workstation1 {
    hardware ethernet 00:11:22:33:44:55;
    fixed-address 192.168.1.50;
    filename "pxelinux.0";
}

7. RARP 历史实现

早期Unix实现

// 简化rarpd伪代码
void rarpd_main() {
    socket = create_raw_socket(ETHERTYPE_REVARP);
    bind_to_interface("eth0");

    while (true) {
        packet = receive_packet();
        if (is_rarp_request(packet)) {
            mac = extract_source_mac(packet);
            ip = lookup_ip_in_ethers(mac);
            if (ip) {
                send_rarp_reply(client_mac, ip, server_mac);
            }
        }
    }
}

/etc/ethers 文件格式

# MAC地址           主机名
00:11:22:33:44:55  workstation1
aa:bb:cc:dd:ee:ff  workstation2
08:00:20:01:23:45  terminal3

启动脚本

#!/bin/sh
# 传统RARP启动
if [ ! -f /etc/rc.conf ]; then
    echo "Sending RARP request..."
    rarp -a  # 触发RARP请求
    sleep 2
    ifconfig eth0 $RARP_IP netmask 255.255.255.0
    route add default gw $GATEWAY
    echo "RARP completed, IP=$RARP_IP"
fi

8. RARP 安全问题

攻击向量

  1. 响应伪造:攻击者发送虚假RARP响应
  2. IP冲突:分配重复IP地址
  3. 拒绝服务:洪泛错误响应
  4. 无认证:无法验证服务器合法性

历史攻击示例

# 伪造RARP响应(仅理论)
# 攻击者监听RARP请求
# 发送虚假响应:任意MAC → 攻击者控制的IP
# 客户端配置错误IP,通信失败或重定向

防护措施(历史)

  • 静态配置:/etc/ethers手动验证
  • 网络隔离:物理隔离RARP流量
  • 服务器认证:早期尝试IPsec封装(不实用)

9. 抓包分析和调试

Wireshark过滤

# RARP流量
frame.protocols == "rarp"
rarp.opcode == 3  # 请求
rarp.opcode == 4  # 响应

# 与ARP对比
eth.type == 0x8035  # RARP
eth.type == 0x0806  # ARP

tcpdump捕获

# 捕获RARP流量
sudo tcpdump -i eth0 -e ether proto 0x8035

# 分析响应
sudo tcpdump -r rarp.pcap -x -e 'rarp[6:2] = 4'

模拟RARP环境

# 使用Scapy模拟RARP服务器
from scapy.all import *
import time

def rarp_server():
    while True:
        sniff(filter="rarp", prn=lambda pkt: rarp_reply(pkt))

def rarp_reply(req):
    if RARP in req and req[RARP].op == 3:  # 请求
        reply = RARP(
            op=4,  # 响应
            hwsrc="aa:bb:cc:dd:ee:ff",  # 服务器MAC
            psrc="192.168.1.100",      # 分配IP
            hwdst=req[RARP].hwsrc,     # 客户端MAC
            pdst="0.0.0.0"
        )
        sendp(Ether(dst=req[RARP].hwsrc)/reply, iface="eth0")

# 注意:现代系统不支持RARP,仅模拟

10. 迁移和兼容性

从RARP迁移到DHCP

# 1. 配置DHCP服务器
# /etc/dhcp/dhcpd.conf
host legacy-workstation {
    hardware ethernet 00:11:22:33:44:55;
    fixed-address 192.168.1.50;
    option bootfile-name "legacy-boot.img";
}

# 2. 客户端BIOS设置:PXE/DHCP替代RARP
# 3. 移除rarpd服务
systemctl disable rarpd
systemctl stop rarpd

# 4. 清理/etc/ethers(可选)
rm -f /etc/ethers

双协议支持(过渡期)

# BOOTP兼容RARP客户端
# dhcpd同时响应BOOTP和DHCP
# 早期客户端收到BOOTP响应,现代用DHCP

11. 现代替代技术的对比

PXE vs RARP

特性RARPPXE/DHCP
地址分配静态MAC-IP动态地址池
配置参数仅IP完整网络配置
引导支持需额外BOOTP集成TFTP引导
安全性DHCP Snooping
跨子网不可能中继代理支持
IPv6不支持DHCPv6

UEFI网络启动

  • HTTPBoot:HTTP下载替代TFTP
  • iPXE:脚本化引导,支持多协议
  • Security Boot:签名验证引导文件

12. 历史意义和遗产

RARP的贡献

  1. 网络引导先驱:奠定无盘启动基础
  2. 地址解析扩展:ARP协议族扩展
  3. BOOTP基础:UDP封装和配置选项
  4. DHCP启发:动态配置概念

协议演进树

ARP (1982) ──┬─ RARP (1984) → 已废弃
             │
             ├─ BOOTP (1985) → DHCP (1997)
             │                 ↓
             │              PXE/iPXE/UEFI
             │
             └─ NDP (1995, IPv6)

遗留系统支持

# 检查系统是否支持RARP
lsmod | grep rarp
cat /proc/net/rarp  # 可能不存在

# 历史工具(可能不可用)
rarp -a  # 查询RARP表
rarpd    # RARP守护进程

13. 故障排除(历史参考)

常见问题

问题原因解决
无响应RARP服务器未运行启动rarpd,检查/etc/ethers
IP冲突重复MAC配置检查静态映射唯一性
广播丢失交换机过滤配置广播域,检查VLAN
引导失败BOOTP/TFTP缺失配置完整引导链

诊断步骤

1. 检查RARP服务:ps aux | grep rarpd
2. 验证/etc/ethers配置
3. 抓包分析:tcpdump ether proto 0x8035
4. 测试BOOTP继任者:dhcpd测试
5. 迁移到DHCP/PXE

RARP协议作为网络引导的早期解决方案,在无盘工作站时代发挥了重要作用。虽然技术局限使其被淘汰,但其设计理念影响了后续的BOOTP、DHCP和PXE等现代网络启动技术。了解RARP有助于理解网络协议的演进历史和地址分配机制的发展。现代网络环境应完全使用DHCP和PXE替代RARP功能。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注