16.5 BOOTP穿越路由器
我们在 5.4节中提到 RARP的一个缺点就是它使用链路层广播,这种广播通常不会由路由 器转发。这就需要在每个物理网络内设置一个 RARP 服务器。如果路由器支持 BOOTP协议, 那么BOOTP能够由路由器转发(绝大多数路由器厂商的产品都支持这个功能)。
这个功能主要用于无盘路由器,因为如果在磁盘的多用户系统被用作路由器,它就能够 自己运行 BOOTP 服务器。此外,常用的 Unix BOOTP 服务器(附录 F)支持这种中继模式
(relay mode)。但如果在这个物理网络内运行一个 BOOTP 服务器,通常没有必要将 BOOTP请 求转发到在另外网络中的另一个服务器。
研究一下当路由器(也称作“ BOOTP 中继代理”)在服务器的熟知端口( 67)接收到 BOOTP请求时将会发生什么。当收到一个 BOOTP请求时,中继代理将它的 IP地址填入收到 BOOTP请求中的“网关 IP地址字段”,然后将该请求发送到真正的 BOOTP服务器(由中继代 理填入网关字段的地址是收到的 BOOTP请求接口的 IP地址)。该代理中继还将跳数字段值加 1
(这是为防止请求被无限地在网络内转发。 RFC 951认为如果跳数值到达 3就可以丢弃该请求)。 既然发出的请求是一个单播的数据报(与发起的客户的请求是广播的相反),它能按照一定的 路由通过其他的路由器到达真正的 BOOTP服务器。真正的 BOOTP服务器收到这个请求后,产 生BOOTP应答,并将它发回中继代理,而不是请求的客户。既然请求网关字段不为零,真正 的BOOTP服务器知道这个请求是经过转发的。中继代理收到应答后将它发给请求的客户。
16.7 小结
BOOTP使用UDP,它为引导无盘系统获得它的 IP地址提供了除 RARP外的另外一种选择。BOOTP还能返回其他的信息,如路由器的 IP地址、客户的子网掩码和名字服务器的 IP地址。 既然 BOOTP用于系统引导过程,一个无盘系统需要下列协议才能在只读存储器中完成:
BOOTP、TFTP、UDP、IP和一个局域网的驱动程序。
BOOTP服务器比 RARP服务器更易于实现,因为 BOOTP请求和应答是在 UDP数据报中, 而不是特殊的数据链路层帧。一个路由器还能作为真正 BOOTP服务器的代理,向位于不同网 络的真正 BOOTP服务器转发客户的 BOOTP请求。