TFTP(Trivial File Transfer Protocol)即简单文件传送协议。
最初打算用于引导无盘系统(通常是工作站或X终端)
为了保持简单和短小,TFTP使用UDP
TFTP的代码(和它所需要的UDP、IP和设备驱动程序)都能适合只读存储器
RARP获得IP时,也会发出一个TFTP请求。
协议
在开始工作时,TFTP的客户与服务器交换信息,客户发送一个读请求或写请求给服务器,在一个无盘系统进行系统引导的正确情况下,第一个请求是读请求(RRQ)。
TFTP的五种报文格式:
image.png
TFTP报文的头两个字节表示操作码。
对于读请求和写请求(WRQ),文件名字段说明客户要读或写的位于服务器上的文件。这个文件字段以0字节作为结束。
模式字段是一个ASCII码串netascii或octet(可大小写任意组合),同样以0字节结束。
netascii表示数据是以成行的ASCII码字符组成,以两个字节—回车字符后跟换行字符(称为CR/LF)作为行结束符。这两个行结束字符在这种格式和本地主机使用的行定界符之间进行转化。
octet则将数据看作8bit一组的字节流而不作任何解释。
每个数据分组包含一个块编号字段,它以后要在确认分组中使用。
image.png
最后一种TFTP报文类型是差错报文,它的操作码为5.它用于服务器不能处理读请求或写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差错编号字段给出一个数字的差错码,跟着是一个ASCII表示的差错报文字段,可能包含额外的操作系统说明的信息。
因为TFTP使用不可靠的UDP,TFTP就必须处理分组丢失和分组重复,分组丢失可通过发送方的超时与重传机制解决
TFTP报文中没有检验和,它假定任何数据差错都将被UDP的检验和检测到。
安全性
TFTP分组中不提供用户名和口令,这时候TFTP的一个特征(安全漏洞)
因为TFTP是设计用于系统引导进程,它不可能提供用户名和口令。
这一特性被经常用于获取Unix口令文件的复制,然后猜测用户口令。
为防止这种类型的访问,目前大多数TFTP服务器提供了一个选项来限制只能访问特定目录下的文件(Unix系统中通常是/tftpboot)这个目录中只包含无盘系统进行系统引导时所需的文件。
对其他的安全性,Unix系统下的TFTP服务器通常将它的用户ID和组ID设置为不会赋给任何真正用户的值。这只允许访问具有读或写属性的文件。
小结
TFTP是一个简单的协议,适合于只读存储器,仅用于无盘系统进行系统引导,它只使用几种报文格式,是一种停止等待协议。
为了允许多个客户端同时进行系统引导,TFTP服务器必须提供一定形式的并发,因为UDP在一个客户与一个服务器之间并不提供唯一连接(TCP也一样),TFTP服务器通过为每个客户提供一个新的UDP端口来提供并发,这允许不同的客户输入数据报,然后由服务器中的UDP模块根据目的端口号进行区分,而不是由服务器本来来进行区分。
TFTP协议没有提供安全特性,大多数执行指望TFTP服务器的系统管理员来限制客户的访问,只允许它们访问引导所必须的文件
网友评论