简单文本传输协议(TFTP)及引导程序协议BOOTP

1.TFTP:

     TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,基于UDP实现。提供不复杂、开销不大的文件传输服务。端口号为69。
2.TFTP的报文格式,如图所示
     图中显示了5种TFTP报文格式(操作码1和2的报文使用相同的格式)。
     TFTP报文的头两个字节表示操作码,对于读请求和写请求(WRQ),文件名字段说明客户要读或写的位于服务器上的文件。模式字段是一个ASCII码串netascii或octet
    • netascii表示数据是以成行的ascii码字符组成,以两个字节\r \n作为行结束符
    • octet则将数据看做8bit一组的字节流而不作任何解释。
     最后一种TFTP报文类型是差错报文,它的操作码为5.它用于服务器不能处理读请求或者写请求的情况。在文件传输的过程中的读和写也会导致传送这种报文,接着停止传输。
3.TFTP的工作过程
     TFTP的工作过程很像停止等待协议,发送完一个文件块后就等待对方的确认,确认时应指明所确认的块号。发送万数据后在规定时间内收不到确认就要重发数据PDU,发送确认PDU的一方弱在规定时间内收不到下一个文件块,也要重发确认PDU。这样保证文件的传送不致因某一个数据报的丢失而告失败。
4.BOOTP:
     BOOTP是引导程序协议,也称为自举协议,用于系统引导过程,是DHCP的前身,BOOTP用于无盘工作站的局域网中,可以让无盘工作站从一个中心服务器上获得IP地址。通过BOOTP协议可以为局域网中的无盘工作站分配动态IP,这样就不需要管理员去为每个用户去设置静态IP地址。一个无盘系统需要下列协议才能在只读存储器中完成:BOOTP、TFTP、UDP、IP和一个局域网的驱动程序。BOOTP使用UDP,通常与TFTP协同工作。BOOTP是一个基于IP/UDP协议的协议,它可以让无盘站从一个中心服务器上获得IP地址,为局域网中的无盘工作站分配动态IP地址,并不需要每个用户去设置静态IP地址。使用BOOTP协议的时候,一般包括Bootstrap Protocol Server(自举协议服务端)和Bootstrap Protocol Client(自举协议客户端)两部分。
5.BOOTP的分组格式
     BOOTP请求和应答均被封装在UDP数据报中,长度为300字节的BOOTP请求和应答的格式如图所示:
  • 操作码:1请求,2应答
  • 硬件类型:1表示10Mb/s的以太网
  • 硬件地址长度:对于以太网,硬件地址长度字段为6个字节
  • 跳数:由客户端设置为0
  • 事务标识:一个由客户端设置并由服务器返回的32bit整数。客户用它对请求和应答进行匹配。
  • 秒数:客户开始进行引导时,将设置一个时间值,备用服务器能看到这个时间,超过这个时间备用服务器会响应客户的请求,这意味着主服务器没有启动。    
  • 客户IP地址:客户端写入,否则将设置为0
  • 客户硬件地址: 有客户设置。
  • 服务器主机名:一个空值终止的字符串,由服务器填写。
  • 特定厂商区域:用于对BOOTP进行不同的扩展。
     端口号:    
     BOOTP服务器为67, BOOTP客户为68
 

协议流程

 

  1. 由BOOTP启动代码来启动BOOTP客户端,这个时候BOOTP客户端还没有IP地址。

  2. BOOTP客户端使用广播,源IP地址为0.0.0.0,目的IP地址为255.255.255.255,向网络中发出IP地址查询要求。

  3. 运行BOOTP协议的服务器接收到这个请求,会根据请求中提供的MAC地址找到BOOTP客户端,并发送一个含有IP地址、服务器IP地址、网关等信息的回应帧。

  4. BOOTP客户端会根据该回应帧来获得自己的IP地址并通过专用文件服务器(如TFTP服务器)下载启动镜像文件,模拟成磁盘来完成启动。

端口号

  BOOTP服务器67号端口,BOOTP客户端68号端口。

  选择两个端口而不是仅选择一个端口为BOOTP服务器用的原因是:服务器的应答可以进行广播。

  1. 当服务器广播,客户端使用临时端口时。广播也能被其他的主机中碰巧使用相同临时端口的应用进程接收到。因此,采用随机端口(即临时端口)对广播来说是一个不好的选择。
  2. 客户端和服务器使用同一个端口时。可以,此时网络内的所有服务器会被唤醒来查看这个广播,若是应答服务器就不做处理。
  3. 多个客户端同时引导时,且服务器广播所有应答。这样每个客户都会收到其他客户的应答。客户可以通过BOOTP首部中的事务标识字段来确认应答是否与请求匹配,或者可以通过检查返回的客户硬件地址加以区分。

 

BOOTP中继

  路由器(也称作“ BOOTP 中继代理”),当收到一个BOOTP请求时,中继代理将它的IP地址填入收到BOOTP请求中的“网关IP地址字段”,然后将该请求发送到真正的BOOTP服务器(由中继代理填入网关字段的地址是收到的BOOTP请求接口的IP地址)。该代理中继还将跳数字段值加1(这是为防止请求被无限地在网络内转发)。既然发出的请求是一个单播的数据报(与发起的客户的请求是广播的相反),它能按照一定的路由通过其他的路由器到达真正的BOOTP服务器。真正的BOOTP服务器收到这个请求后,产生BOOTP应答,并将它发回中继代理,而不是请求的客户。既然请求网关字段不为零,真正的BOOTP服务器知道这个请求是经过转发的。中继代理收到应答后将它发给请求的客户。

 

特定厂商信息

  如果有信息要提供,这个区域的前4个字节被设置为I P地址99.130.83.99。这可称作魔术甜饼,表示该区域内包含信息。

 

BOOTP vs. RARP

  无盘系统用RARP获取IP存在的问题:

  • IP地址是返回的唯一结果,没有其他信息返回。
  • RARP使用链路层广播,路由器不会转发该请求,使得在每个实际网络中得设置一个RARP服务器。

 

BOOTP vs. DHCP 

  1. DHCP可以说是BOOTP的增强版本,比较起BOOTP,DHCP透过"租约"的概念,有效且动态的分配客户端的IP设定,而且,作为兼容考虑,DHCP也完全照顾了BOOTP Client的需求。
  2. 必须至少有一台DHCP工作在网络上面,它会监听网络的DHCP请求。它提供两种IP定位方式:自动分配,一旦DHCP客户端第一次成功的从DHCP服务器租用到IP地址之后,就永远使用这个地址;动态分配,当DHCP第一次从HDCP服务器端租用到IP地址之后,并非永久的使用该地址,只要租约到期,客户端就得释放。
  3. DHCP除了可以动态的进行设定IP地址之外,还能够直接将一些IP保留下来给一些特殊用途的机器进行使用。另外一个方面,它能够直接按照硬件地址来固定的分配IP地址。
  4. DHCP与BOOTP的不同点在于,BOOTP也可以完成给主机分配IP地址的任务,但它要求主机的硬件地址必须被手工输入到BOOTP表中。可以讲DHCP看成一个动态的BOOTP。但是,BOOTP还可以将用来引导主机的操作系统发送给主机。而DHCP不可以。

 

总结

  这种协议允许正在启动的主机动态配置而无需用户监督。BOOTP 主要用于客户机从服务器获得自己的 IP 地址,服务器的 IP 地址以及启动映象文件名。其它一些配置信息,如本地子网掩码、本地时间偏移量、默认路由器地址和各种 Internet 服务器地址,都能与使用 BOOTP 协议的客户机交流。

  BOOTP 使用两个不同的知名通讯端口 UDP67/68。UDP67 用于服务器,UDP68 用于 BOOTP 客户机。客户机启动时,本身还没有 IP 地址,这时 BOOTP 客户机就以广播的形式发出一个名为 BOOTREQUEST 的 IP 地址查询请求包,这个请求包中包含了客户机物理地址,还可能有一个 IP 地址,如果已有的话。客户使用地址 255.255.255.255 发送广播,这种特殊地址称为有限广播地址。然后客户机等待服务器的响应,如果在特定时间段内没有收到响应,客户机就重新发出请求。 通过引导答复(bootreply)包,服务器响应客户机请求。请求可以包含“通用”引导文件名,例如,“unix”或“ethertip”。但服务器发送引导应答包时,它使用对应的引导文件的确切的路径名称来取代这个字段。

  为了确定路径名,服务器会查询本身的的数据库。这个数据库关联了客户机地址、请求文件名和为用户定制的特殊引导文件。如果请求(bootrequest)文件名是空,服务器就返回一个文件名字段用于表示客户机需加载的默认文件。 在客户机 IP 地址不知道的情况下,服务器必须要有一个硬件地址和 IP 地址相对应的数据库。客户机 IP 地址也被放到“bootreply”的某一字段中。 BOOTP 和 RARP 类似,但 RARP 只运行于 LAN 网络的数据链路层;而基于 UDP/IP 的配置协议 BOOTP 则提供了更多配置方面的信息,它允许整个 IP 网络动态配置。

  总之,BOOTP 及其扩展成为动态主机配置协议(DHCP)的基础。 协议结构8 16 24 32Op Htype Hlen HopsXidSecs FlagsCiaddrYiaddrSiaddrGiaddrChaddr (16 bytes) sname (64 bytes) File (128 bytes) Option (variable) Op – 消息操作代码,可以是引导请求( BOOTREQUEST )也可以是引导答复( BOOTREPLY ) Htype – 硬件地址类型 Hlen – 硬件地址长度 Xid – 事务 ID. Secs – 客户机开始地址请求或续约后消耗的时间(秒数) Flags – 标记 Ciaddr – 客户机 IP 地址 Yiaddr – “你的”(客户机) IP 地址 Siaddr –在 bootstrap 中下一台服务器可用服务器的 IP 地址 Giaddr – 通过代理启动时代理的 IP 地址 Chaddr – 客户机硬件地址。

 

 

参考

https://baike.baidu.com/item/BOOTP/610878?fr=aladdin

https://zhidao.baidu.com/question/6070483.html

posted on 2021-05-17 19:16  放空飞翔  阅读(1193)  评论(0编辑  收藏  举报

导航