新闻资讯
看你所看,想你所想

tftp

tftp

tftp

TFTP(Trivial File Transfer Protocol,简单档案传输协定)是TCP/IP协定族中的一个用来在客户机与伺服器之间进行简单档案传输的协定,提供不複杂、开销不大的档案传输服务。连线埠号为69。

基本介绍

  • 中文名:简单档案传送协定
  • 外文名:TFTP(Trivial File Transfer Protocol)
  • 使用的数据报:UDP数据报
  • 简称:TFTP

目的

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

概况

任何传输起自一个读取或写入档案的请求,这个请求也是连线请求。如果伺服器批准此请求,则伺服器打开连线,数据以定长512位元组传输。每个数据包包括一块数据,伺服器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512位元组,则表示传输结束。如果数据包在传输过程中丢失,发出方会在逾时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连线中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新传送,因此另一方无法接收到。如果错误包丢失,则使用逾时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬碟满)。TFTP只在一种情况下不中断连线,这种情况是源连线埠不正确,在这种情况下,指示错误的包会被传送到源机。这个协定限制很多,这些都是为了实现起来比较方便而进行的。

特点

因为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: 包头次序
TFTP不具备通常的FTP的许多功能,它只能从档案伺服器上获得或写入档案,没有列出目录的功能,也不能对用户进行身份鉴别,它传输8位数据。
但是TFTP也有着它自身的两个优点。
  1. TFTP可用于UDP环境;比如当需要将程式或者档案同时向许多机器下载时就往往需要使用到TFTP协定。
  2. TFTP代码所占的记忆体较小,这对于较小的计算机或者某些特殊用途的设备来说是很重要的,这些设备不需要硬碟,只需要固化了TFTP、UDP和IP的小容量唯读存储器即可。当电源接通后,设备执行唯读存储器中的代码,在网路上广播一个TFTP请求。网路上的TFTP伺服器就传送回响,其中包括可执行二进制程式。设备收到此档案后将其放入记忆体,然后开始运行程式。这种方式增加了灵活性,也减少了开销。

初始连线

初始连线时候需要发出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 byte
| 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,它的格式如上所示。此包可以被其它任何类型的包确认。错误码指定错误的类型。错误的值和错误的意义在附录中。错误信息是供程式设计师使用的。

正常终止

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

早终结

如果请求不能被满足,或者在传输中发生错误,需要传送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允许下载数据而不允许上传数据。

相关协定

TFTP协定的优势
儘管与FTP相比TFTP的功能要弱得多,但是TFTP具有两个优点:
1)TFTP能够用于那些有UDP而无TCP的环境;
2)TFTP代码所占的记忆体要比FTP小。
儘管这两个优点对于普通计算机来说并不重要,但是对于那些不具备磁碟来存储系统软体的自举硬体设备来说TFTP特别有用。
TFTP协定与FTP协定的相同点
TFTP协定的作用和我们经常使用的FTP大致相同,都是用于档案传输,可以实现网路中两台计算机之间的档案上传与下载。可以将TFTP协定看作是FTP协定的简化版本。
TFTP协定与FTP协定的不同点
1)TFTP协定不需要验证客户端的许可权,FTP需要进行客户端验证;
2)TFTP协定一般多用于区域网路以及远程UNIX计算机中,而常见的FTP协定则多用于网际网路中;
3)FTP客户与伺服器间的通信使用TCP,而TFTP客户与伺服器间的通信使用的是UDP;
4)TFTP只支持档案传输。也就是说,TFTP不支持互动,而且没有一个庞大的命令集。最为重要的是,TFTP不允许用户列出目录内容或者与伺服器协商来决定哪些是可得到的档案。

内部命令

FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX作业系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活套用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。
FTP的命令行格式为:ftp-v-d-i-n-g[主机名],其中
-v显示远程伺服器的所有回响信息;
-n限制ftp的自动登录,即不使用;
.netrc档案;
-d使用调试方式;
-g取消全局档案名称。
ftp使用的内部命令如下(中括弧表示可选项):
1.![cmd[args>:在本地机中执行互动shell,exit回到ftp环境,如:!ls*
.zip.
2.$macro-ame[args]:执行宏定义macro-name.
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.appendlocal-file[remote-file]:将本地档案追加到远程系统主机,若未指定远程系统档案名称,则使用本地档案名称。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制档案传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机档案名称中的大写转为小写字母。
10.cdremote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmodmodefile-name:将远程主机档案file-name的存取方式设定为mo
de,如:chmod777a.out。
13.close:中断与远程伺服器的ftp会话(与open对应)。
14. cr:使用asscii方式传输档案时,将回车换行转换为回行。
15.deleteremote-file:删除远程主机档案。
16.debug[debug-value]:设定调试方式,显示传送至远程主机的每条命令,如:debup3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地档案local-file。
18.disconnection:同close。
19.formformat:将档案传输方式设定为format,预设为file方式。
20.getremote-file[local-file]:将远程主机的档案remote-file传至本地硬碟的local-file。
21.glob:设定mdelete,mget,mput的档案名称扩展,预设时不扩展档案名称,同命令行的-g参数。
22.hash:每传输1024位元组,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:helpget。
24.idle[seconds]:将远程伺服器的休眠计时器设为[seconds]秒。
25.image:设定二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27. ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地档案local-file。
28.macdefmacro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机档案。
30.mdirremote-fileslocal-file:与dir类似,但可指定多个远程档案,如:mdir*.o.*.zipoutfile。
31.mgetremote-files:传输多个远程档案。
32.mkdirdir-name:在远程主机中建一目录。
33.mlsremote-filelocal-file:同nlist,但可指定多个档案名称。
34.mode[modename]:将档案传输方式设定为modename,预设为stream方式。
35.modtimefile-name:显示远程主机档案的最后修改时间。
36.mputlocal-file:将多个档案传输至远程主机。
37.newerfile-name:如果远程机中file-name的修改时间比本地硬碟同名
档案的时间更近,则重传该档案。
38.nlist[remote-dir][local-file]:显示远程主机目录的档案清单,并存入本地硬碟的local-file。
39.nmap[inpatternoutpattern]:设定档案名称映射机制,使得档案传输时,档案中的某些字元相互转换,如:nmap$1.$2.$3[$1,$2].[$2,$3],则传输档案a1.a2.a3时,档案名称变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars>:设定档案名称字元的翻译机制,如ntrans 1R,则档案名称LLL将变为RRR。
41.openhost[port]:建立指定ftp伺服器连线,可指定连线连线埠。
42.passive:进入被动传输方式。
43.prompt:设定多个档案传输时的互动提示。
44.proxyftp-cmd:在次要控制连线中,执行一条ftp命令,该命令允许连线两个ftp伺服器,以在两个伺服器间传输档案。第一条ftp命令必须为open,以首先建立两个伺服器间的连线。
45.putlocal-file[remote-file]:将本地档案local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quotearg1,arg2…:将参数逐字发至远程ftp伺服器,如:quotesyst.
49.recvremote-file[local-file]:同get。
50.regetremote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定档案名称,则显示远程主机的状态,否则显示档案状态。
53.rename[from][to]:更改远程主机档案名称。
54.reset:清除回答伫列。
55.restartmarker:从指定的标誌marker处,重新开始get或put,如:restart130。
56.rmdirdir-name:删除远程主机目录。
57.runique:设定档案名称唯一性存储,若档案存在,则在原档案后加后缀..1,.2等。
58.sendlocal-file[remote-file]:同put。
59.sendport:设定PORT命令的使用。
60.sitearg1,arg2…:将参数作为SITE命令逐字传送至远程ftp主机。
61.sizefile-name:显示远程主机档案大小,如:siteidle7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将档案传输结构设定为struct-name,预设时使用stream结构。
64.sunique:将远程主机档案名称存储设定为唯一(与runique对应)。
65.system:显示远程主机的作业系统类型。
66.tenex:将档案传输类型设定为TENEX机的所需的类型。
67.tick:设定传输时的位元组计数器。
68.trace:设定包跟蹤。
69.type[type-name]:设定档案传输类型为type-name,预设为ascii,如:typebinary,设定二进制传输方式。
70.umask[newmask]:将远程伺服器的预设umask设定为newmask,如:umask3。
71.useruser-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令。
72.verbose:同命令行的-v参数,即设定详尽报告方式,ftp伺服器的所有回响都将显示给用户,预设为on.

转载请注明出处海之美文 » tftp

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com