1 协议介绍:

TFTP (Trivial File Transfer Protocol, 简单文件传输协议也称小型文件传输协议)

是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)。

小型文件传输协议非常简单,透过少量存储器就能轻松实现——这在当时是很重要的考虑因素。所以TFTP被用于引导计算机,例如没有大容量存储器的路由器。现在它仍然被用于在一个网络上主机之间传输小文件,例如从一台网络主机或服务器引导一个远程X Window System终端或其他的瘦客户端。

小型文件传输协议部分基于更早期的文件传输协议,文件传输协议是通用分组协议(PUP Protocol)中的一部分。在TCP/IP协议组早期的工作中,TFTP往往是在一个新的主机类型上首先完成的协议——因为其非常的简单。

最早的小型文件传输协议版本是在RFC 1350之前,显示出相当糟糕的协议缺陷,发现的时候被称为魔术新手症候群。

详细信息:

  • 使用UDP(端口69)作为其传输协议(不像FTP使用TCP端口21)。
  • 不能列出目录内容。
  • 无验证或加密机制。
  • 被用于在远程服务器上读取或写入文件。
  • 支持三种不同的传输模式:"netascii","octet"和"mail",前两种符合FTP协议中的"ASCII"和"image(binary)"模式;第三种从来很少使用,当前已经废弃。

因为小型文件传输协议使用UDP协议,就必须自己支持传输和会话的控制。每个通过TFTP传输的文件构成了一个独立的交换。此传输表现为步锁,任何时间网络上仅仅传递一个包(一个数据块或一个首部确认)。由于缺少窗口切换技术,TFTP在有很多潜在连接的情况下仅提供较低的吞吐量。

由于小型文件传输协议缺少安全性,在开放式因特网上传输非常危险,所以普遍仅仅用于私人本地网络。当前TFTP常用于PXE无盘启动,网络设备的设置等。

选项协商后来加到协议中(RFC 2347),已经被协定的选项能对协议的操作进行轻微的更改(特别是更大分块尺寸的使用使得吞吐量略有提高),但协议大体上还是保持不变的。

2 传输模式

数据的存储有不同的格式,磁盘中相同的一块数据,通过不同的存储协议解析,得到的内容是完全不同的,如:磁盘中的一个字节0x65,按照ASCII解析就是字母A,按照数据本身解析就是0x65这个数,两种解析的方式显示的内容完全不同。因此文件在传输的过程中也需要指明数据的表示方式,即传输模式。TFTP协议的传输模式如下所示:

模式名称 模式含义 说明
netascii 文本传输模式,按照一个字节8位解析 文本模式
octet 二进制模式,数据无需解析 二进制模式
mail 已过时,不使用 已过时

3 协议格式

TFTP基于UDP协议实现,而UDP使用IP。因此一个TFTP包中会有如图1所示的以下几段:本地媒介头,IP头,UDP数据报头,TFTP数据报。TFTP在IP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。由TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0到65,535之间。图中显示了5种TFTP报文格式,每个报文格式TFTP报文的头两个字节表示操作码。之后对于不同的报文格式存在差异。

TFTP共定义了五种类型的包格式,格式的区分由包数据前两个字节的Opcode字段区分,分别是:

  • 读文件请求包:Read request,简写为RRQ,对应Opcode字段值为1
  • 写文件请求包:Write requst,简写为WRQ,对应Opcode字段值为2
  • 文件数据包:Data,简写为DATA,对应Opcode字段值为3
  • 回应包:Acknowledgement,简写为ACK,对应Opcode字段值为4
  • 错误信息包:Error,简写为ERROR,对应Opcode字段值为5

3.1 读写文件请求包格式

RRQ和WRQ包
2字节 字符串 1字节 字符串 1字节 字符串 1字节 字符串 1字节   字符串 1字节 字符串 1字节
opc filename 0 mode 0 opt1 0 val1 0 optN 0 valN 0

3.1.1 opc(opcode)

功能码,1代表读请求(RRQ),2代表写请求(WRQ)。

RRQ(读请求,Read request)报文由客户使用,用来建立一条从服务器读数据的连接。

WRQ(写请求,Write requst)报文由客户使用,用来建立一条把数据写到服务器的连接,它的格式与RRQ相同。

3.1.2 filename

Filename(文件名字段)说明客户要读或写的位于服务器上的文件,文件名是netascii码字符,以字符串结束符0结束。

3.1.3 mode

Mode(模式字段)是一个ASCII码串netascii或octet(大小写可任意组合),表示文件传输的方式,同样以字符串结束符0结尾。

netascii表示数据是以成行的ASCII码字符组成,以两个字节—回车字符后跟换行字符(称为CR / LF)作为行结束符。

octet模式用于传输文件,这种文件在源机上以8位格式存储。

3.1.4 opt1

第一个选项,使用区分大小写的ascii字符表示,以字符串结束符0结尾。

3.1.5 val1

与第一个选项相关的值,使用区分大小写的ascii字符表示,字符串结束符0结尾。

3.1.6 optN,valN

最后一个选项/值。均是使用区分大小写的ascii字符表示,字符串结束符0结尾。

注:读写请求数据包的最大长度为512字节。

3.1.7 常用的选项

blksize  协商数据块大小,默认数据块为512字节,可以协商的值为8~65464字节(RFC23480)。

timeout 超时间隔,可以协商的值为1~255秒(RFC2349)。

tsize 传输文件的大小(RFC2349)。

3.2 数据包格式

DATA包
2字节 2字节 n字节
Opcode (操作码 3)

Block (包序号,从1开始,除了最后一包,每一包的长度都是512字节,最后一包的长度小于512字节)

data (具体急需要传输的数据)

DATA数据包的opcode为3,它还包括有一个数据块号和数据。

数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。

数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表示这个包是最后一个包。如果最后一个包正好为512字节,则再发送一个0字节的包用于表示结束。

扩展协议中,dada域的数据长度可以通过blksize选项协商,从8~65464均可以。如果数据小于协商值,说明这是最后一包数据。

3.3 ACK包格式

ACK包
2字节 2字节
Opcode (操作码 4) Block (收到的包序号)

ACK包(Acknowledgement)用于确认数据包已收到,和接收到的数据包数据块号相同。ACK包的操作码为4。

当接收方收到一个数据包后,会向发送方发送一个ACK包;而发送方则会在收到一个ACK包后继续发送下一个包。若发送完未能收到ACK包,则会使用超时机制,重新发送刚才的数据包。除了ACK和用于中断的包外,其它的包均需得到确认。发出新的数据包等于确认上次的包。WRQ和DATA包由ACK或ERROR数据包确认,而RRQ数据包由DATA或ERROR数据包确认。写请求的ACK应答数据块号为0。

3.4 错误包格式

用于在失败的情况下回复对端

ERROR包
2字节 2字节 字符串 1字节
Opcode (操作码 5) ErrorCode (错误码,每一种错误码对应一种错误场景) ErrMsg (错误的描述信息) 0

一个ERROR包的操作码是5。此包可以被其它任何类型的包确认,错误码指定错误的类型。它用于服务器不能处理读请求或写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差错编号字段给出一个数字的差错码,跟着是一个ASCII表示的差错报文字段,可能包含额外的操作系统说明的信息。

错误的值和错误的意义如下:

0         未定义Not defined, see error message (if any).
   1         文件找不到File not found.
   2         拒绝访问Access violation.
   3         磁盘满了或者超出了可分配空间Disk full or allocation exceeded.
   4         非法TFTP操作Illegal TFTP operation.
   5         传输ID未知Unknown transfer ID.
   6         文件不存在File already exists.
   7         没有该用户No such user.

3.5 OACK包格式

OACK包
2字节 字符串 1字节 字符串 1字节   字符串 1字节 字符串 1字节
opc opt1 '\0' val1 '\0' optN '\0' valN '\0'

3.5.1 opc(opcode)

命令码为6,表示这是选项应答。

3.5.2 opt1

第一个选项应答,从请求帧中直接拷贝。

3.5.3 val1

与第一个选项相关的应答值。

3.5.4 optN,valN

最后一个选项/应答值应答对。

4 TFTP协议的缺陷

  1. 传输效率低
  2. 对于超时机制没有明确说明
  3. 每包长度固定为512字节,不灵活

5 参考

基于W5500的嵌入式TFTP服务器实现

https://www.iwiznet.cn/2015/09/01/%e5%9f%ba%e4%ba%8ew5500%e7%9a%84%e5%b5%8c%e5%85%a5%e5%bc%8ftftp%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%ae%9e%e7%8e%b0/

文件传输协议---TFTP

https://www.cnblogs.com/chusiyong/p/11389442.html

TFTP协议

https://blog.csdn.net/mjLlm/article/details/82950639

TFTP wiki en (需要*楼*梯*)
https://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol

TFTP wiki zh (需要*楼*梯*)
https://zh.wikipedia.org/wiki/%E5%B0%8F%E5%9E%8B%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE

TFTP 简单文件传输协议相关推荐

  1. LinuxProbe 0x14 虚拟网站主机功能(基于端口)、Vsftpd服务传输文件、TFTP简单文件传输协议

    虚拟网站主机功能 基于端口号 基于端口号的虚拟主机功能可以让用户通过指定的端口号来访问服务器上的网站资源.在使用Apache配置虚拟网站主机功能时,基于端口号的配置方式是最复杂的. 因此我们不仅要考虑 ...

  2. 简单文件传输协议TFTP分析还原

    " 介绍TFTP协议及传输内容的还原." TFTP,全称为Trivial File Transfer Protocol,即简单文件传输协议,是一个用来在客户端与服务器之间进行简单文 ...

  3. 简单文件传输协议TFTP

    一.简单文件传输协议介绍 文件传输协议规范了本地从远程服务器上访问文件的方式. 文件传输协议分为两类:1.online-access 和 2.whole file copying.前者的代表协议为NF ...

  4. 简单文件传输协议--主机部分--patr1

    /* 串口基础--简单文件传输协议--主机部分 从机部分:devtranfile.h           devtranfile.c 新建工程名称:UartSendFile 时间:2013年5月23日 ...

  5. 计算机网络之应用层:3、文件传输协议FTP、简单文件传输协议TFTP

    应用层:3.FTP.TFTP FTP要解决的问题: 文件传输协议: FTP客户端和服务器: FTP工作原理: FTP要解决的问题: 1.不同计算机存储数据的格式不同 2.文件的目录结构和文件的命名规则 ...

  6. FTP文件传输协议与部署,包括Linux系统、Windows系统和H3C路由交换设备部署

    1.FTP 1.1 定义 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用 ...

  7. 文件传输协议FTP/TFTP/SSH/SCP——应用层

    常见的文件传输协议:FTP.TFTP.SSH.SCP 一.FTP(英文:File Transfer Protocol,缩写:FTP) 1.概念 FTP是在网络层传输文件的应用层协议,基于TCP连接,使 ...

  8. 常见文件传输协议(ftp、tftp、scp)及其特点

    在工作中,我们经常要涉及到文件传输,windows 与windows, linux 与linux,windows 与linux 之间的文件传输,可供选择的途径有好多种. 可是常见的无非那么几种. 常见 ...

  9. LWIP 2.0.3 之TFTP Server ,简单文件传输

    TFTP即简单文件传输协议,协议我就不多啰嗦了,感兴趣的可查阅RFC1350: https://tools.ietf.org/html/rfc1350 本例说明:下位机跑LWIP作为TFTP Serv ...

最新文章

  1. ASP.NET页面事件:顺序与回传详解
  2. golang中的http客户端
  3. mysql乐观锁总结和实践--转
  4. jzoj4804-[NOIP2016提高A组模拟9.28]成绩调研【指针,模拟】
  5. php百度语音合成,Drupal 与百度云语音合成(PHP SDK)的集成
  6. 把一个 ASP.NET 程序转换为了 Web Services
  7. 【SQL练习题】排序
  8. java三星题之_JAVA三星题之playing a TicTacToe game
  9. 利用InVEST模型的生境质量模块计算生境质量
  10. 强悍!winrar妙用-将bat脚本打包成exe可执行文件并实现自动执行
  11. 【摄像头】图像传感器尺寸、像素大小和成像质量的关系
  12. “正大杯”第十三届全国大学生市场调查与分析大赛(本科模拟题)
  13. 经典vim插件功能说明、安装方法和使用方法介绍
  14. 北大AI讲座公开课-精华
  15. 一行代码教你屏蔽你的博客广告
  16. 常见的一句话muma
  17. 计算机科学与技术 金海,金海华中科技大学履历
  18. 2022环境电器年度行业分析报告:洗地机同比增长357%,扫地机器人销量197万+
  19. Oracle的视图,索引,约束,事务,数据库范式
  20. oracle配置安全更新失败,安装Oracle11gR2先决条件检查失败的详细解决处理过程

热门文章

  1. 35岁以后还能学软件测试吗?
  2. Flowable 79 张表都是干嘛的?
  3. matlab画最小二乘线,matlab非线性最小二乘法求解 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  4. bzoj1853 [Scoi2010]幸运数字
  5. ALL IS WELL《三傻大闹宝莱坞》意味深长的23句经典台词
  6. 边沿检测电路的多种实现
  7. echarts.js 下载
  8. Cramer-Rao Lower Bound的推导
  9. gmoj 6860. 【2020.11.14提高组模拟】鬼渊传说
  10. Jekyll搭建个人博客 韩俊强的博客