一.简单文件传输协议介绍

文件传输协议规范了本地从远程服务器上访问文件的方式。

文件传输协议分为两类:1.online-access 和 2.whole file copying。前者的代表协议为NFS,类似于共享文档,在本地对文件的修改会影响服务器上的文件。而后者本质上是复制:向服务器上传文件(把本地文件copy到服务器上)和从服务器下载文件(把文件copy到本地)。对一个副本的修改,不会影响原本的文件。

TFTP的全称为Trivial File Transfer Protocol,与FTP相比较为简单:

1.基于UDP设计的应用层协议。端口为69。当然也支持其他的传输层协议,比如TCP。

2.没有access control,即没有登陆验证。

3.没有文件夹,所有的文件都放在根目录下。

4.设计的理念就是简单简单再简单,所以开销很小,常用于无盘工作站和对内存要求苛刻(可用内存小)的环境。

二.TFTP packet format

TFTP packet由TFTP header和TFTP data组成。首部中有一个两字节的opcode标注了该TFTP packet的类型,总共有5种。我们会逐一介绍。

2.1 RRQ(read request)

opcode = 01(十进制意义上的),表明该packet为RRQ型,用于本地向服务器申请下载文件。文件名由filename字段指定,为ASCII码字符串,可变长,以NULL结尾。mode字段也是一个可变长的ASCII码字符串,以NULL结尾,其限定了文件的传输模式(不同格式的文件的传输模式,或说方式肯定是不同的,比如二进制文件和txt文件),我们后面会讲。

2.2 WRQ(write request)

用于本地向服务器申请上传文件,opcode为02。其余和RRQ一致。

2.3 DATA(data)

opcode = 03。用于上传或是下载文件时的数据传输。文件过大,则会被拆分为多个数据段进行传输。block#字段标识了数据段的序号,方便后续数据的重组。data字段放置0-512字节的数据。对于大小不为512字节倍数的文件而言,最后一个data packet的data字段的大小小于512字节;对于恰好为512字节倍数大小的文件,最后往往会发一个data field为0字节的data packet,以避免一个data field为512字节大小的data packet作为该文件的最后一个data packet。

2.4 ACK(acknowledgement)

opcode = 04。用于服务器对于本地传输的data packet的响应。比如本地传来一个block#为xxx的data packet,服务器收到后则会进行确认,返回一个block#字段也为xxx的data packet。

注意仅仅是对data packet的确认,对WRQ和RRQ等其他类型不会返回ACK。

2.5 ERROR(error)

opcode = 05。errcode字段指明了错误类型,errorstring字段给出错误提示。其中errorstring是以ASCII码字符串的形式给出错误提示的,其可变长,且以NULL结尾。

2.6 transfer mode说明

介绍用于传输txt文件的Netascii和传输二进制文件的Octet模式。

Netascii模式用于传输txt格式的文件,其按行传输。发送方会在每一行结尾加上\r\n,而接收方会把它去掉。

Octet用于二进制文件的传输,是按照字节传输的,不需要发送方和接收做类似的增添除去处理。

3.TFTP协议说明

TFTP协议的packet format已经说明,下面说明TFTP的operations。

我们知道TFTP是用于点对点的简单文件传输,这两点实际上是对称的,均可作为服务器或是客户端。TFTP是基于UDP设计的,这一点非常奇怪,尤其是考虑文件传输需要保证可靠性,而UDP不保证可靠性。那么文件传输的可靠性由谁保证呢?自然是应用层的TFTP协议,其用ACK型packet保证data packet传输的可靠性。

3.1 TFTP传输文件的基本过程和可靠性的保证

我们仅考虑数据传输的过程(仅考虑ACK和DATA packet),暂时不考虑WRQ和RRQ等packet。

记住两个事实:

1.首先,server和client端各自维护了一个计时器,用于判断其发送的数据是否超时。

2.另外,server和client端传输数据采取stop and wait方式,没有收到对上一个数据的确认,不发下一个。

Server端发送data[1],并开始计时,希望得到client端ack(1)的响应。若计时器timeout后仍未收到ack(1),则server端认为data[1]丢失,并重传;在时限内一旦收到ack(1),server会立刻发送ack(2)。

Client端接收到data(1),立刻发送ack(1),并开始计时,希望收到server端data(2)的响应。若计时器timeout之后仍未收到data(2),则client端认为ack(1)丢失,并重传;在时限内一旦受到data(2),client端会立刻发送ack(2)。

3.2 SAS(sorcerer's apprentice syndrome)

这代表原来TFTP协议的缺陷。原来的TFTP协议设计:client端一旦收到ack(n),不论是否接收过,都立刻发送data(n+1),即使data(n+1)已经发送过了;server端一旦受到data(n),不论是否接收过,都立刻发送ack(n)。而dealyed but not lost ack会引发SAS,使得后续的data均被传输两遍。

解决办法就是在sender端算法里面再加一个判断,若ack(n)重复,则不发数据data(n+1)。

3.3 状态转移图

五种packet中没有标志传输结束的,需要依靠DATA packet隐式地表示(data域不足512B)。

为了避免SAS,可以把server端的ACK(n)改为:ACK(n) and not duplicate。

3.4 消息序列图

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

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

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

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

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

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

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

  4. TFTP 简单文件传输协议

    1 协议介绍: TFTP (Trivial File Transfer Protocol, 简单文件传输协议也称小型文件传输协议) 是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP ...

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

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

  6. 四十三、文件传输协议FTP、电子邮件、万维网

    文章目录 1.FTP服务器和用户端 2.FTP的工作原理 3.电子邮件 3.1 电子邮件的信息格式 3.2 电子邮件的组成结构 3.3 简单邮件传送协议SMTP 3.4 邮局协议-POP3 3.5 网 ...

  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. 双链表(插入节点操作)
  2. C语言求m中n个数字的组合
  3. 中国楼市场的真相————写在厦门楼市崩盘之后
  4. 《云计算》学习笔记4——Google的云计算原理与应用(分布式结构化数据表BigTable)
  5. 基于语义嵌入模型与交易信息的智能合约自动分类系统
  6. CCRD_TOC_2008年第2期
  7. C/C++堆、栈及静态数据区详解
  8. [From 10.1~10.5] 对象和集合初始化器(C#语法糖系列)
  9. 序1--年轻正当时(特权)
  10. SQL(五) - 表的创建以及操作
  11. 怎样进行软件测试结果分析,具体实例教你如何做LoadRunner结果分析
  12. 余弦距离、欧氏距离和杰卡德(Jaccard)相似性度量的比较
  13. dwz ajax session超时跳转登录页(struts2自定义阻碍器)
  14. C#.NET 权限管理系统组件 - 大数据读写分离实现的例子
  15. pku1088----滑雪(记忆性搜索)
  16. 开始做我的robot博客
  17. 计算机网络-试题库(含答案)
  18. MCU设计电路的总结
  19. 建模实训报告总结_建模实习工作总结
  20. 女性每天喝酸奶的好处是什么?

热门文章

  1. 测试通达信指标胜率的软件,如何测试通达信指标成功率?
  2. 适合三本计算机专业考研的学校,适合三本考研的学校有哪些
  3. 一个活了 45 年的「愚蠢」 Bug!
  4. Linux多线程---线程概念和线程控制
  5. web发布与html ppt,《HTTP协议与HTML》PPT课件.ppt
  6. uni-app 小程序上下滑动问题的解决
  7. 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)
  8. relative和absolute的使用(详细+案例)
  9. linux系统查看主板cpu,Linux下使用lm_sensors查看主板和CPU温度
  10. Unity常用API详解--初学必备