上传文件指的是客户端将本地上的文件上传到 TFTP 服务器上。下面介绍客户端如何进行文件上传,以及上传时所涉及的各类型数据包。
客户端会向 TFTP 服务器发送请求写入(WRQ)数据包,指明要写入的文件。如果 TFTP 服务器允许该文件的写入,就返回一个 ACK 确认包,该包的编号为 0。客户端收到服务器的确认包以后,就开始向服务器写入文件。
文件数据以定长 512 字节进行传输,与 RRQ 包的传输方式一样,传输的每一个文件数据包都会得到服务器返回的确认包,并且数据包的数据编号也是从 1 开始。其工作流程如图所示。
上图中显示了客户端向 TFTP 服务器上传文件信息的工作流程,每个步骤含义介绍如下:
为了能够更清晰地了解 TFTP 上传文件的整个过程,下面演示该操作。
在 netwox 工具中,编号为 166 的模块可以将客户端的文件上传到 TFTP 服务器上。其语法格式如下:
参数说明:
【实例】已知 TFTP 服务器的 IP 地址为 192.168.59.135,本地文件 Test-keep.txt 大小为 1226 字节。使用 netwox 工具将该文件上传到 TFTP 服务器上。具体步骤如下:
1) 上传文件,上传后的文件命名为 keep.txt,执行命令如下:
执行命令后没有任何输出信息,但是会成功将文件上传到 TFTP 服务器上。
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)包,如图所示。
通过包的基本信息可以看到,源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.133,Info 列中的信息为 Acknowledgement。
在报文字段信息中可以看到,Block 值为 0,表示该确认包的数据编码为 0。
4) 第 6 个数据包为客户端向服务器上传文件时,发送数据信息的第一个 DATA 包,如图所示。
通过包的基本信息可以看到,源 IP 地址为 192.168.59.133,目标 IP 地址为 192.168.59.135,Info 列中的信息为 Data Packet。
在报文字段信息中可以看到,此时数据编码为 1,传输的数据大小为 512 字节。
5) 第 7 个数据包为服务器返回给客户端的确认包,是对客户端发来的 DATA 包的确认,如图所示。
通过包的基本信息可以看到,源 IP 地址为 192.168.59.135,目标 IP 地址为 192.168.59.133,Info 列中的信息为 Acknowledgement。
在报文字段中可以看到,数据编码为 1,表示该包是第 1 个 DATA 包的确认包。
6) 第 8 个数据包为客户端第 2 次给服务器发送的 DATA 包,如图所示。
通过包的基本信息可以看到,源 IP 地址为 192.168.59.133,目标 IP 地址为 192.168.59.135,Info 列中的信息为 Data Packet。
在报文字段信息中,数据编码为 2,说明这是发送的第 2 个 DATA 包,数据大小为 512 字节。第 9 个数据包为服务器返回的确认包。
7) 第 10 个数据包为客户端向服务器发送的最后一个 DATA 包,如图所示。
该包的 Info 信息中可以看到(last)字样,表示这是上传文件时发送文件信息的最后一个 DATA 包,在报文字段中可以看到,该 DATA 包的大小为 202。
第 11 个数据包为服务器对客户端发送的最后一个 DATA 包的确认包。此时完成了上传文件的整个过程。