ch16: Boostrap Protocol
BOOTP
Last updated
BOOTP
Last updated
RARP有两个问题:
只返回一个IP地址;
使用数据链路层,不能被路由器转发。
可以使用BOOTP,使用UDP协议,并与TFTP一起使用。
BOOTP数据封装在UDP中:
数据一共300字节。
具体格式如下:
opcode:一个字节,1表示请求,2表示响应;
hardware type:一个字节,1来标识以太网;
hardware address:一个字节,6来标识以太网地址;
hop count:跳数,被转发的时候增1。一个字节;
transaction ID:4个字节,用来匹配请求和响应;
number of seconds:2个字节,超时时间;
(unused):2个字节;
client IP address:4个字节,client的IP地址,如果还不知道,就是0;这种情况server就会将分配给这个client的地址填入your IP address中;
your IP address:4个字节,服务器分配给client的IP 地址;
server IP address:服务器的IP地址;
gateway IP address:如果中间经过了路由器,就是路由器的IP地址;
client hardware address:16个字节,client的硬件地址,必填,只有填了这个服务器的UDP进程才能知道client的硬件地址;
server hostname:64个字节,服务器的主机名;
boot filename:128个字节,引导文件名字;
vendor-specific information:64个字节,一个扩展字段,和特定厂商有关。
client使用端口68,服务器使用端口67。
client也使用一个固定的端口的原因是,reply可能是一个广播。
有一个问题,就是TFTP服务器不知道如何将一个响应返回给client,因为这个时候还不知道client的IP地址,也不能发起一个ARP请求。
两个解决办法:
服务器通过ioctl将分配给client的IP地址添加到内核的ARP缓存中;
服务器广播这个BOOTP响应。
BOOTP和RARP的一个不同就是BOOTP可以被路由器转发。
当被一个路由器转发后,路由器将自己的IP地址填到gateway IP address中,然后转发给真正的服务器。
服务器将响应返回router。
然后router返回给client。