TCP/IP详解 016 BOOTP:引导程序协议

之前我们如果是一个无盘系统,它在不知道自身IP地址的情况下,我们可以通过RARP来获取它的IP地址。
使用RARP有两个问题:
1、IP地址是返回的唯一结果
2、既然RARP使用链路层广播,RARP请求就不会被路由器转发(迫使每个实际网络设置一个RARP服务器)

引导程序协议(BOOTP),用于无盘系统进行系统引导的替代方法

BOOTP使用UDP,且通常需与TFTP协同工作。

RFC 951是BOOTP的正式规范,RFC 1542对它进行了说明。

BOOTP的分组格式

TCP/IP详解 016 BOOTP:引导程序协议_第1张图片
image.png

BOOTP的请求和应答格式

TCP/IP详解 016 BOOTP:引导程序协议_第2张图片
image.png

操作码字段为1表示请求,2表示应答。
硬件类型字段为1表示10Mb/s的以太网,硬件地址长度字段为6字节。
跳数字段由客户设置为0,但也能被一个代理服务器设置
事务标识字段是一个由客户设置并由服务器返回的32bit整数。客户用它对请求和应答进行匹配。对每个请求,客户应该将该字段设置为一个随机数。

TCP/IP详解 016 BOOTP:引导程序协议_第3张图片
image.png

客户必须设置它的“客户硬件地址”字段,尽管这个值与以太网数据帧头中的值相同,UDP数据报中也设置这个字段,但任何接收这个数据报的用户进程能很容易地获得它(例如一个BOOTP服务器),一个进程通过查看UDP数据报来确定以太网帧首部中的该字段通常是很困难的。(或者说不可能的)
服务器主机名字段是一个空值终止串,由服务器填写。服务器还将在“引导文件名字段”填入包括用于系统引导的文件名及其所在位置的路径全名。
特定厂商区域 字段用于对BOOTP进行不同的扩展。

端口号
BOOTP有两个熟知端口:BOOTP服务器为67,BOOTP客户为68.
这意味着BOOTP客户不会选择未用的临时端口,而只用端口68
选择两个端口而不是仅选择一个端口为BOOTP服务器用的原因是:服务器的应答可以进行广播(但通常是不用广播的)

BOOTP客户通常固化在无盘系统只读存储器中,因此了解BOOTP服务器的实现将更有意义。
首先,BOOTP服务器将从它的熟知端口(67)读取UDP数据报,它不同于RARP服务器,它必须读取类型字段为“RARP请求”的以太网帧,BOOTP协议通过将客户的硬件地址放入BOOTP分组中,使得服务器很容易获取客户的硬件地址

你可能感兴趣的:(TCP/IP详解 016 BOOTP:引导程序协议)