第15章 TFTP:简单文件传送协议
15.2 协议
在开始工作时,T F T P的客户与服务器交换信息,客户发送一个读请求或写请求给服务器。在一个无盘系统进行系统引导的正常情况下,第一个请求是读请求( R R Q)。图1 5 - 1显示了5 种T F T P报文格式(操作码为1和2的报文使用相同的格式)。
T F T P报文的头两个字节表示操作码。对于读请求和写请求( W R Q),文件名字段说明客户要读或写的位于服务器上的文件。这个文件字段以 0字节作为结束(见图 1 5 - 1)。模式字段是一个A S C I I码串n e t a s c i i或o c t e t(可大小写任意组合),同样以0字节结束。n e t a s c i i表示数据是以成行的A S C I I码字符组成,以两个字节—回车字符后跟换行字符(称为 C R / L F) 作为行结束符。这两个行结束字符在这种格式和本地主机使用的行定界符之间进行转化。o c t e t则将数据看作8 bit一组的字节流而不作任何解释。
每个数据分组包含一个块编号字段,它以后要在确认分组中使用。以读一个文件作为例子,T F T P客户需要发送一个读请求说明要读的文件名和文件模式 ( m o d e )。如果这个文件能被这个客户读取, T F T P服务器就返回一个块编号为 1的数据分组。T F T P客户又发送一个块编号为1的A C K。T F T P服务器随后发送块编号为 2的数据。T F T P客户发回块编号为2的A C K。重复这个过程直到这个文件传送完。除了最后一个数据分组可含有不足 5 1 2字节的数据,其他每个数据分组均含有5 1 2字节的数据。当T F T P客户收到一个不足5 1 2字节的数据分组,就知道它收到最后一个数据分组。
在写请求的情况下,TFTP 客户发送W R Q指明文件名和模式。如果该文件能被 该客户写,TFTP 服务器就返回块编号为 0的A C K包。该客户就将文件的头 5 1 2字节以块编号为1发出。服务器则返回块编号为1的A C K。
这种类型的数据传输称为停止等待协议。它只用在一些简单的协议如 T F T P中。在2 0 . 3节中将看到T C P提供了不同形式的确认,能提供更高的系统吞吐量。 T F T P的优点在于实现的简单而不是高的系统吞吐量。
最后一种T F T P报文类型是差错报文,它的操作码为 5。它用于服务器不能处理读请求或写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差错编号字段给出一个数字的差错码,跟着是一个 A S C I I表示的差错报文字段,可能包含额外的操作系统说明的信息。
既然T F T P使用不可靠的U D P,T F T P就必须处理分组丢失和分组重复。分组丢失可通过发送方的超时与重传机制解决(注意存在一种称为“魔术新手综合症 ( s o r c e r e r’s apprentice s y n d r o m e )”的潜在问题,如果双方都超时与重传,就可能出现这个问题。 12.2 节 [ S t e v e n s 1990] 介绍了这个问题是如何发生的 )。和许多U D P应用程序一样, T F T P报文中没有检验和, 它假定任何数据差错都将被 U D P的检验和检测到(参见11 . 3节)。