【网络协议】RFC1350-TFTP协议

发布于:2025-02-10 ⋅ 阅读:(44) ⋅ 点赞:(0)

引言

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博客

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

网站公告

今日签到

点亮在社区的每一天
去签到