家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
当前位置: 电脑硬件维修培训网网络技术TFTP协议
文章内容

TFTP协议

作者:佚名  来源:本站整理  发布时间:2012-04-08 22:44:01

TFTP协议

1. 目标

TFTP是一个传输文件的简略协议,它其于UDP协议而实现,但是我们也不能断定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功效,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码情势,另一种是octet,这是8位源数据类型;最后一种mail已经不再支撑,它将返回的数据直接返回给用户而不是保存为文件。

2. 概况

任何传输起自一个读取或写入文件的恳求,这个恳求也是连接恳求。如果服务器批准此恳求,则服务器打开连接,数据以定长512字节传输。每个数据包包含一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表现传输结构。如果数据包在传输过程中丧失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与吸收者,一方传输数据吸收应答,另一方发出应答吸收数据。大部分的弊病会导致连接中断,弊病由一个弊病的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法吸收到。如果弊病包丧失,则利用超机会制。弊病重要是由下面三种情况引起的:不能满足恳求,收到的数据包内容弊病,而这种弊病不能由延时或重发解释,对需要资源的访问丧失(如硬盘满)。TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,教唆弊病的包会被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。

3. 与其它协议的接洽

因为TFTP利用UDP,而UDP利用IP,IP可以还利用其它本地通信方法。因此一个TFTP包中会有以下几段:本地媒介头,IP头,数据报头,TFTP头,剩下的就是TFTP数据了。TFTP在IP头中不指定任何数据,但是它利用UDP中的源和目标端口以及包长度域。由TFTP利用的包标记(TID)在这里被用做端口,因此TID必须介于0到65,535之间。对它的初始化我们在后面讨论。TFTP头中包含两上字节的操作码,这个码指出了包的类型下面我们看看大体上的TFTP包格式,相干的内容我们在后面的章节中进行讨论。

---------------------------------------------------
| Local Medium | Internet | Datagram | TFTP |
---------------------------------------------------
图3-1: 包头次序

4. 初始连接

初始连接时候需要发出WRQ(恳求写入远程系统)或RRQ(恳求读取远程系统),收到一个断定应答,一个断定可以写出的包或应当读取的第一块数据。通常确认包包含要确认的包的包号,每个数据包都与一个块号相对应,块号从1开始而且是持续的。因此对于写入恳求的断定是一个比较特别的情况,因此它的包的包号是0。如果收到的包是一个弊病的包,则这个恳求被拒绝。创立连接时,通信双方随机选择一个TID,因此是随机选择的,因此两次选择同一个ID的可能性就很小了。每个包包含两个TID,发送者ID和吸收者ID。这些ID用于在UDP通信时选择端口,恳求主机选择ID的方法上面已经说过了,在第一次恳求的时候它会将恳求发到TID 69,也就是服务器的69端口上。应答时,服务器利用一个选择好的TID作为源TID,并用上一个包中的TID作为目标ID进行发送。这两个被选择的ID在随后的通信中会被一直利用。下例是一个写入的例子,其中WRQ,ACK和DATA代表写入恳求,确认和数据。

1. 主机A向主机B发出WRQ,其中端口为69
2. B机向A机发出ACK,块号为0,包含B和A的TID

此时连接建立,第一个数据包以序列号1从主机开始发出。以后两台主机要保证以开始时断定的TID进行通信。如果源ID与本来断定的ID不一样,这个包会被认识为发送到了弊病的地址而被抛弃。弊病的包是被发送到正确端口的,但是包本身有弊病。假想发送方发出一个恳求,这个恳求在网络的那个设备中被复制成两个包,吸收方先后吸收到两个包。吸收方会认为为这是两个独立的恳求,会返回两个应答。当这两个应答其中之一被吸收到时,连接已经建立。第二个应答再达到时,这个包会被抛弃,而不会因为吸收到第二个应答包而导致第一个建立的连接失败。

5. TFTP包

TFTP支撑五种类型的包,我们在以上已经阐明这五种类型的包:

opcode operation
1 Read request (RRQ)
2 Write request (WRQ)
3 Data (DATA)
4 Acknowledgment (ACK)
5 Error (ERROR)

包头中包含了这个包所指定的操作码。


2 bytes    string   1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------

Figure 5-1: RRQ/WRQ包

RRQ和WRQ包(代码分辨为1和2)的格式如上所示。文件名是NETASCII码字符,以0结束。 而MODE域包含了字符串"netascii","octet"或"mail",名称不分大小写。吸收到NETASCII格式数据的主机必须将数据转换为本地格式。OCTET模式用于传输文件,这种文件在源机上以8位格式存储。假设每个机器都存在一个8位的格式,这样的假设是最一般的。比如DEC-20,这是一种36位机,我们可以假设它是4个8位外加另外4位而构成。如果机器收到OCTET格式文件,返回时必须与本来文件完整一样。在利用MAIL模式时,用户可以在FILE处利用吸收人地址,这个地址可以是用户名或用户名@主机的情势,如果是后一种情势,容许主机利用电子邮件传输此文件。如果利用MAIL类型,包必须以WRQ开始,否则它与NETASCII完整一样。我们的讨论建立在发送方和吸收方都在雷同模式的情况下,但是双方可以以不同的模式进行传输。例如一个机器可以是一台存储服务器,这样一台服务器需要将NETASCII格式转换为自己的格式。另外,我们可以假想DEC-20这种机器,它利用36位字长,用户这边可以利用特别的机制一次读取36位,而服务器却可以仍然利用8位格式。在这两种情况下,我们看到了两台机器利用不同格式的情况。可以在两台主机间定义其它的传输方法,但是定义要警惕,因为这种传输方法不为人知,而且也没有权威机构为其指定名称或定义它的模式。

2 bytes   2 bytes   n bytes
----------------------------------
| Opcode | Block # | Data |
----------------------------------
Figure 5-2: DATA包

数据在数据包中传输,其格式如上图所示。数据包的OP码为3,它还包含有一个数据块号和数据。数据块号域从1开始编码,每个数据块加1,这样吸收方可以断定这个包是新数据还是已经吸收过的数据。数据域从0字节到512字节。如果数据域是512字节则它不是最后一个包,如果小于512字节则表现这个包是最后一个包。除了ACK和用于中断的包外,其它的包均得到确认。发出新的数据包等于确认上次的包。WRQ和DATA包由ACK或ERROR数据包确认,而RRQ数据包由DATA或ERROR数据包确认。下图即是一个ACK包,操作码为4。其中的包号为要确认的数据包的包号。

2 bytes 2 bytes
---------------------
| Opcode | Block # |
---------------------
Figure 5-3: ACK包

WRQ数据包被ACK数据包确认,WRQ数据包的包号为0。

2 bytes       2 bytes string 1 byte
-----------------------------------------
| Opcode | ErrorCode | ErrMsg | 0 |
-----------------------------------------
Figure 5-4: ERROR包

一个ERROR包,它的操作码是5,它的格式如上所示。此包可以被其它任何类型的包确认。弊病码指定弊病的类型。弊病的值和弊病的意义在附录中。弊病信息是供程序员利用的。

6. 正常终止

传输的结束由DATA数据标记,其包含0-511个字符。这个包可以被其它数据包确认。吸收方在发出对最后数据包的确认后可以断开连接,当然,适当的等候是比较好的,如果最后的断定包丧失可以再次传输。如果发出确认后仍然收到最后数据包,可以断定最后的确认丧失。发送最后一个DATA包的主机必须等候对此包的确认或超时。如果响应是ACK,传输完成。如果发送方超时并不筹备重新发送并且吸收方有问题或网络有问题时,发送也正常结束。当然实现时也可以是非正常结束,但无论如何连接都将被关闭。

7. 早终结

如果恳求不能被满足,或者在传输中产生弊病,需要发送ERROR包。这仅是一种传输友爱的方法,这种包不会被确认也不会被重新传输,因此这种包可能永远不会被吸收到。因此需要用超时来侦测弊病。

I. 附录

包头的次序

2 bytes
----------------------------------------------------------
| Local Medium | Internet | Datagram | TFTP Opcode |
----------------------------------------------------------

TFTP格式

Type Op # 没有包头的格式

2 bytes          string 1 byte string 1 byte
-----------------------------------------------
RRQ/ | 01/02 | Filename | 0 | Mode | 0 |
WRQ -----------------------------------------------

2 bytes      2 bytes n bytes
---------------------------------
DATA | 03 | Block # | Data |
---------------------------------

2 bytes    2 bytes
-------------------
ACK | 04 | Block # |
--------------------

2 bytes       2 bytes    string 1 byte
----------------------------------------
ERROR | 05 | ErrorCode | ErrMsg | 0 |
----------------------------------------

读文件的初始连接

1. 主机A发RRQ到A,包含源=A的ID和目标=69
2. 主机B发送DATA,其中包号=1,这个包被传送到A,源=B的ID,目标=A的ID

弊病码

Value Meaning

0 未定义,请参阅弊病信息(如果提示这种信息的话)
1 文件未找到
2 访问非法
3 磁盘满或超过火配的配额
4 非法的TFTP操作
5 未知的传输ID
6 文件已经存在
7 没有类似的用户

Internet用户数据报头

(TFTP不必定非要在UDP上实现。)

Format

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

域的值

Source Port 由传输发起方选择
Dest. Port 由目标地选择(如果是RRQ或WRQ,其值为69)
Length 包含UDP包头的包长度
Checksum 校验码,如果是0,则未利用校验

注意:TFTP将传输标记TID传送给UDP作为源和目标端口

安全问题

因为TFTP没有安全把持机制,因此安全问题应当多加考虑。通常TFTP容许下载数据而不容许上传数据。

在线报名
友情链接