摘要
- BOOTP 让无盘客户端在尚未具备正常 IP 连通性时,询问自己的 IP 地址、服务器和引导文件名;之后通常由 TFTP 单独传送文件。
- 响应本身又带来一道难题:没有 IP 地址的客户端无法回应 ARP。RFC 951 提出由服务器临时建立 ARP 缓存项,或把响应广播出去;后来的中继规则则让请求可以跨越子网。
无盘工作站通电时,还没有操作系统替它配置网络。固化在机器里的启动程序可以发出请求,但它得先知道要用哪个地址、加载哪个文件,之后才有办法索取文件。顺序看起来像个圈:机器还没有可用的网络身份,怎样先从网络收到回答?
1985 年 9 月,Bill Croft 和 John Gilmore 在 RFC 951 中写下了这个问题。BOOTP 不负责传送文件,而是处理第一阶段:确定地址并选择引导文件。客户端的 PROM 可以询问 IP 地址、服务器和文件名;收到回复后,第二阶段再通过通常为 TFTP 的协议,把文件读入内存。设计目标还包括无人值守开机。RFC 记录的是一种协议设计,并非实际使用规模的统计。(RFC 951,第 2、7.5 节。)
客户端并不需要先知道自己尚未拥有的 IP 地址。若服务器地址也未知,它可以用源地址 0.0.0.0,把 IP/UDP 请求发往 255.255.255.255,也就是本地电缆上的广播地址。请求还带有客户端的硬件类型、硬件地址和事务编号。服务器可以在自己的记录中查找这个硬件地址对应的 IP 地址,把结果写进回复的 yiaddr 字段,再选定完整的引导文件路径。比如,客户端只请求通用名称 unix,服务器也能根据这台机器的记录,给它匹配专用文件。启动过程因此依赖服务器上的本地映射表。(RFC 951,第 2、3、7.1、7.3 和 9 节。)
首个响应也有“先有鸡还是先有蛋”的问题。服务器通常要靠 ARP 找到 IP 目的地址对应的链路层地址;但客户端还不知道自己的 IP,自然无法回应服务器的 ARP 查询。RFC 951 给出两种办法。若发送方的内核或驱动支持,可以根据客户端的硬件地址和拟分配的 IP 地址,临时造一条 ARP 缓存记录,并设定过期时间。RFC 特别指出 UNIX 4.2 BSD 已有这种能力。若没有相应支持,服务器可以在客户端所在接口广播响应。绕过难题的方式取决于响应发送端的本地系统能力。(RFC 951,第 4 节。)
两个 UDP 端口同样服务于这条返回路径。客户端把请求发往 BOOTP 服务器端口 67,服务器把响应发往客户端端口 68。RFC 951 解释说,分开使用端口后,内核可以过滤发给客户端端口的广播,不必叫醒其他机器上的 BOOTP 服务器进程。倘若客户端随机选择源端口,广播还可能撞上别的主机正在监听的应用。这个端口安排不是无关紧要的格式细节;它避免一台机器的开机答复变成整个网段的应用事件。(RFC 951,第 3 节。)
引导服务器不一定和客户端接在同一段电缆上。RFC 951 把跨网关启动列为可选功能,而且要求网关和服务器配合。网关或其他转发代理可以收到广播,在 giaddr 中填写客户端所在网络的信息,再把请求交给服务器。RFC 作者提醒,不要把请求无限制地全网广播,否则可能形成转发环路。1993 年 10 月的 RFC 1542 进一步划清边界:BOOTP 中继不是透明转发 IP 数据报的普通路由器。中继可以把 BOOTP 请求当作发给自己的消息来接收,再生成一条新的 BOOTP 消息;它可以运行在路由器上,也可以是连接客户端子网的另一台主机。这是一项需要配置并遵循专门规则的服务。(RFC 951,第 8 节;RFC 1542,第 4 至 4.1 节。)
因此,把 BOOTP 简单称作“旧版 DHCP”会抹掉重要差异。RFC 2131 后来把 DHCP 描述为 BOOTP 机制的扩展,并沿用其消息格式和中继行为,以便兼容既有客户端。DHCP 新增的一项关键能力,是把地址分配为有限租约:客户端不再需要地址时,地址可重新分配。BOOTP 的 1985 年模型则在服务器记录中查找客户端地址和引导文件。DHCP 也可以手工分配地址;区别不是后来所有地址都变成临时的,而是协议加入了动态分配方式。(RFC 2131,第 1 至 2 节。)
BOOTP 的历史贡献不大,却很实际。它没有让无盘机器脱离其他设备独立运行,没有验证用户身份,也不负责搬运操作系统镜像。它说明,一台只有硬件地址、尚无可用 IP 身份的机器,怎样向网络询问启动所需的下一步;服务器怎样选择这些参数;以及 ARP 尚不能照常工作时,响应怎样回到客户端。在这个故事里,联网从本地广播、服务器上的一条明确记录,以及一条需要特殊处理的响应开始。
来源与证据边界
- RFC 951 — Bootstrap Protocol(1985 年 9 月)
- RFC 1542 — Clarifications and Extensions for the Bootstrap Protocol(1993 年 10 月)
- RFC 2131 — Dynamic Host Configuration Protocol(1997 年 3 月)
- FreeBSD 4.2-RELEASE 的
bootpd(8)手册 - RFC 1497 — BOOTP Vendor Information Extensions;RFC 1533 — DHCP Options and BOOTP Vendor Extensions
RFC 951 是一份征求讨论的协议提案,记录了预期行为,不是普及率调查。它提到 4.2 BSD 可以临时建立 ARP 缓存项,并不意味着所有实现都有该能力。RFC 1542 记录的是后来对中继行为的细化,也不能证明所有网络都遵守了这些要求。BOOTP 负责选出网络参数和文件名,文件传送由另一阶段完成。DHCP 引入了动态租约,但也保留手工分配。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
