TFTP的通信流程

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

· l 读文件请求包:Read request,简写为RRQ,对应Opcode字段值为1

· l 写文件请求包:Write requst,简写为WRQ,对应Opcode字段值为2

· l 文件数据包:Data,简写为DATA,对应Opcode字段值为3

· l 回应包:Acknowledgement,简写为ACK,对应Opcode字段值为4

· l 错误信息包:Error,简写为ERROR,对应Opcode字段值为5

1、由客户端发起读文件/写文件的请求,同时可以进行请求连接

2、服务器监听到请求,打开连接,并向客户端发送文件,以每个定长为512字节的块进行发送。每个数据包包含一个数据块,在发送下一个包的时候必须被客户端确认回应一个回应包。

3、当发现某个数据包小于512个字节,说明传输终止。

4、如果出现网络丢包,收件方(客户端)会超时,并且重传最后的接收包(可以是数据包或者回应包),因此这将可以让发送者重新发送丢失包。当之前的包已经接受成功之后,发送者只需要保持一个重传包。注意 发送者 要做的事情:发送数据,接受 回应包;接受者要做的:发送回应包,接受数据。如下图所示:

读请求和写请求的回应是不一样的下图是读请求

有许多的错误会造成连接中断.

1、发送错误的包,这个包没有回应,也没有重发,(例如,TFTP服务器或者客户端会因为收到错误的信息终止)这样导致对方接受不到。所以引入了超时机制。通常错误由3种情况导致:

(1)、不能满足请求的内容(例如:文件找不到,不允许接入,或者用户不存在)
(2)、由于网络延迟或者重置导致正在接收的包无法解析(例如包的格式不正确)
(3)、必须访问资源丢失(例如磁盘满了,或者传输过程中拒绝访问)

TFTP意识到仅有一个错误条件是不会导致中断的,那就是接收包的源端口不正确。在这种情况下会向原始的服务器发一个错误包。

为了简单的实现,TFTP协议非常的有限。例如:固定大小的块可以使得分配空间更直接,在锁定等待回应包可以方便控制流并且不需要重排接到的数据包

错误码

值          表示意思

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

TFTP通信原理的更多相关文章

  1. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  2. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  3. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  4. Java 下 SSL 通信原理及实例

    有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ...

  5. AIDL通信原理

    AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ...

  6. Java基础知识强化之网络编程笔记02:Socket通信原理图解

    1. Socket (1)Socket套接字  网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制:  • 通信两端都有Socket.  • 网 ...

  7. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  8. RS-232通信原理

    rs232串口通信原理 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus或者USB混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器 ...

  9. SSL 通信原理及Tomcat SSL 双向配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

随机推荐

  1. 关系型数据库工作原理-查询优化器之数据访问方式(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  2. java多线程的常见例子

    收藏 http://blog.csdn.net/wenzhi20102321/article/details/52524545

  3. java导出word

    public void dayinHw(HttpServletRequest request, HttpServletResponse response){ String id = request.g ...

  4. 探究c# lock

    今天早上阅读前辈的代码,看到了这么一段代码,如下所示: lock("Execute") { string sqlStr = sbSQLScript.ToString(); } 看到 ...

  5. TypeScript入门知识四(表达式和循环)

    一,箭头表达式 用来声明匿名函数,消除传统匿名函数的this指针问题 //单行的话可以省略{},多行的不能省. var sum = (arg1,arg2)=> arg1+arg2; //定义一个 ...

  6. 基于python自动化测试平台与虚拟化技术结合的思考

    背景: 自动化测试行业内,个人觉得主力语言是python.java.这里讨论下基于python自动化框架设计与case开发,用过python的都知道它的好处,但是根据实际项目需要有了很多迎面而来的困难 ...

  7. html备战春招の一

    html不是一种编程语言,而是一种标记语言,通过使用标签来标记网页. 对于中文网页需要使用 <meta charset="utf-8"> 声明编码,否则会出现乱码.有些 ...

  8. Hadoop集群环境安装

    转载请标明出处:  http://blog.csdn.net/zwto1/article/details/45647643:  本文出自:[zhang_way的博客专栏] 工具: 虚拟机virtual ...

  9. parted分区和挂载及非交互式操作

    author : headsen  chen date : 2017-11-17  09:45:36 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,将磁盘上原有的分区删除掉: 进入:#pa ...

  10. Git - 可视化冲突解决工具P4Merge

    P4Merge P4Merge是Git的一个第三发Diff和Merge工具(可视化冲突解决工具). 下载地址: https://www.perforce.com/downloads/visual-me ...