700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > TFTP 简单文件传输协议

TFTP 简单文件传输协议

时间:2019-11-05 07:44:49

相关推荐

TFTP 简单文件传输协议

1 协议介绍:

TFTP (TrivialFileTransferProtocol,简单文件传输协议也称小型文件传输协议)

是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)。

小型文件传输协议非常简单,透过少量存储器就能轻松实现——这在当时是很重要的考虑因素。所以TFTP被用于引导计算机,例如没有大容量存储器的路由器。现在它仍然被用于在一个网络上主机之间传输小文件,例如从一台网络主机或服务器引导一个远程X Window System终端或其他的瘦客户端。

小型文件传输协议部分基于更早期的文件传输协议,文件传输协议是通用分组协议(PUP Protocol)中的一部分。在TCP/IP协议组早期的工作中,TFTP往往是在一个新的主机类型上首先完成的协议——因为其非常的简单。

最早的小型文件传输协议版本是在RFC 1350之前,显示出相当糟糕的协议缺陷,发现的时候被称为魔术新手症候群。

详细信息:

使用UDP(端口69)作为其传输协议(不像FTP使用TCP端口21)。不能列出目录内容。无验证或加密机制。被用于在远程服务器上读取或写入文件。支持三种不同的传输模式:"netascii","octet"和"mail",前两种符合FTP协议中的"ASCII"和"image(binary)"模式;第三种从来很少使用,当前已经废弃。

因为小型文件传输协议使用UDP协议,就必须自己支持传输和会话的控制。每个通过TFTP传输的文件构成了一个独立的交换。此传输表现为步锁,任何时间网络上仅仅传递一个包(一个数据块或一个首部确认)。由于缺少窗口切换技术,TFTP在有很多潜在连接的情况下仅提供较低的吞吐量。

由于小型文件传输协议缺少安全性,在开放式因特网上传输非常危险,所以普遍仅仅用于私人本地网络。当前TFTP常用于PXE无盘启动,网络设备的设置等。

选项协商后来加到协议中(RFC 2347),已经被协定的选项能对协议的操作进行轻微的更改(特别是更大分块尺寸的使用使得吞吐量略有提高),但协议大体上还是保持不变的。

2 传输模式

数据的存储有不同的格式,磁盘中相同的一块数据,通过不同的存储协议解析,得到的内容是完全不同的,如:磁盘中的一个字节0x65,按照ASCII解析就是字母A,按照数据本身解析就是0x65这个数,两种解析的方式显示的内容完全不同。因此文件在传输的过程中也需要指明数据的表示方式,即传输模式。TFTP协议的传输模式如下所示:

3 协议格式

TFTP基于UDP协议实现,而UDP使用IP。因此一个TFTP包中会有如图1所示的以下几段:本地媒介头,IP头,UDP数据报头,TFTP数据报。TFTP在IP头中不指定任何数据,但是它使用UDP中的源和目标端口以及包长度域。由TFTP使用的包标记(TID)在这里被用做端口,因此TID必须介于0到65,535之间。图中显示了5种TFTP报文格式,每个报文格式TFTP报文的头两个字节表示操作码。之后对于不同的报文格式存在差异。

TFTP共定义了五种类型的包格式,格式的区分由包数据前两个字节的Opcode字段区分,分别是:

读文件请求包:Read request,简写为RRQ,对应Opcode字段值为1写文件请求包:Write requst,简写为WRQ,对应Opcode字段值为2文件数据包:Data,简写为DATA,对应Opcode字段值为3回应包:Acknowledgement,简写为ACK,对应Opcode字段值为4错误信息包:Error,简写为ERROR,对应Opcode字段值为5

3.1 读写文件请求包格式

3.1.1 opc(opcode)

功能码,1代表读请求(RRQ),2代表写请求(WRQ)。

RRQ(读请求,Readrequest)报文由客户使用,用来建立一条从服务器读数据的连接。

WRQ(写请求,Writerequst)报文由客户使用,用来建立一条把数据写到服务器的连接,它的格式与RRQ相同。

3.1.2 filename

Filename(文件名字段)说明客户要读或写的位于服务器上的文件,文件名是netascii码字符,以字符串结束符0结束。

3.1.3 mode

Mode(模式字段)是一个ASCII码串netascii或octet(大小写可任意组合),表示文件传输的方式,同样以字符串结束符0结尾。

netascii表示数据是以成行的ASCII码字符组成,以两个字节—回车字符后跟换行字符(称为CR / LF)作为行结束符。

octet模式用于传输文件,这种文件在源机上以8位格式存储。

3.1.4 opt1

第一个选项,使用区分大小写的ascii字符表示,以字符串结束符0结尾。

3.1.5 val1

与第一个选项相关的值,使用区分大小写的ascii字符表示,字符串结束符0结尾。

3.1.6 optN,valN

最后一个选项/值。均是使用区分大小写的ascii字符表示,字符串结束符0结尾。

注:读写请求数据包的最大长度为512字节。

3.1.7 常用的选项

blksize协商数据块大小,默认数据块为512字节,可以协商的值为8~65464字节(RFC23480)。

timeout超时间隔,可以协商的值为1~255秒(RFC2349)。

tsize传输文件的大小(RFC2349)。

3.2 数据包格式

DATA数据包的opcode为3,它还包括有一个数据块号和数据。

数据块号域从1开始编码,每个数据块加1,这样接收方可以确定这个包是新数据还是已经接收过的数据。

数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表示这个包是最后一个包。如果最后一个包正好为512字节,则再发送一个0字节的包用于表示结束。

扩展协议中,dada域的数据长度可以通过blksize选项协商,从8~65464均可以。如果数据小于协商值,说明这是最后一包数据。

3.3 ACK包格式

ACK包(Acknowledgement)用于确认数据包已收到,和接收到的数据包数据块号相同。ACK包的操作码为4。

当接收方收到一个数据包后,会向发送方发送一个ACK包;而发送方则会在收到一个ACK包后继续发送下一个包。若发送完未能收到ACK包,则会使用超时机制,重新发送刚才的数据包。除了ACK和用于中断的包外,其它的包均需得到确认。发出新的数据包等于确认上次的包。WRQ和DATA包由ACK或ERROR数据包确认,而RRQ数据包由DATA或ERROR数据包确认。写请求的ACK应答数据块号为0。

3.4 错误包格式

用于在失败的情况下回复对端

一个ERROR包的操作码是5。此包可以被其它任何类型的包确认,错误码指定错误的类型。它用于服务器不能处理读请求或写请求的情况。在文件传输过程中的读和写差错也会导致传送这种报文,接着停止传输。差错编号字段给出一个数字的差错码,跟着是一个ASCII表示的差错报文字段,可能包含额外的操作系统说明的信息。

错误的值和错误的意义如下:

0未定义Notdefined,seeerrormessage(ifany).

1文件找不到Filenotfound.

2拒绝访问Accessviolation.

3磁盘满了或者超出了可分配空间Diskfullorallocationexceeded.

4非法TFTP操作IllegalTFTPoperation.

5传输ID未知UnknowntransferID.

6文件不存在Filealreadyexists.

7没有该用户Nosuchuser.

3.5 OACK包格式

3.5.1 opc(opcode)

命令码为6,表示这是选项应答。

3.5.2 opt1

第一个选项应答,从请求帧中直接拷贝。

3.5.3 val1

与第一个选项相关的应答值。

3.5.4 optN,valN

最后一个选项/应答值应答对。

4 TFTP协议的缺陷

传输效率低对于超时机制没有明确说明每包长度固定为512字节,不灵活

5 参考

基于W5500的嵌入式TFTP服务器实现

//09/01/%e5%9f%ba%e4%ba%8ew5500%e7%9a%84%e5%b5%8c%e5%85%a5%e5%bc%8ftftp%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%ae%9e%e7%8e%b0/

文件传输协议---TFTP

/chusiyong/p/11389442.html

TFTP协议

/mjLlm/article/details/82950639

TFTP wiki en (需要*楼*梯*)

/wiki/Trivial_File_Transfer_Protocol

TFTP wiki zh (需要*楼*梯*)

/wiki/%E5%B0%8F%E5%9E%8B%E6%96%87%E4%BB%B6%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。