传输协议"/>
TFTP文件传输协议
TFTP是一个简单的文件传输协议,默认使用UDP,服务器开放69端口。
关于协议的细节网上可以找到,在此不再赘述。
本文用一个简单的通信实例来分析通信协议。
Windows 系统自带TFTP客户端,服务器可以下载tftp32,下面是下载连接。phjounin / tftpd64 / Downloads — Bitbucket/
打开cmd.exe输入以下命令:
tftp -i 192.168.1.100 PUT D:\123.txt 123.bin
这条命令会把本地的D:\123.txt文件上传到服务器,在服务器生成的文件名为 123.bin。
并没有要求上传的文件名必须一样,可以在上传时对文件改名。
我们用wireshark进行抓包,看看它们是怎么通信的。
下面是所有的通信数据,文件内容用XX替换了。
客户端发送:
00 02 31 32 33 2e 62 69 6e 00 6f 63 74 65 74 00服务器响应:
00 04 00 00客户端发送:
00 03 00 01 XX ... XX (文件数据长度512字节)服务器响应:
00 04 00 01客户端发送:
00 03 00 02 XX ... XX(文件数据长度182字节)服务器响应:
00 04 00 02到此传输完成.
这个测试文件总长度694字节,第1次传输512,第2次传输182,就传输完成了。
对每一条数据进行解释:
第1次通信是建立握手,告诉服务器准备上传文件,并告知文件名和传输方式。
客户端发送:00 02 31 32 33 2e 62 69 6e 00 6f 63 74 65 74 00
00 02: (WRQ请求)
31 32 33 2e 62 69 6e 00: (字符串:文件名123.bin)
6f 63 74 65 74 00: (字符串:octet表示二进制方式)服务器返回:00 04 00 00
00 04: (ACK)
00 00: (包序号0000,表示服务器准备好接收文件了)
第2次通信是上传文件数据。
客户端发送:00 03 00 01 XX ... XX
00 03:(DATA上传)
00 01:(包序号0001)
XX XX:(文件内容,长度512字节)服务器返回:00 04 00 01
00 04:(ACK)
00 01:(包序号0001,与发送的包序号一致)
第3次通信是上传文件数据的最后一包。
客户端发送:00 03 00 02 XX ... XX
00 03:(DATA数据)
00 02:(包序号0002,是上一次包序号加1)
XX XX:(文件数据,长度不足512字节,表示这是最后一包)服务器返回:00 04 00 02
00 04:(ACK)
00 02:(包序号0002,与发送包序号一致)
以上就是TFTP正常传输一个文件的通信流程。
服务器在接收文件时,有可能给出错误响应,此时客户端必须中止此次文件传输。
错误响应:
00 05 XX YY ... YY 00
00 05: (NAK)
XX : (错误码0-7)
YY YY: (字符串描述错误信息)错误码:
00=未定义错误
01=文件未找到
02=非法访问
03=磁盘已满
04=非法操作
05=未知传输ID
06=文件已存在
07=没有类似的用户
关于重传:
客户端发送请求后,服务器如果没有响应或者响应的包序号不正确,客户端可以重发上次请求,直到通信成功。
更多推荐
TFTP文件传输协议
发布评论