参考链接:https://blog.csdn.net/yanhuatangtang/article/details/77309098
https://blog.csdn.net/zlj_fly/article/details/40227623
TFTP是一种简单的文件传输协议。目标是在UDP之上上建立一个类似于FTP的但仅支持文件上传和下载功能的传输协议,所以它不包含FTP协议中的目录操作和用户权限等内容。
在项目中udp环境下需要进行文件传输,一种高效的文件传输。文件传输一般会想到FTP 和TFTP,但考虑限制条件,所以采用TFTP。
client - server:(C/S结构)是大家熟知的客户机和服务器结构。
需要掌握三次握手原理。
1、从tftp服务器上下载文件:
把数据发送给别人,自己就是服务器;别人要发送数据,别人就是服务器; 服务器----发送数据
服务器的69端口只接受下载请求,确认包都要在随机端口中确认。
需要满足tftp协议
a、创建一个空文件
b、向文件中写入数据
c、关闭
操作码 功能
1 读请求,即下载
2 写请求,即上传
3 表示数据包,即DATA
4 确认码,即ACK
5 错误
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、如果出现网络丢包,收件方(客户端)会超时,并且重传最后的接收包(可以是数据包或者回应包),因此这将可以让发送者重新发送丢失包。当之前的包已经接受成功之后,发送者只需要保持一个重传包。注意 发送者 要做的事情:发送数据,接受 回应包;接受者要做的:发送回应包,接受数据。如下图所示:
读请求和写请求的回应是不一样的下图是读请求