简介

  • TFTP,Trivial File Transfer Protocol,简单文本传输协议,应用层协议
  • 是TCP/IP协议族中用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务
  • 默认端口号为69,使用UDP数据报,基于UDP协议实现

    过程

  1. 一个读取或写入文件的请求,这个请求也是连接请求
  2. 若服务器批准此请求,则打开连接
    • 数据默认长度为512字节,每个数据包仅包含一个数据块,只有收到应答数据包后才会发送下一个数据包
    • 若一个数据包的大小小于512字节,则表示传输结束
    • 若数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包
    • 通信的双方都是数据的发出者与接受者,一方传输数据接收应答,另一方发出应答接收数据
    • 大部分的错误会导致连接中断,错误由一个错误的数据包引起,这个包不会被确认,也不会被重新传输,因此另一方无法接收到,若错误包丢失,则使用超时机制
    • 错误主要由三种情况引起
      • 不能满足请求
      • 收到的数据包内容错误,而这种错误不能由延时或重发解释
      • 对需要资源的访问丢失(如硬盘满)
    • TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机

      TFTP包

      基本构成

  • 本地媒介头|IP头|数据报头|TFTP头|实际数据
  • TFTP在IP头中不指定任何数据,它使用UDP中的源和目标端口以及包长度域
    • 由TFTP使用的包标记(TID)在这里被用作端口,因此TID必须介于0到65535
  • TFTP头中包括两个字节的操作码,指明了包的类型

    数据包格式

    TFTP协议 - 图1

    读写请求数据包

    TFTP协议 - 图2

  • 常用选项

    • blksize:协商数据块大小,默认数据块为512,可以协商的值为8~65464字节(RFC2348)
    • timeout:超时间隔,可以协商的值为1~255秒(RFC2349)
    • tsize:传输文件的大小(RFC2349)

      Data数据包

      TFTP协议 - 图3

      ACK数据包

      TFTP协议 - 图4

      ERROR数据包

      TFTP协议 - 图5

      OACK数据包

      TFTP协议 - 图6

      注意事项

  • 只能是客户机发送读写请求,读写请求数据包中可能包含很多个选项,但一个选项只能出现一次

  • 若服务器支持读写请求中的选项,服务器会使用选项应答(OACK)响应
    • OACK中包含服务器能够支持的选项,但绝对不可以包含客户端没有使用的选项
    • 若某些选项服务器不支持,则会忽略,也可能在OACK中将这些选项值替换为自己支持的或发送一个错误包,错误码为8,以终止数据传输
  • 客户端应答OACK可能有两种方式
    • 读请求,以ACK(数据块号设置为0)应答
    • 写请求,以第一个数据块进行应答
    • 若客户端拒绝OACK,则应该发送ERROR数据包,错误码为8