第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:

对比项RARPBOOTP
层级链路层应用层(UDP)
能获取的信息只有IPIP、网关、DNS、文件名等
跨网络不能能(中继代理)
实现复杂度简单稍复杂

BOOTP比RARP功能强。


BOOTP vs DHCP

BOOTP vs DHCP:

对比项BOOTPDHCP
地址分配静态配置动态分配
功能基础配置更多功能
兼容性-向后兼容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字节经过的中继数
事务ID4字节匹配请求和应答
秒数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

  1. 客户端发BOOTREQUEST

    • 源IP:0.0.0.0(还不知道)
    • 目的IP:255.255.255.255(广播)
    • 源端口:68
    • 目的端口:67
    • 包含自己的MAC地址
  2. 服务器收到请求

    • 查配置表
    • 根据MAC找对应的IP
    • 发BOOTREPLY
  3. 客户端收到应答

    • 得到自己的IP
    • 得到其他配置信息
    • 可以开始通信了
  4. 下载启动文件

    • 用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广播
  • 单播转发给服务器
  • 服务器的应答再转发回来

中继代理解决跨网络问题。


中继代理的工作过程

中继代理的工作过程:

  1. 客户端发广播请求

    • 本网络广播
    • 中继代理收到
  2. 中继代理转发

    • 把请求单播发给服务器
    • 填写网关IP地址字段
    • 跳数加1
  3. 服务器收到请求

    • 根据网关IP知道是哪个网络的
    • 分配对应网络的IP
    • 应答给中继代理
  4. 中继代理转发应答

    • 把应答发给客户端
    • 单播或广播

中继代理转发请求和应答。


跳数字段

跳数字段:

  • 每经过一个中继代理加1
  • 限制跳数
  • 防止无限循环
  • 通常最大4跳

跳数限制防止循环。


16.6 BOOTP的厂商特定区域

什么是厂商特定区域

厂商特定区域(Vendor Specific Area):

  • 报文最后64字节
  • 可以放额外的信息
  • 厂商自定义
  • 后来标准化了,叫选项

厂商特定区域可以放额外信息。


选项格式

选项格式:

  • 类似DHCP选项
  • 类型-长度-值(TLV)
  • 可以有多个选项

常见选项:

  • 子网掩码
  • 默认网关
  • DNS服务器
  • 等等

选项用TLV格式。


魔术 cookie(Magic Cookie):

  • 厂商特定区域开头的4字节
  • 标识这是标准选项
  • 值是99.130.83.99
  • 也就是0x63825363

为什么需要:

  • 区分厂商自定义和标准选项
  • 有这个cookie说明是标准格式

魔术cookie标识标准选项格式。


16.7 小结

BOOTP概述

  1. 什么是BOOTP

    • 引导程序协议
    • 启动时获取配置
    • 用UDP
  2. 为什么需要

    • RARP不够用
    • 需要更多配置信息
    • 跨网络
  3. vs RARP

    • BOOTP功能更强
    • 应用层
    • 能跨网络
  4. vs DHCP

    • DHCP是扩展
    • DHCP动态分配
    • 向后兼容

报文格式

  1. 总长度

    • 300字节
    • 固定格式
  2. 关键字段

    • 操作码:请求/应答
    • 事务ID:匹配
    • 客户端IP:客户端已知的
    • 你的IP:服务器分配的
    • 客户端硬件地址:MAC
    • 启动文件名
    • 厂商特定区域

工作过程

  1. 基本过程

    • 客户端发广播请求
    • 服务器应答
    • 客户端得到配置
    • 用TFTP下载启动文件
  2. 端口

    • 服务器67
    • 客户端68
  3. 广播应答

    • 客户端没IP可能收不到单播
    • 用广播标志位

BOOTP服务器

  1. 作用

    • 维护配置表
    • 响应请求
  2. 配置表

    • MAC→IP
    • 静态配置
    • 其他信息
  3. 特点

    • 静态分配
    • 简单稳定
    • 不灵活

中继代理

  1. 作用

    • 跨网络转发
    • 一个服务器管多个网络
  2. 工作过程

    • 收到广播请求
    • 单播转发给服务器
    • 转发应答回来
  3. 跳数

    • 每经过一个加1
    • 限制跳数

厂商特定区域

  1. 作用

    • 额外信息
    • 选项
  2. 魔术cookie

    • 标识标准格式
    • 99.130.83.99
  3. 选项格式

    • TLV格式
    • 多个选项

关键概念

  1. BOOTP

    • 引导协议
    • 启动配置
    • UDP
  2. 报文格式

    • 300字节
    • 固定格式
  3. 中继代理

    • 跨网络转发
    • 解决广播问题
  4. 厂商特定区域

    • 额外选项
    • 魔术cookie
  5. vs RARP/DHCP

    • 比RARP强
    • 比DHCP弱

BOOTP引导程序协议