当前位置: 首页 > article >正文

【网络协议】RFC1350-TFTP协议

引言

TFTP(Trivial File Transfer Protocol)即简单文件传输协议,是一种轻量级的文件传输协议,它允许客户端从远程主机获取文件或将文件传输到远程主机,主要用于小文件的传输,特别是在需要简便性而非功能性和安全性的场景下。本文简单介绍tftp的报文结构,传输过程及报文分析。

基本信息

制定组织:互联网工程任务组(IETF)
协议标准:RFC1350
协议层级:应用层协议
协议模型:客户端-服务器模型,采取一应一的机制
传输层协议:UDP,默认是69端口号

报文结构

TFTP支持以下五种包类型
 opcode  operation
  1       Read request (RRQ)     //读请求报文,用于客户端请求读取文件。
  2       Write request (WRQ)    //写请求报文,用于客户端请求写入文件。
  3       Data (DATA)            //数据报文,包含文件数据块及其序列号。
  4       Acknowledgment (ACK)   //确认报文,用于确认读写请求报文和数据报文。
  5       Error (ERROR)          //错误报文,用于报告传输过程出现的错误。

RRQ/WRQ 报文

            2 bytes     string    1 byte     string   1 byte
            ------------------------------------------------
           | Opcode |  Filename  |   0  |    Mode    |   0  |
            ------------------------------------------------
RRQ和WRQ报文的结构如下:
Opcode:两个字节,1表示是RRQ报文,2表示是WRQ报文
Filename:文件名,以ASCII码显示,文件名后跟一个字节的0,作为文件名的结束标记
Mode:传输模式,以ASCII码显示,支持netascii(文本)、octet(八进制)和mail(邮箱地址);文件名后跟一个字节的0,作为文件名的结束标记

DATA 报文

                   2 bytes     2 bytes      n bytes
                   ----------------------------------
                  | Opcode |   Block #  |   Data     |
                   ----------------------------------
DATA报文的结构如下:
Opcode:两个字节,3表示是数据报文
Block#:块编号,2字节的16进制数字,从1开始,用于接收端判断是否丢包以及将报文排序重组
Data:传输数据,支持0~512个字节,当字节为0~511个字节时,代表是最后一个数据块

ACK 报文

                         2 bytes     2 bytes
                         ---------------------
                        | Opcode |   Block #  |
                         ---------------------
确认报文结构如下:
Opcode:两个字节,4表示是确认报文
Block#:块编号,2字节的16进制数字,从0开始,其中0是对写请求报文的确认,大于1的编号是对相同编号数据块的确认

ERROR 报文

               2 bytes     2 bytes      string    1 byte
               -----------------------------------------
              | Opcode |  ErrorCode |   ErrMsg   |   0  |
               -----------------------------------------
错误报文结构如下
Opcode:两个字节,4表示是错误报文
ErrorCode:错误码,2字节的16进制数字,取值见后续
ErrMsg:错误信息,以ASCII码显示,后跟一个字节的0,作为文件名的结束标记
错误码:
Value        Meaning

   0         Not defined, see error message (if any).
   1         File not found.
   2         Access violation.
   3         Disk full or allocation exceeded.
   4         Illegal TFTP operation.
   5         Unknown transfer ID.
   6         File already exists.
   7         No such user.

TFTP传输过程

上传文件

  • 客户端发出写文件请求,并告知文件名,服务端回复确认数据块#0
  • 客户端发出数据块#1,服务端回复确认数据块#1
  • 客户端发出数据块#N,服务端回复确认数据#N
  • 当客户端发出的数据块小于512字节时,知道已发出最后一个数据块,在收到服务端的确认报文后,结束本次传输;当服务端收到第一个小于512字节的数据块,知道已收到最后一个数据块,发出确认报文后,结束本次传输

下载文件

  • 客户端发出读文件请求,并告知文件名,服务端回复数据块#1,客户端发出确认数据块#1
  • 客户端发出数据块#N,服务端回复确认数据块#N
  • 客户端发出数据块#N,服务端回复确认数据#N
  • 当服务端发出的数据块小于512字节时,知道已发出最后一个数据块,在收到客户端的确认报文后,结束本次传输;当客户端收到第一个小于512字节的数据块,知道已收到最后一个数据块,发出确认报文后,结束本次传输

测试要点

设备作为tftp客户端,支持上传下载文件,如配置文件、版本文件
设备作为tftp服务端,支持上传下载文件,如配置文件、版本文件

报文实战

上传文件

客户端发出写文件请求,文件名时1M.zip,传输模式是octet
服务端回复确认,数据块编号是0
客户端发出第一个数据块,字节大小是512字节,说明不是最后一个
服务端发出数据块#1的确认报文
一个个数据块传输,直到最后一个数据块

下载文件

客户端发出读文件请求,文件名是testfile1.txt,传输模式是netascii
服务端发出数据块#1,小于512字节,说明是最后一个数据块
客户端发出数据块#1的确认报文,结束传输
推荐使用tftpd64软件搭建tftp客户端和服务端,具体使用方法参考 【手把手教】使用tftpd64上传下载文件-CSDN博客

原创不易,你的支持是我最大的动力,欢迎大家点赞,收藏,关注!

http://www.kler.cn/a/515181.html

相关文章:

  • solidity基础 -- 存储类型
  • 3.1 Go函数调用过程
  • linux-ubuntu学习笔记碎记
  • Vscode配置continue运行ollama部署的Qwen2.5
  • 【深度学习】Java DL4J 2024年度技术总结
  • Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)
  • Java设计模式 十三 代理模式 (Proxy Pattern)
  • SQLmap 注入-03 获得用户信息
  • “深入浅出”系列之音视频开发:(3)音视频开发的学习路线和必备知识
  • Nginx 反向代理与负载均衡配置实践
  • Qt —— 控件属性
  • CentOS 7.9(linux) 设置 MySQL 8.0.30 开机启动详解
  • 【esp32-uniapp小程序】uniapp小程序篇02——Hbuilder利用git连接远程仓库
  • VUE之路由Props、replace、编程式路由导航、重定向
  • 【Django开发】django美多商城项目完整开发4.0第14篇:Docker使用,1. 在Ubuntu中安装Docker【附
  • 开源AI崛起:新模型逼近商业巨头
  • 深入探讨激活函数在神经网络中的应用
  • 麒麟监控工具rpm下载
  • Couchbase UI: Indexes
  • 缓存之美:万文详解 Caffeine 实现原理(下)
  • 滑动窗口解题模板
  • MySQL中使用游标
  • C# ASP.NET MVC项目内使用ApiController
  • JAVAweb学习日记(六) 请求响应
  • 【华为OD机试】真题E卷-招聘(Java)
  • Appium 检查安装的插件