第16章 BOOTP:引导程序协议
所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议
本章介绍BOOTP协议,包括BOOTP的作用、报文格式、服务器和中继代理等。
16.1 引言
BOOTP的作用
BOOTP(Bootstrap Protocol):
- 引导程序协议
- 无盘设备启动时用
- 获取IP地址等配置信息
- 用UDP
- 比RARP功能强
BOOTP用于启动时获取配置。
为什么需要BOOTP
为什么需要BOOTP:
- RARP只能获取IP地址
- 不够用
- 还需要其他信息:
- 子网掩码
- 默认网关
- DNS服务器
- 启动文件名
- 等等
- BOOTP可以提供这些
BOOTP vs RARP:
| 对比项 | RARP | BOOTP |
|---|---|---|
| 层级 | 链路层 | 应用层(UDP) |
| 能获取的信息 | 只有IP | IP、网关、DNS、文件名等 |
| 跨网络 | 不能 | 能(中继代理) |
| 实现复杂度 | 简单 | 稍复杂 |
BOOTP比RARP功能强。
BOOTP vs DHCP
BOOTP vs DHCP:
| 对比项 | BOOTP | DHCP |
|---|---|---|
| 地址分配 | 静态配置 | 动态分配 |
| 功能 | 基础配置 | 更多功能 |
| 兼容性 | - | 向后兼容BOOTP |
| 灵活性 | 低 | 高 |
关系:
- DHCP是BOOTP的扩展
- DHCP向后兼容BOOTP
- 现在DHCP更常用
DHCP是BOOTP的扩展。
本章讨论的内容
本章讨论的内容:
- BOOTP的作用
- BOOTP报文格式
- BOOTP服务器
- BOOTP中继代理
- BOOTP的工作过程
本章介绍BOOTP协议。
16.2 BOOTP报文格式
BOOTP报文格式
BOOTP报文格式:
+-------------------+-------------------+
| 操作码(1字节) | 硬件类型(1字节) |
+-------------------+-------------------+
| 硬件地址长度(1B)| 跳数(1字节) |
+-------------------+-------------------+
| 事务ID(4字节) |
+-------------------+-------------------+
| 秒数(2字节) | 标志(2字节) |
+-------------------+-------------------+
| 客户端IP地址(4字节) |
+---------------------------------------+
| 你的IP地址(4字节) |
+---------------------------------------+
| 服务器IP地址(4字节) |
+---------------------------------------+
| 网关IP地址(4字节) |
+---------------------------------------+
| 客户端硬件地址(16字节) |
+---------------------------------------+
| 服务器主机名(64字节) |
+---------------------------------------+
| 启动文件名(128字节) |
+---------------------------------------+
| 厂商特定区域(64字节) |
+---------------------------------------+
总长度:300字节
BOOTP报文格式比较固定。
各字段说明
BOOTP各字段:
| 字段 | 长度 | 说明 |
|---|---|---|
| 操作码 | 1字节 | 1=请求, 2=应答 |
| 硬件类型 | 1字节 | 硬件类型,以太网是1 |
| 硬件地址长度 | 1字节 | MAC地址长度,6 |
| 跳数 | 1字节 | 经过的中继数 |
| 事务ID | 4字节 | 匹配请求和应答 |
| 秒数 | 2字节 | 客户端启动了多少秒 |
| 标志 | 2字节 | 标志位,比如广播应答 |
| 客户端IP地址 | 4字节 | 客户端已经知道的IP(可选) |
| 你的IP地址 | 4字节 | 服务器分配给客户端的IP |
| 服务器IP地址 | 4字节 | 服务器的IP地址 |
| 网关IP地址 | 4字节 | 中继代理的IP |
| 客户端硬件地址 | 16字节 | 客户端的MAC地址 |
| 服务器主机名 | 64字节 | 服务器的主机名(可选) |
| 启动文件名 | 128字节 | 要下载的启动文件名 |
| 厂商特定区域 | 64字节 | 厂商特定信息,可选 |
BOOTP有很多字段。
关键字段
操作码:
- 1:BOOTREQUEST(请求)
- 2:BOOTREPLY(应答)
事务ID:
- 客户端生成的随机数
- 匹配请求和应答
- 防止混淆
客户端IP地址:
- 客户端如果已经知道自己的IP
- 就填在这里
- 否则填0
你的IP地址:
- 服务器分配给客户端的IP
- 应答时填
客户端硬件地址:
- 客户端的MAC地址
- 服务器用这个识别客户端
这些是关键字段。
16.3 BOOTP的工作过程
基本过程
BOOTP的基本过程:
场景:无盘工作站启动,不知道自己的IP
-
客户端发BOOTREQUEST
- 源IP:0.0.0.0(还不知道)
- 目的IP:255.255.255.255(广播)
- 源端口:68
- 目的端口:67
- 包含自己的MAC地址
-
服务器收到请求
- 查配置表
- 根据MAC找对应的IP
- 发BOOTREPLY
-
客户端收到应答
- 得到自己的IP
- 得到其他配置信息
- 可以开始通信了
-
下载启动文件
- 用TFTP下载启动文件
- 然后启动
请求广播,应答可以单播或广播。
为什么用两个端口
为什么用两个端口:
- 服务器端口:67
- 客户端端口:68
为什么不是一个:
- 服务器可以区分请求和应答
- 客户端也可以区分
- 避免冲突
用两个不同的端口。
广播应答问题
广播应答问题:
- 客户端还没有IP
- 单播的话客户端能不能收?
- 有些网卡不收不是自己IP的包
- 所以可能需要广播应答
标志位:
- 有一个广播标志位
- 客户端如果不能接收单播
- 就设置这个标志
- 服务器就广播应答
可以用广播标志位。
16.4 BOOTP服务器
BOOTP服务器的作用
BOOTP服务器的作用:
- 维护配置表
- 响应BOOTP请求
- 给客户端分配IP和其他信息
服务器维护配置表。
配置表
配置表:
- MAC地址 → IP地址
- 还有其他配置信息
- 静态配置
- 管理员手动配置
配置内容:
- IP地址
- 子网掩码
- 默认网关
- DNS服务器
- 启动文件名
- 等等
配置表是静态的。
BOOTP服务器的特点
BOOTP服务器的特点:
- 静态分配
- 每个MAC对应固定的IP
- 管理员手动配置
- 不灵活
- 但简单稳定
BOOTP是静态分配的。
16.5 BOOTP中继代理
什么是中继代理
BOOTP中继代理(BOOTP Relay Agent):
- 也叫转发代理
- 跨网络转发BOOTP请求
- 让不同网络的客户端也能用同一个服务器
中继代理跨网络转发请求。
为什么需要中继代理
为什么需要中继代理:
- BOOTP请求是广播的
- 路由器不转发广播
- 每个网络都要有服务器?
- 太麻烦了
- 用中继代理,一个服务器管多个网络
中继代理的作用:
- 收到本网络的BOOTP广播
- 单播转发给服务器
- 服务器的应答再转发回来
中继代理解决跨网络问题。
中继代理的工作过程
中继代理的工作过程:
-
客户端发广播请求
- 本网络广播
- 中继代理收到
-
中继代理转发
- 把请求单播发给服务器
- 填写网关IP地址字段
- 跳数加1
-
服务器收到请求
- 根据网关IP知道是哪个网络的
- 分配对应网络的IP
- 应答给中继代理
-
中继代理转发应答
- 把应答发给客户端
- 单播或广播
中继代理转发请求和应答。
跳数字段
跳数字段:
- 每经过一个中继代理加1
- 限制跳数
- 防止无限循环
- 通常最大4跳
跳数限制防止循环。
16.6 BOOTP的厂商特定区域
什么是厂商特定区域
厂商特定区域(Vendor Specific Area):
- 报文最后64字节
- 可以放额外的信息
- 厂商自定义
- 后来标准化了,叫选项
厂商特定区域可以放额外信息。
选项格式
选项格式:
- 类似DHCP选项
- 类型-长度-值(TLV)
- 可以有多个选项
常见选项:
- 子网掩码
- 默认网关
- DNS服务器
- 等等
选项用TLV格式。
魔术 cookie
魔术 cookie(Magic Cookie):
- 厂商特定区域开头的4字节
- 标识这是标准选项
- 值是99.130.83.99
- 也就是0x63825363
为什么需要:
- 区分厂商自定义和标准选项
- 有这个cookie说明是标准格式
魔术cookie标识标准选项格式。
16.7 小结
BOOTP概述
-
什么是BOOTP
- 引导程序协议
- 启动时获取配置
- 用UDP
-
为什么需要
- RARP不够用
- 需要更多配置信息
- 跨网络
-
vs RARP
- BOOTP功能更强
- 应用层
- 能跨网络
-
vs DHCP
- DHCP是扩展
- DHCP动态分配
- 向后兼容
报文格式
-
总长度
- 300字节
- 固定格式
-
关键字段
- 操作码:请求/应答
- 事务ID:匹配
- 客户端IP:客户端已知的
- 你的IP:服务器分配的
- 客户端硬件地址:MAC
- 启动文件名
- 厂商特定区域
工作过程
-
基本过程
- 客户端发广播请求
- 服务器应答
- 客户端得到配置
- 用TFTP下载启动文件
-
端口
- 服务器67
- 客户端68
-
广播应答
- 客户端没IP可能收不到单播
- 用广播标志位
BOOTP服务器
-
作用
- 维护配置表
- 响应请求
-
配置表
- MAC→IP
- 静态配置
- 其他信息
-
特点
- 静态分配
- 简单稳定
- 不灵活
中继代理
-
作用
- 跨网络转发
- 一个服务器管多个网络
-
工作过程
- 收到广播请求
- 单播转发给服务器
- 转发应答回来
-
跳数
- 每经过一个加1
- 限制跳数
厂商特定区域
-
作用
- 额外信息
- 选项
-
魔术cookie
- 标识标准格式
- 99.130.83.99
-
选项格式
- TLV格式
- 多个选项
关键概念
-
BOOTP
- 引导协议
- 启动配置
- UDP
-
报文格式
- 300字节
- 固定格式
-
中继代理
- 跨网络转发
- 解决广播问题
-
厂商特定区域
- 额外选项
- 魔术cookie
-
vs RARP/DHCP
- 比RARP强
- 比DHCP弱