10. 引导协议与动态主机配置协议
- [10. 引导协议与动态主机配置协议](#10. 引导协议与动态主机配置协议)
-
- 概述
- [10.1 BOOTP 原理](#10.1 BOOTP 原理)
-
- [10.1.1 核心功能](#10.1.1 核心功能)
- [10.1.2 工作过程](#10.1.2 工作过程)
- [10.1.3 实现要点](#10.1.3 实现要点)
- [10.2 BOOTP 报文](#10.2 BOOTP 报文)
-
- [10.2.1 报文格式(300 字节固定长度)](#10.2.1 报文格式(300 字节固定长度))
- [10.2.2 报文传输流程](#10.2.2 报文传输流程)
- [10.3 启动配置文件](#10.3 启动配置文件)
- [10.4 DHCP 基本概念](#10.4 DHCP 基本概念)
-
- [10.4.1 核心功能](#10.4.1 核心功能)
- [10.4.2 报文格式与 BOOTP 的差异](#10.4.2 报文格式与 BOOTP 的差异)
- [10.4.3 优势](#10.4.3 优势)
- [10.5 DHCP 运行方式](#10.5 DHCP 运行方式)
-
- [10.5.1 客户机运行机制(状态转换)](#10.5.1 客户机运行机制(状态转换))
- [10.5.2 服务器运行机制](#10.5.2 服务器运行机制)
- [10.5.3 完整交互流程](#10.5.3 完整交互流程)
- [10.6 DHCP/BOOTP 中继代理](#10.6 DHCP/BOOTP 中继代理)
-
- [10.6.1 工作流程](#10.6.1 工作流程)
- [10.6.2 配置要点](#10.6.2 配置要点)
- 本章要点
10. 引导协议与动态主机配置协议
概述
引导协议(BOOTP)和动态主机配置协议(DHCP)均为 TCP/IP 应用层协议,用于解决网络设备的配置问题。BOOTP 主要为无盘节点提供启动信息,DHCP 在其基础上扩展,支持动态 IP 地址分配及更灵活的配置,两者兼容且共享部分报文格式。
10.1 BOOTP 原理
BOOTP(BOOTstrap Protocol)是针对无盘节点设计的启动协议,解决无盘设备从网络获取启动信息的问题。
10.1.1 核心功能
无盘节点启动时需获取三类信息:
- 自身的 IP 地址;
- 文件服务器的 IP 地址;
- 可运行的初始内存映像(启动映象文件名)。
与 RARP 的对比:
- 相同点:均采用客户 - 服务器模式,通过请求 / 应答机制工作。
- 不同点:
- BOOTP 基于 UDP,服务器是应用程序,易于修改和移植,支持跨 IP 网络通信;
- RARP 服务器位于内核,依赖物理网络广播,修改和移植困难,仅支持同一物理网络。
10.1.2 工作过程
- 请求阶段:无盘客户机(无 IP 地址)以有限广播(255.255.255.255)发送 BOOTP 请求,包含自身 MAC 地址。
- 应答阶段:BOOTP 服务器根据 MAC 地址查询数据库,若存在记录,返回包含客户机 IP、服务器 IP、启动文件名的应答。
- 启动阶段:客户机通过 TFTP 下载启动文件并启动。
10.1.3 实现要点
- 采用 UDP 传输,客户端端口 68,服务器端口 67;
- 请求为广播,应答可单播或广播;
- 支持跨网关引导,通过中继代理转发请求;
- 依赖超时重传机制保证可靠性(重传间隔采用二进制指数后退策略)。
10.2 BOOTP 报文
BOOTP 报文分为请求和应答两种,格式固定,封装在 UDP 数据报中传输。
10.2.1 报文格式(300 字节固定长度)
字段 | 长度(字节) | 含义(请求 / 应答通用) |
---|---|---|
操作码 | 1 | 1 = 请求,2 = 应答 |
硬件类型 | 1 | 物理网络类型(以太网 = 1) |
硬件地址长度 | 1 | 硬件地址长度(以太网 = 6) |
跳数 | 1 | 经过的网关数(初始为 0) |
事务标识 | 4 | 随机 ID,用于匹配请求与应答 |
秒数 | 2 | 客户端启动后经过的秒数 |
标志 | 2 | 仅最高位有效(0 = 单播应答,1 = 广播应答) |
客户 IP 地址 | 4 | 客户已知 IP(未知则为 0) |
你的 IP 地址 | 4 | 服务器分配给客户的 IP(应答用) |
服务器 IP 地址 | 4 | 服务器自身 IP |
网关 IP 地址 | 4 | 转发请求的网关 IP(跨网时使用) |
客户硬件地址 | 16 | 客户 MAC 地址(以太网占前 6 字节) |
服务器主机名 | 64 | 客户请求的特定服务器名(可选) |
引导文件名 | 128 | 客户请求的启动文件名(如 "unix") |
特定厂商区域 | 64 | 可选配置信息,首 4 字节为 "魔饼"(99.130.83.99),定义后续内容格式 |
10.2.2 报文传输流程
- 客户端发送请求 :
- 源 IP=0.0.0.0(未知时),目的 IP=255.255.255.255(广播);
- 填充 MAC 地址、事务标识等,引导文件名可设为通用名或空(使用默认)。
- 客户端重传策略 :
- 未收到应答时,初始延迟 0-4 秒,后按二进制指数后退(每次重传延迟翻倍),避免网络拥塞。
- 服务器处理请求 :
- 检查服务器名(为空或匹配时处理),查询 MAC-IP 映射表;
- 填充你的 IP、服务器 IP、启动文件名等,发送应答(单播或广播)。
- 跨网关引导 :
- 网关(中继代理)接收广播请求,修改跳数(+1)和网关 IP,转发至其他子网的服务器;
- 服务器应答通过网关返回客户机。
10.3 启动配置文件
BOOTP 依赖静态配置文件,存储客户机 MAC 地址与 IP、启动文件等的映射关系,适用于设备固定的网络。
局限性:
- 静态映射不适应设备频繁移动或 IP 地址不足的场景;
- 需管理员手动维护,扩展性差。
解决方案:DHCP 通过动态分配 IP 地址克服上述问题,兼容 BOOTP。
10.4 DHCP 基本概念
DHCP(Dynamic Host Configuration Protocol)是 BOOTP 的扩展,支持动态 IP 分配及灵活配置,核心是 "租约" 机制(IP 地址的使用期限)。
10.4.1 核心功能
- 自动分配 IP 地址、子网掩码、网关、DNS 服务器等配置信息;
- 支持三种地址分配方式:
- 手工分配:管理员指定 IP 与 MAC 绑定;
- 自动分配:分配永久 IP(类似 BOOTP);
- 动态分配:IP 地址有租期,到期后回收重用(最常用,节省地址)。
10.4.2 报文格式与 BOOTP 的差异
- 复用 BOOTP 报文格式,主要扩展:
- 标志位:最高位为 "广播应答标志"(1 = 服务器必须广播应答);
- 特定厂商区域:变长(超过 64 字节),通过选项字段携带更多配置信息(如租期、DNS 服务器)。
- 关键选项(类型 53 定义消息类型):
消息类型 | 含义 | 方向 |
---|---|---|
DHCPDISCOVER(1) | 客户请求 IP 及配置 | 客户→服务器 |
DHCPOFFER(2) | 服务器提供 IP 及配置 | 服务器→客户 |
DHCPREQUEST(3) | 客户确认选择某服务器的提供 | 客户→服务器 |
DHCPACK(5) | 服务器确认租约 | 服务器→客户 |
DHCPNAK(6) | 服务器拒绝租约 | 服务器→客户 |
DHCPRELEASE(7) | 客户主动释放 IP | 客户→服务器 |
10.4.3 优势
- 减少错误:避免手工配置 IP 导致的冲突或子网掩码错误;
- 降低管理负担:自动分配 IP,灵活设置租期,适应设备移动;
- 节省地址:动态分配使 IP 可重用,适合临时设备(如访客终端)。
10.5 DHCP 运行方式
DHCP 通过客户机与服务器的交互完成 IP 分配,核心是 "租约生命周期" 管理。
10.5.1 客户机运行机制(状态转换)
- 初始化(INIT):客户机无 IP,广播 DHCPDISCOVER,进入 "选择状态(SELECTING)"。
- 选择状态:接收多个服务器的 DHCPOFFER(含 IP、租期等),选择首个到达的 offer,广播 DHCPREQUEST(指定选中的服务器),进入 "请求状态(REQUESTING)"。
- 请求状态:等待服务器应答,若收到 DHCPACK(确认租约),进入 "绑定状态(BOUND)";若收到 DHCPNAK(拒绝),返回初始化状态。
- 绑定状态:使用分配的 IP,租期内定期续租:
- T1(租期 50%):单播 DHCPREQUEST 给原服务器,请求续租;
- T2(租期 87.5%):若 T1 未成功,广播 DHCPREQUEST 请求续租;
- 租期到期未续租:释放 IP,返回初始化状态。
10.5.2 服务器运行机制
- 被动响应客户机请求:
- 收到 DHCPDISCOVER:从地址池分配 IP,发送 DHCPOFFER;
- 收到 DHCPREQUEST:确认客户选择的 IP,发送 DHCPACK(成功)或 DHCPNAK(IP 冲突或无效);
- 收到 DHCPRELEASE:回收 IP,重新加入地址池;
- 收到 DHCPDECLINE:客户检测到 IP 冲突,服务器标记该 IP 为无效,不再分配。
10.5.3 完整交互流程
- 发现阶段:客户→广播 DHCPDISCOVER(请求 IP 及配置)。
- 提供阶段:服务器→单播 / DHCPOFFER(含 IP、子网掩码、租期等)。
- 请求阶段:客户→广播 DHCPREQUEST(确认选中的服务器)。
- 确认阶段:服务器→DHCPACK(确认租约)或 DHCPNAK(拒绝)。
- 续租阶段:客户在 T1、T2 时段请求续租。
- 释放阶段:客户→DHCPRELEASE(主动释放 IP)。
10.6 DHCP/BOOTP 中继代理
当客户机与服务器位于不同子网时,需通过中继代理转发广播报文(路由器需支持 RFC1542)。
10.6.1 工作流程
- 子网 2 的客户机广播 DHCPDISCOVER,中继代理(路由器)接收。
- 中继代理修改报文:网关 IP 设为自身 IP,跳数 + 1,单播转发至子网 1 的 DHCP 服务器。
- 服务器根据网关 IP 判断客户机所在子网,从对应地址池分配 IP,单播 DHCPOFFER 给中继代理。
- 中继代理广播 DHCPOFFER 至子网 2 的客户机。
10.6.2 配置要点
- 多子网环境中,DHCP 服务器需为每个子网配置独立地址池;
- 中继代理需启用 DHCP 中继功能,指定服务器 IP 地址。
本章要点
- BOOTP 用于无盘节点获取 IP、服务器 IP 及启动文件名,基于 UDP(端口 67/68),依赖静态配置文件。
- DHCP 扩展 BOOTP,支持动态 IP 分配(租期机制),三种分配方式:手工、自动、动态(最常用)。
- DHCP 报文复用 BOOTP 格式,通过选项字段扩展功能(如租期、DNS 服务器),核心消息类型包括 DISCOVER、OFFER、REQUEST、ACK。
- 客户机通过状态转换完成 IP 获取与续租,服务器被动响应请求,处理 IP 分配与回收。
- 跨子网时需中继代理转发报文,路由器需支持 DHCP/BOOTP 中继功能。
- DHCP 的优势:减少配置错误、降低管理负担、节省 IP 地址,广泛应用于各类网络。