1、工作流程

客户端会向TFTP服务器发送请求写入(WRQ)数据包,指明要写入的文件。如果TFTP服务器允许该文件的写入,就返回一个ACK确认包,该包的编号为0。客户端收到服务器的确认包以后,就开始向服务器写入文件。文件数据以定长512字节进行传输,与RRQ包的传输方式一样,传输的每一个文件数据包都会得到服务器返回的确认包,并且数据包的数据编号也是从1开始。其工作流程如图1所示。

3CDaemon TFTP上传工具_tftp服务器

图1  工作流程

图1中显示了客户端向TFTP服务器上传文件信息的工作流程,每个步骤含义介绍如下:

1)客户端向TFTP服务器发送写入请求(WRQ)。

2)服务器收到客户端的WRQ请求后,同意该请求,返回ACK确认包。这里的确认包的数据编号为0。

3)客户端收到请求的确认包以后,得知服务器已经同意文件上传。客户端开始进行文件上传,向服务器发送文件信息数据。首先发送第1个DATA包,大小为512字节,此时包的数据编号为1,因为步骤2)中已经使用了数据编号0。

4)服务器收到客户端发来的数据编号为1的DATA包,并进行确认,向客户端发送数据编号为1的ACK包。

5)客户端收到第1个DATA包返回的ACK包后,继续向服务器发送第2个DATA包,大小为512字节,此时的数据编号为2。

6)服务器对第2个DATA包进行确认,向客户端发送数据编号为2的ACK包。

7)客户端收到第2个DATA包返回的ACK包后,继续向服务器发送第3个DATA包,大小小于512字节,此时的数据编号为3。

8)服务器收到发来第3个的DATA包,发现包大小小于512字节,就认为客户端已经将文件的数据信息全部发送给了自己(服务器),表示上传完成。服务器对最后的DATA数据包进行确认,向客户端发送数据编号为3的ACK包。

2、构建WRQ包

为了能够更清晰地了解TFTP上传文件的整个过程,下面演示该操作。在netwox工具中,编号为166的模块可以将客户端的文件上传到TFTP服务器上。其语法格式如下:

netwox 166 -i IP -f file1 -F file2

其中,-i选项指定TFTP服务器的IP地址;-f选项指定本地的文件名称;-F选项指定本地文件上传到服务器后的文件名称。

已知TFTP服务器的IP地址为192.168.59.135,本地文件Test-keep.txt大小为1226字节。使用netwox工具将该文件上传到TFTP服务器上。具体步骤如下:

1)上传文件,上传后的文件命名为keep.txt,执行命令如下:

root@daxueba:~# netwox 166 -i 192.168.59.135 -f Test-keep.txt -F keep.txt

执行命令后没有任何输出信息,但是会成功将文件上传到TFTP服务器上。

2)抓包,并查看上传文件整个过程产生的数据包,如图2所示。

3CDaemon TFTP上传工具_客户端_02

图2  文件上传

图2中,第4~11个数据包为上传文件整个过程的数据包。第4个数据包为客户端构建的WRQ请求包。通过包的基本信息可以看到,源IP地址为192.168.59.133,目标IP地址为192.168.59.135,Info列中的信息为Write Request。在Trivial File Transfer Protocol部分显示了报文格式,含义如下:

Trivial File Transfer Protocol

Opcode: Write Request (2)  #操作码,这里值为2,表示是一个WRQ请求

DESTINATION File: keep.txt  #上传后的文件名

Type: octet  #数据格式为octet

3)第5个数据包是服务器返回的确认(ACK)包,如图3所示。通过包的基本信息可以看到,源IP地址为192.168.59.135,目标IP地址为192.168.59.133,Info列中的信息为Acknowledgement。在报文字段信息中可以看到,Block值为0,表示该确认包的数据编码为0。

3CDaemon TFTP上传工具_客户端_03

图3  ACK包

4)第6个数据包为客户端向服务器上传文件时,发送数据信息的第一个DATA包,如图4所示。通过包的基本信息可以看到,源IP地址为192.168.59.133,目标IP地址为192.168.59.135,Info列中的信息为Data Packet。在报文字段信息中可以看到,此时数据编码为1,传输的数据大小为512字节。

3CDaemon TFTP上传工具_tftp服务器_04

图4  第1个DATA包

5)第7个数据包为服务器返回给客户端的确认包,是对客户端发来的DATA包的确认,如图5所示。通过包的基本信息可以看到,源IP地址为192.168.59.135,目标IP地址为192.168.59.133,Info列中的信息为Acknowledgement。在报文字段中可以看到,数据编码为1,表示该包是第1个DATA包的确认包。

3CDaemon TFTP上传工具_3CDaemon TFTP上传工具_05

图5  确认包

6)第8个数据包为客户端第2次给服务器发送的DATA包,如图6所示。通过包的基本信息可以看到,源IP地址为192.168.59.133,目标IP地址为192.168.59.135,Info列中的信息为Data Packet。在报文字段信息中,数据编码为2,说明这是发送的第2个DATA包,数据大小为512字节。第9个数据包为服务器返回的确认包。

3CDaemon TFTP上传工具_3CDaemon TFTP上传工具_06

图6  第2个DATA包

7)第10个数据包为客户端向服务器发送的最后一个DATA包,如图7所示。该包的Info信息中可以看到(last)字样,表示这是上传文件时发送文件信息的最后一个DATA包,在报文字段中可以看到,该DATA包的大小为202。第11个数据包为服务器对客户端发送的最后一个DATA包的确认包。此时完成了上传文件的整个过程。

3CDaemon TFTP上传工具_服务器 txt文件_07

图7  最后一个DATA包