BOOTP(Bootstrap Protocol):引导程序协议

  TCP-IP详解卷1-16:BOOTP(Bootstrap Protocol):引导程序协议

一:介绍
    1: 引导程序协议(BOOTP)是一个基于TCP/IP协议的协议,它可以让无盘站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址。
        使用BOOTP协议的时候,一般包括Bootstrap Protocol Server(自举协议服务端)和Bootstrap Protocol Client(自举协议客户端)两部分。
    2: 客户端获取IP地址的过程如下:
        首先,由BOOTP启动代码启动客户端,这个时候客户端还没有IP地址,使用广播形式以IP地址255.255.255.255向网络中发出IP地址查询要求。
        接着,运行BOOTP协议的服务器接收到这个请求,会根据请求中提供的MAC地址找到客户端,并发送一个含有IP地址、服务器IP地址、网关等信息的FOUND帧。
        最后,客户端会根据该FOUND帧来通过专用TFTP服务器下载启动镜像文件,模拟成磁盘启动。
    3: 和RARP比较,RARP有两个问题:
        IP地址是返回的唯一结果;
        既然RA P使用链路层广播, RARP请求就不会被路由器转发(迫使每个实际网络设置一个RARP 服务器)
    4: BOOTP使用UDP,且通常需与TFTP协同工作。

二:分组格式
    1: IP首部(20B)+UDP首部(8B)+BOOTP请求/应答(300B)
    2: BOOTP请求/应答(300B)
        操作码(1B)+硬件类型(1B)+硬件地址长度(1B)+事物标识(4B)+跳数(1B)+秒数(2B)+未使用(2B)+客户IP地址(4B)+你的IP地址(4B)+服务器IP地址(4B)+网关IP地址(4B)+客户主机硬件地址(16B)+服务器主机名(64B)+引导文件名(128B)+特定厂商信息(64B)
        A: 操作码字段为1表示请求,为2表示应答。
        B: 硬件类型字段为1表示10 Mb/s的以太网,这和ARP请求或应答中同名字段表示的含义相同。
        C: 类似地,对于以太网,硬件地址长度字段为6字节。
        D: 跳数字段由客户设置为0,但也能被一个代理服务器设置。
        E: 事务标识字段是一个由客户设置并由服务器返回的32 bit整数。客户用它对请求和应答进行匹配。对每个请求,客户应该将该字段设置为一个随机数。
        F: 客户开始进行引导时,将“秒数”字段设置为一个时间值。服务器能够看到这个时间值,备用服务器在等待时间超过这个时间值后才会响应客户的请求,这意味着主服务器没有启动。
        G: 
        H: I: J: K:如果该客户已经知道自身的I P地址,它将写入“客户I P地址”字段。否则,它将该字段设置为0。
            对于后面这种情况,服务器用该客户的I P地址写入“你的I P地址”字段。
            “服务器I P地址”字段则由服务器填写。
            如果使用了某个代理服务器,则该代理服务器就填写“网关I P地址”字段。 
        L: 客户必须设置它的“客户硬件地址”字段。尽管这个值与以太网数据帧头中的值相同,UDP数据报中也设置这个字段,但任何接收这个数据报的用户进程能很容易地获得它.
        M: 服务器主机名字段是一个空值终止串,由服务器填写。
        N: 服务器还将在“引导文件名字段”填入包括用于系统引导的文件名及其所在位置的路径全名。
        O: 特定厂商区域字段用于对BOOTP进行不同的扩展。

三:端口号
    1: BOOTP 服务器为67,BOOTP 客户为68。
        这意味着BOOTP 客户不会选择未用的临时端口,而只用端口6 8。
        选择两个端口而不是仅选择一个端口为BOOTP服务器用的原因是:服务器的应答可以进行广播
    2: 如果服务器的应答是通过广播传送的,同时客户又选择未用的临时端口,那么这些广播也能被其他的主机中碰巧使用相同临时端口的应用进程接收到。
        因此,采用随机端口(即临时端口)对广播来说是一个不好的选择。
    3: 如果客户也使用服务器的知名端口(67)作为它的端口,那么网络内的所有服务器会被唤醒来查看每个广播应答(如果所有的服务器都被唤醒,它们将检查操作码,如果是一个应答而不是请求,就不作处理)。
        因此可以让所有的客户使用与服务器知名端口不同的同一知名端口。
    4: 如果多个客户同时进行系统引导,并且服务器广播所有应答,这样每个客户都会收到其他客户的应答。
        客户可以通过BOOTP首部中的事务标识字段来确认应答是否与请求匹配,或者可以通过检查返回的客户硬件地址加以区分。

四:BOOTP服务器的设计
    1: 首先,BOOTP 服务器将从它的熟知端口(6 7)读取UDP数据报。这没有特别的地方。
        它不同于RARP 服务器,它必须读取类型字段为“ R A R P请求”的以太网帧。
        BOOTP协议通过将客户的硬件地址放入BOOTP分组中,使得服务器很容易获取客户的硬件地址。
    2: 鸡和蛋的问题:如果客户端不知道自己IP地址,服务器怎么发送IP报文到客户端。
        任何时候客户端应该准备回应一个自己IP到硬件地址映射的ARP请求(如果知道)以接收TFTP或BOOTP应答。
        TFTP 服务器如何能将一个响应直接送回BOOTP 客户?这个响应是一个UDP数据报,而服务器知道该客户的IP地址(可能通过读取服务器上的配置文件)。
        BOOTP 服务器的主机就可能向那个I P地址发送一个ARP请求。但这个客户不能响应这个ARP请求,因为它还不知道它自己的IP地址!
        A: 服务器通过ioctl请求给内核,为该客户在arp高速缓存中设置一个条目(这就是arp -s命令所作的工作)。服务器能一直这么做直到它知道客户的硬件地址和IP地址。这意味着当服务器发送UDP数据报(即bootp应答)时,服务器的arp将在arp高速缓存中找到该客户的IP地址。通常只有超级用户才能设置arp高速缓存条目。
        B: 可选的解决办法是服务器广播这个BOOTP应答而不直接将应答发回该客户。

五:BOOTP穿越路由器:一个路由器还能作为真正BOOTP服务器的代理,向位于不同网络的真正BOOTP服务器转发客户的BOOTP请求。
    1: RARP的一个缺点就是它使用链路层广播,这种广播通常不会由路由器转发。这就需要在每个物理网络内设置一个RARP 服务器。
        如果路由器支持BOOTP协议,那么BOOTP能够由路由器转发(绝大多数路由器厂商的产品都支持这个功能)。
    2: 研究一下当路由器(也称作“ BOOTP 中继代理”)在服务器的熟知端口( 67)接收到BOOTP请求时将会发生什么。
        A: 当收到一个BOOTP请求时,中继代理将它的IP地址填入收到BOOTP请求中的“网关IP地址字段”,然后将该请求发送到真正的BOOTP服务器(由中继代理填入网关字段的地址是收到的BOOTP请求接口的IP地址)。
        B:  该代理中继还将跳数字段值加1(这是为防止请求被无限地在网络内转发。RFC 951认为如果跳数值到达3就可以丢弃该请求)。
        C:  既然发出的请求是一个单播的数据报(与发起的客户的请求是广播的相反),它能按照一定的路由通过其他的路由器到达真正的BOOTP服务器。
        D:  真正的BOOTP服务器收到这个请求后,产生BOOTP应答,并将它发回中继代理,而不是请求的客户。
        E:  既然请求网关字段不为零,真正的BOOTP服务器知道这个请求是经过转发的。中继代理收到应答后将它发给请求的客户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值