zoukankan      html  css  js  c++  java
  • TFTP通信原理

    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.

    转载请注明出处:http://www.cnblogs.com/sexyboy/
  • 相关阅读:
    Spring中通配符问题
    <context:component-scan>子标签:<context:include-filter>和<context:exclude-filter>使用时要注意的地方
    (转)Spring常见注解总结
    (转)Spring常用注解
    spring配置文件引入properties文件:<context:property-placeholder>标签使用总结
    (转)Java多线程学习(吐血超详细总结)
    Druid连接池(四)
    sublime自动保存设置
    情感分类
    psvm中String [] args 理解
  • 原文地址:https://www.cnblogs.com/sexyboy/p/8509625.html
Copyright © 2011-2022 走看看