米葫芦网

BOOTP:引导程序协议

热度:9℃ 发布时间:2024-11-17 13:09:59

在不知道自身IP地址的情况下,在进行系统引导时能够通过RARP来获取它的IP地址。然而使用RARP有两个问题:(1)IP地址是返回的唯一结果;(2)既然RARP使用链路层广播,RARP请求就不会被路由器转发(迫使每个实际网络设置一个RARP服务器)。本章将介绍一种用于无盘系统进行系统引导的替代方法,又称为引导程序协议,或BOOTP。
BOOTP使用UDP,且通常需与TFTP(参见第15章)协同工作。RFC951[CroftandGilmore1985]是BOOTP的正式规范,RFC1542[Wimer1993]则对它作了说明。
BOOTP的分组格式
BOOTP请求和应答均被封装在UDP数据报中,如下图所示。

BOOTP请求和应答封装在一个UDP数据报内
“操作码”字段为1表示请求,为2表示应答。硬件类型字段为1表示10Mb/s的以太网,这和ARP请求或应答中同名字段表示的含义相同。类似地,对于以太网,硬件地址长度字段为6字节。
“跳数”字段由客户设置为0,但也能被一个代理服务器设置。“事务标识”字段是一个由客户设置并由服务器返回的32bit整数。客户用它对请求和应答进行匹配。对每个请求,客户应该将该字段设置为一个随机数。客户开始进行引导时,将“秒数”字段设置为一个时间值。服务器能够看到这个时间值,备用服务器在等待时间超过这个时间值后才会响应客户的请求,这意味着主服务器没有启动。
假如该客户已经知道自身的IP地址,它将写入“客户IP地址”字段。否则,它将该字段设置为0。对于后面这种情况,服务器用该客户的IP地址写入“你的IP地址”字段。“服务器IP地址”字段则由服务器填写。假如使用了某个代理服务器,则该代理服务器就填写“网关IP地址”字段。
客户必须设置它的“客户硬件地址”字段。尽管这个值与以太网数据帧头中的值相同,UDP数据报中也设置这个字段,但任何接收这个数据报的用户进程能很轻易地获得它(例如一个BOOTP服务器)。一个进程通过查看UDP数据报来确定以太网帧首部中的该字段通常是很困难的(或者说是不可能的)。

BOOTP请求和应答的格式
“服务器主机名”字段是一个空值终止串,由服务器填写。服务器还将在“引导文件名字段”填入包括用于系统引导的文件名及其所在位置的路径全名。
“特定厂商区域”字段用于对BOOTP进行不同的扩展。16.6节将介绍这些扩展中的一些。当一个客户使用BOOTP(操作码为1)进行系统引导时,引导请求通常是采用链路层广播,IP首部中的目的IP地址为255.255.255.255(受限的广播,12.2节)。源IP地址通常是0.0.0.0,因为此时客户还不知道它本身的IP地址。回顾图3-9,在系统进行自引导时,0.0.0.0是一个有效的IP地址。
端口号
BOOTP有两个熟知端口:BOOTP服务器为67,BOOTP客户为68。这意味着BOOTP客户不会选择未用的临时端口,而只用端口68。选择两个端口而不是仅选择一个端口为BOOTP服务器用的原因是:服务器的应答可以进行广播(但通常是不用广播的)。
假如服务器的应答是通过广播传送的,同时客户又选择未用的临时端口,那么这些广播也能被其他的主机中碰巧使用相同临时端口的应用进程接收到。因此,采用随机端口(即临时端口)对广播来说是一个不好的选择。假如客户也使用服务器的知名端口(67)作为它的端口,那么网络内的所有服务器会被唤醒来查看每个广播应答(假如所有的服务器都被唤醒,它们将检查操作码,假如是一个应答而不是请求,就不作处理)。因此可以让所有的客户使用与服务器知名端口不同的同一知名端口。
假如多个客户同时进行系统引导,并且服务器广播所有应答,这样每个客户都会收到其他客户的应答。客户可以通过BOOTP首部中的事务标识字段来确认应答是否与请求匹配,或者可以通过检查返回的客户硬件地址加以区分。

网友评论
评论
发 布

更多软件教程
  • 软件教程推荐
更多+
Greenfoot设置中文的方法

Greenfoot设置中文的方法

Greenfoot是一款简单易用的Java开发环境,该软件界面清爽简约,既可以作为一个开发框使用,也能够作为集成开发环境使用,操作起来十分简单。这款软件支持多种语言,但是默认的语言是英文,因此将该软件下载到电脑上的时候,会发现软件的界面语言是英文版本的,这对于英语基础较差的朋友来说,使用这款软件就会...

07-05

Egret UI Editor修改快捷键的方法

Egret UI Editor修改快捷键的方法

Egret UI Editor是一款开源的2D游戏开发代码编辑软件,其主要功能是针对Egret项目中的Exml皮肤文件进行可视化编辑,功能十分强大。我们在使用这款软件的过程中,可以将一些常用操作设置快捷键,这样就可以简化编程,从而提高代码编辑的工作效率。但是这款软件在日常生活中使用得不多,并且专业性...

07-05

KittenCode新建项目的方法

KittenCode新建项目的方法

KittenCode是一款十分专业的编程软件,该软件给用户提供了可视化的操作界面,支持Python语言的编程开发以及第三方库管理,并且提供了很多实用的工具,功能十分强大。我们在使用这款软件进行编程开发的过程中,最基本、最常做的操作就是新建项目,因此我们很有必要掌握新建项目的方法。但是这款软件的专业性...

07-05

Thonny设置中文的方法

Thonny设置中文的方法

Thonny是一款十分专业的Python编辑软件,该软件界面清爽简单,给用户提供了丰富的编程工具,具备代码补全、语法错误显示等功能,非常的适合新手使用。该软件还支持多种语言,所以在下载这款软件的时候,有时候下载到电脑中的软件是英文版本的,这对于英语基础较差的小伙伴来说,使用这款软件就会变得十分困难,...

07-05

最新软件下载