TFTP简单传输协议了解

一、TFTP简介

1.定义

TFTP(Trival File Transfer Protocal,简单文件传输协议)该协议在熟知端口69上使用UDP服务。TFTP协议常用于无盘工作站或路由器从别的主机上获取引导配置文件,由于TFTP报文比较小,能够迅速复制这些文件。

2.优点

(1).TFTP协议代码所占用的内存小,其对应的软件也很小,所以能个很容易地放入到无盘工作站的ROM中。(2).TFTP支持ASCII码或二进制传送。

二、TFTP传输过程描述

以TFTP客户向TFTP服务器发送读请求为例,说明整个过程。
1.服务器使用熟知端口号69被动打开连接;
2.客户主动打开连接,它使用临时端口作为源端口而熟知端口69作为目的端口,向服务器进程发送RRQ报文;
3.服务器主动打开连接,它使用新的临时端口作为源端口,而使用收到的来自客户的临时端口作为目的端口,向TFTP客户进程发送DATA报文(2B操作码,2B数据块的块号K,512B数据);
4.客户收到服务器的报文后,发送4B的ACK(2B的操作码和2B的数据块号)给TFTP服务器,告诉它之前发送给客户的数据报已经收到;
5.重复步骤3-4,直到所有请求的数据发送完毕。

三、功能总结

(1).从上面的过程可以看出,TFTP是一种类似于停止等待协议(不是真正的停止等待协议,在停止等待协议中,接收方发送的ack表示期望收到的下一个分组,而在TFTP的ACK报文中,ack的块号表示的是本次成功收到的数据块,而不是下一个期望的下一个数据块)。TFTP服务器只有收到客户端的确认报文ACK后才会向客户端接着发送新的数据。
(2).服务器向客户端发送数据的过程中,每次都是发送512B的数据,如果客户进程收到某个DATA报文中数据部分的长度小于512B,说明这是收到的最后一个报文;如果待发送的数据的总长度正好是512的整数倍,这就意味着最后一个数据报的长度正好为512B,此时服务器进程会再次发送一个包含0字节数据的DATA报文(显然,该报文的总长度为4B=2B操作码+2B块号+0B数据);
(3).TFTP协议中,用于读文件的连接和用于写文件的连接的建立方式不同:建立读连接的时候,客户首先向服务器发送RRQ读报文,服务器收到该报文后,直接发回给该客户DATA报文,并且包含第一个数据块(块号为1)。而建立写连接的时候,客户首先先服务器发送WRQ写报文,服务器收到该报文后,则发回给客户ACK报文,使用的块号为0;当然上面两种情况如果遇到请求报文出错时,均会发回ERROR报文作为响应。

四、TFTP五种报文(重点)

TFTP五种报文分别是:RRQ,WRQ,DATA,ACK和ERROR。

包文件

RRQ/WRQ报文:

模式字段中,包含两种字符串中的一种,"netascii"表示ASCII文件,"octet"表示二进制文件;对于RRQ,客户向TFTP服务器发送读请求后,服务器返回一个块编号为1的DATA报文;而对于WRQ,客户向TFTP服务器发送写请求后,服务器返回的是块编号为1的ACK报文。总之,不管是RRQ还是WRQ,接收DATA数据的一方(读者)发送ACK确认,而发送DATA数据(写者)的只负责发送数据。

DATA报文:

由客户或服务器使用(由写者发送),用于传送数据块。所有的块都用数字顺序编码,从1开始。在所有的DATA报文中,这个块必须准确地等于512B,但最后一个块可以小于或等于512B。当发送的DATA报文中数据部分的长度小于512B后,表示DATA报文发送完毕,所以小于数据部分512B的DATA数据报可以作为文件结束的标志。特殊的情况是,当文件中的数据正好是512B的整数倍时,那么发送端必须再发送一个具有数据部分为0B的额外的DATA数据块以表示传输的结束。数据可以采用ASCII码或二进制组来传送。

ACK报文:

块号表示它所收到的块号(不是下一个期待的块号哈,这与TCP中的ACK序号不同)。特殊情况是,当客户向服务器发送一个WRQ请求后,服务器返回给客户的是一个块号为0的ACK报文,表示服务器已经准备好了接收来自客户的数据报。

EEROR报文:

ERROR报文既可以有客户发送,也可以由服务器发送,当一条连接(如读连接或写连接)不能建立或在数据传输中出现问题时使用。差错码定义了差错的类型,差错信息是一个可变字节,包含原文中的差错数据。

注意:

从上面的报文格式中可以看出,TFTP报文没有差错检验和字段,所以接收端检验数据是否出现差错的唯一方法是通过分组该TFTP数据报的UDP首部中的检验和字段。

五、流量控制

TFTP流量控制采用的是停止等待协议。TFTP使用DATA报文发送数据块,并等待ACK报文的确认。若在超时之前发送端就收到了确认,它就发送下一个块。这样,实现流量控制的方法是在发送下一个数据块之前,必须要保证收到了上一个数据块的ACK报文。
客户从服务器读文件:当客户打算向服务器读文件时,先发送RRQ报文,若无问题,服务器就直接发送块号为1的DATA报文(即第一个数据块就直接发送过去了)。
客户向服务器写文件(就是存储文件):当客户打算写文件时,先发送WRQ报文,若无问题,服务器就响应块号为0的ACK报文(不是DATA报文,因为此时服务器是数据接收方,只能发送ACK,同时注意第一个ACK的块编号是0,这样就可以通知客户,我同意了你的写请求)。客户在收到该确认后,就是用块号为1发送第一个数据块给服务器。

六、差错控制

TFTP的差错机制与其他协议不同,它是对称的,因为TFTP协议在发送端和接收端都使用了计时器。也就是说,客户和服务器两端,一方使用了DATA报文计时器(发送端),另一方使用ACK报文计时器(接收端)。若发送端丢失了数据报文,在计时器到期时发送端就重传该数据报文;若接收端丢失了ACK报文,在超时时接收端就重传该ACK报文。

差错控制常用于这四种情况:报文受损、报文丢失、确认丢失和报文重复。

报文受损:

当数据块出现差错(通过差错检验,得靠UDP首部)时,接收端能够检测出来并丢弃该报文。发送端等待确认,超时后就重传该数据报。

报文丢失:

若数据报丢失了,它就用于不能到达接收方,而确认页不会发出。发送端在超时之后,就会重传该数据报。
确认丢失:确认丢失了,则可能发生两种情况:一是接收端的计时器比发送端的计时器先到期,则接收方重传确认;若发送端的计时器先期,则发送端重传该数据。

报文重复:

接收端通过块编号可以检测出数据块的丢失。若数据块重复了,接收端就简单地将其丢弃。
sorcerer's apprentice bug
Sorcerer's apprentice buy可以翻译为“魔法师学徒的错误"(或魔术新手综合征),这个名称来自一个动画人物,这个人不经心地对一个拖把施加魔法,结果这个拖把连续地复制它自己。若分组的ACK报文没有丢失而是延迟了,则会发送这种错误。

数据分组发生这种错误的原因分析:

发送端发送一个分组出去后,会启动该分组的DATA计时器;接收方收到该分组后就会发送一个ACK数据报,并启动一个ACK计时器。发送端收到该ACK报文之前,它会按照一定的时间间隔(由发送端的计时器决定)重发该数据块,直到收到该数据块的ACK报文为止。现在假设出现这么一种情况,发送端将DATA分组发送出去后,接收方收到该数据并发回一个ACK数据报,但是ACK在路上走着,并没有丢失(只是走得很慢)。当发送端的DATA计时器到期了都还没有收到ACK分组时,发送端就会认为DATA数据包已经丢失了,就会重发该数据报。发出去没过多久却收到了之前那个数据报的ACK分组。这回发送端才发送下一个数据报,这样导致的结果就是每一个成功发送的DATA都要发送两次,而每一个成功的ACK也要发回两次。这一现象就称为“魔术新手综合症”。

七、TFTP协议与DHCP协议

TFTP协议常与DHCP协议协同工作。TFTP协议和DHCP协议共同工作来加载一些无盘机(如无盘系统,网桥,路由器等,注意:现在的某些路由器可能有硬盘了,但是以前的没有)的配置文件来进行一些初始化工作。当无盘机加点后,加了点的无盘机(通过在系统的ROM中固化TFTP软件和DHCP软件,这样加电后就可以运行这些软件)调用DHCP客户进程从远端服务器的DHCP服务器进程获取配置文件(如IP地址和引导文件的绝对路径名),然后无盘机再启动TFTP客户进程,根据前面获取的引导文件的绝对路径名去在相应的TFTP服务器中去读取该引导文件的内容。

八、参考资料

以下资料度娘都有资料:
[1] 《TCP/IP详解 卷1:协议》
[2] 《TCP/IP协议族 第4版》
[3] 《计算机网络 第5版》
AndTFTP软件 :http://www.wandoujia.com/apps/com.xiaoboalex.andtftp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,507评论 6 13
  • 20.1 引言 在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送...
    张芳涛阅读 791评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,019评论 0 8
  • 感恩!一边打扫一边听《易经》,把抹布叠成小长条儿,能得到干净的面,还不用常常清洗抹布,这是秋恺老师教的方法,很实用...
    梧桐70阅读 221评论 0 0