TFTP:简单文本传输协议的数据包格式解析

本节我们看看TFTP数据包的组装方式,为我们代码实现该协议奠定基础。TFTP协议总共有5中不同数据包,分别对应读请求,写请求,数据块,接收回应(ACK),以及错误。前两种数据包格式一样,只不过某些值域设置有差别,剩下的三种数据包格式各不相同。但无论哪一种数据包,他们都包含一个值域叫操作码,用来定义该数据包属于那种类型。

我们先看读请求和写请求数据包的格式,首先是2字节表示操作码,它用来表示当前数据包的类型,取值1表示该数据包是个读请求,2表示该数据包是;接下来是可变长字段,它用来表示要读取或上传的文件名,它使用ASCII码并以0表示结尾;第三个字段叫Mode,也是可变长字段,用来表示传输文件的数据类型,如果传输的是字符串文件,那么它填写字符串”netascii”,如果传输的是二进制文件,那么它填写字符串”octet”,这些字符串都以0结尾,其结构用下图表示:

我们看看对应的wireshak抓包

接着我们看看传输数据块的数据包,它头2字节也是操作码,取值3用于表示数据包用于数据块传输,接下来是2字节,用于表示数据块编号,最后是可变长字段Data,用于装载数据块,该数据包的格式如下:

我们看看对应的wireshark抓包:

然后是应答数据包,它开始2字节也是操作码,取值4,接下来2自己拥有表示接收到的数据块编号,相应结构如下图:

最后一个是错误数据报,它首2字节表示操作码,取值5;接下来2字节表示错误码,0表示未知错误,1表示文件不存在,2表示权限不足,3表示磁盘已满,具体的错误码我们在实践时再具体分析;接下来是可变长字段,它用字符串的形式描述具体错误,该数据包的结构如下图:

它对应的wireshark抓包如下:

接下来我们看看如何代码实现TFTP协议。

原文发布于微信公众号 - Coding迪斯尼(gh_c9f933e7765d)

原文发表时间:2019-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券