TFTP

来自站长百科
跳转至: 导航、​ 搜索

TFTP简单文件传输协议是TCP/IP协议族中的一个用来在客户机服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69,TFTP是一个传输文件的简单协议,它基于UDP协议而实现但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的,因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii是8位的ASCII码形式,另一种octet是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。

TFTP概况[ ]

  • 任何传输起自一个读取或写入文件的请求,这个请求也是连接请求,如果服务器批准此请求则服务器打开连接,数据以定长512字节传输,每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。
  • 如果一个数据包的大小小于512字节则表示传输结束,如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包,通信的双方都是数据的发出者与接收者,一方传输数据接收应答另一方发出应答接收数据,大部分的错误会导致连接中断,错误由一个错误的数据包引起,这个包不会被确认也不会被重新发送,因此另一方无法接收到,如果错误包丢失则使用超时机制。
  • TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下指示错误的包会被发送到源机,这个协议限制很多,这些都是为了实现起来比较方便而进行的。

TFTP初始连接[ ]

初始连接时候需要发出WRQ或RRQ,收到一个确定应答,一个确定可以写出的包或应该读取的第一块数据。通常确认包包括要确认的包的包号,每个数据包都与一个块号相对应,块号从1开始而且是连续的。

  • 对于写入请求的确定是一个比较特殊的情况,因此它的包的包号是0,如果收到的包是一个错误的包则这个请求被拒绝,创建连接时通信双方随机选择一个TID,因此是随机选择的,对于两次选择同一个ID的可能性就很小了,每个包包括两个TID,发送者ID和接收者ID。
  • 这些ID用于在UDP通信时选择端口,请求主机选择ID的方法上面已经说过了,在第一次请求的时候它会将请求发到TID69,也就是服务器的69端口上,应答时服务器使用一个选择好的TID作为源TID,并用上一个包中的TID作为目的ID进行发送。

TFTP正常终止[ ]

  • 传输的结束由DATA数据标记,其包括0-511个字符,这个包可以被其它数据包确认。接收方在发出对最后数据包的确认后可以断开连接,当然适当的等待是比较好的,如果最后的确定包丢失可以再次传输,如果发出确认后仍然收到最后数据包,可以确定最后的确认丢失。
  • 发送最后一个DATA包的主机必须等待对此包的确认或超时,如果响应是ACK传输完成。如果发送方超时并不准备重新发送并且接收方有问题或网络有问题时,发送也正常结束。当然实现时也可以是非正常结束,但无论如何连接都将被关闭。
  • 如果请求不能被满足,或者在传输中发生错误,需要发送ERROR包,这仅是一种传输友好的方式,这种包不会被确认也不会被重新传输,因此这种包可能永远不会被接收到。因此需要用超时来侦测错误。

TFTP包[ ]

TFTP支持五种类型的包,我们在以上已经说明这五种类型的包:

  1. Read request (RRQ)
  2. Write request (WRQ)
  3. Data (DATA)
  4. Acknowledgment (ACK)
  5. Error (ERROR)

包头中包括了这个包所指定的操作码。

相关条目[ ]

参考来源[ ]