**

TFTP简单文件传输协议

**
TFTP使用了UDP套接字,效率比较高,但是也要求TFTP为数据传输的不可靠负责。

TFTP服务器在69端口上监听到来的数据包,客户端使用一个随机的端口号

TFTP作用:许多无盘工作站使用TFTP来载入它们需要的来自服务器的文件。

每个数据报有一个操作码opcode(16 bits),表示包的类型,有五种

1——RRQ——-请求读

2——WRQ——-请求写

3——DAT——-文件数据

4——ACK——-确认,继续进行传输

5——ERR——–发生错误

java tftp java tftp协议_网络编程

请求读或写数据报包包括操作码(opcode)、文件名(由0字节终止)和模式串(由0字节终止)
文本文件的模式是netascii ,二进制文件的模式是8位的二进制组(octet)

文件数据报文包括操作码、块编号、数据(0–512字节)

ACK数据报包括操作码、块编号

ERR数据报包括操作码、差错码、差错信息(由0字节终止),用于服务器不能处理读请求或写请求
的情况。在文件传输的过程中的读和写也会导致传送这种报文,接着停止传输。

TFTP的工作过程
TFTP的工作过程很像停止等待协议,发送完一个文件块后就等待对方的确认,确认时应指明所确认的块号。发送完数据后在规定时间内收不到确认,就要重发数据PDU,发送确认PDU的一方若在规定时间内收不到下一个文件块,也要重发确认PDU。这样保证文件的传送不致因某一个数据报的丢失而告失败。

客户端需要执行的任务步骤:
1、发送RRQ或WRQ请求到服务器的69端口
2、等待一个数据包或者是ACK包。这个包将包含一个69以外的新端口号。
3、接收到数据包,就以ACK包响应,接收到ACK包,就发送下一个数据包。
4、准备处理超时错误或者是ERR包

服务器端需要执行的任务步骤:
1、监听69端口上的RRQ或者WRQ请求。
2、对每一个合法请求,创建一个套接字(也可能是一个新线程)。对RRQ请求,以初始的数据包响应,对WRQ请求,发出对第0块的确认。
3、接收到ACK包,以下一个数据包来响应,接收到数据包,以ACK包来响应。
4、准备处理超时错误或者ERR包。