TFTP(Trivial File Transfer Protocol,简单文件传输协议):实现客户端与服务器之间简单文件传输。小文件传输,端口:69。协议简单,易于实现。
缺点:
- 传输效率低
- 对于超时机制没有明确说明
- 每包长度固定为512字节,不灵活
TFTP端口:指的是TFTP服务在服务器的69端口运行,客户端发送RRQ和WRQ的目的端口都是69,客户端源端口和服务器发送的端口都是随机的。
TFTP包格式
TFTP包有6种类型,包的类型由数据包前2个字节(操作码Opcode)确定,这6种类型的数据包分别是:
读文件请求包:Read request,简写为RRQ,值为1
写文件请求包:Write requst,简写为WRQ,值为2
文件数据包:Data,简写为DATA,值为3
应答包:Acknowledgement,简写为ACK,值为4
错误信息包:Error,简写为ERROR,值为5
请求响应包: Acknowledgement,简写为ACK,值为6
具体结构如下图所示:(没有指明字节数就是可变长,需要根据实际情况决定)
块编号:包的序号
读/写文件请求包:
文件名:ASCII码表示,\0结尾
mode(传输模式):\0结尾
字符串文件 | netascii |
二进制文件 | octet |
ERROR中的错误码见下文。
请求响应包是对请求数据的响应,是可选包,视具体情况而定。
1. 操作码(2字节)
2. 可选字段(timeout、blksize、tsize等,以 \0 结尾)
TFTP协议过程分析
TFTP客户端下载过程
第一步:客户端给服务器发起下载请求,数据格式为(操作码1+文件名+0+模式+0)。
第二步:服务器接收到请求之后,回复客户端数据。如下所示:(操作码3+块编码0+数据, (IP号, 端口号))。
第三步:客户端每接受一次数据,都要回复服务器一次ACK信号。
第四步:服务器收到ACK,给客户端发送下一包数据。(重复3-4这个过程)
第五步:客户端接收到的数据小于512个字节,说明服务器发送完毕。数据包小于516字节(2B操作码+2B块编码+512B数据)
TFTP客户端上传过程
第一步:客户端给服务器发送上传请求,数据格式为(操作码2+文件名+0+模式+0)。
第二步:服务器接收到请求之后,回复客户端数据。(操作码4+块编码0, (IP号, 端口号))。
第三步:客户端每发送一次数据,服务器都要回复一次ACK信号。
第四步:客户端收到ACK,给服务器发送下一包数据。(重复3-4这个过程)
第四步:直到客户端发送完数据才结束。
注意:
1、当客户端接收到的数据小于512字节时,表示服务器发送数据完成
2、块编码从0开始,每次加1,它的范围是[0,65535]
ERROR包中的错误码
0 | 未定义Not defined, see error message (if any). |
1 | 文件找不到File not found. |
2 | 拒绝访问Access violation. |
3 | 磁盘满了或者超出了可分配空间Disk full or allocation exceeded. |
4 | 非法TFTP操作Illegal TFTP operation. |
5 | 传输ID未知Unknown transfer ID. |
6 | 文件不存在File already exists. |
7 | 没有该用户No such user. |