传送格式
TFTP( Trivial File Transfer Protocol)
即简单文件传送协议. 它只使用
几种报文格式,传输层使用的UDP, 是一种停止等待协议.
注: 停止等待协议, 简单理解就是有ACK确认
TFTP有两种请求: 读请求RRQ, 写请求WRQ
5种TFTP报文格式(操作码为1和2的报文使用相同的格式) 如下:

由图可知:
- T F T P报文的头两个字节表示操作码。对于读请求和写请求( W R Q),文件名字段说明客户要读或写的位于服务器上的文件
- 这个文件字段以0字节作为结束
- 模式字段是一个
ASCII
串n e t a s c i i
或o c t e t
(可大小写任意组合),同样以0字节结束 - netascii表示数据是以成行的ASCII码字符组成,以两个字节—回车字符后跟换行字符(称为C R / L F)作为行结束符, 这两个行结束字符在这种格式和本地主机使用的行定界符之间进行转化。
注: 平常的回车键的操作, 实际产生两个字符: 回车, 换行.
服务端与客户端交互, 以读一个文件作为例:
- 每个数据分组包含一个块编号字段,它以后要在确认分组中使用
- T F T P客户需要发送一个读请求说明要读的文件名和文件模式( m o d e )。如果这个文件能被这个客户读取, T F T P服务器就返回一个块编号为1的数据分组
- 客户端又发送一个块编号为1的A C K
- 服务端随后发送块编号为2的数据
- 客户端发回块编号为2的A C K
- 重复这个过程直到这个文件传送完
注: 除了最后一个数据分组可含有不足5 1 2字节的数据,其他每个数据分组均含有5 1 2字节的数据。当T F T P客户收到一个不足5 1 2字节的数据分组,就知道它收到最后一个数据分组。
在写请求的情况下,TFTP 客户发送W R Q指明文件名和模式。如果该文件能被该客户写,TFTP 服务器就返回块编号为0的A C K包。该客户就将文件的头5 1 2字节以块编号为1发出。服务器则返回块编号为1的A C K。
在TFTP通信过程中: 服务器进程的端口会行发生变化. T F T P协议需要客户进程向服务器进程的U D P熟知端口(6 9)发送第一个分组(R R Q或W R Q)。之后服务器进程便向服务器主机申请一个尚未使用的端口, 服务器进程使用这个端口来进行请求客户进程与服务器进程间的其他数据交换。客户进程的端口号没有变化.
服务器进程端口变化的原因是服务器进程不能占用这个熟知端口来完成需一些时间的文件传输(可能是几十秒甚至数分钟)。相反,在传输当前文件的过程中,这个熟知端口要留出来供其他的T F T P客户进程发送它们的请求。
如果一个服务器进程使用熟知端口来进行文件传输,那么在文件传输期间,它要么拒绝任何来自其他客户的请求,要么一个服务器进程在同一端口( 69)同时对多个客户进程进行多个文件传输。最简单的办法是让服务器进程在收到R R Q或W R Q后,改用新的端口。当然,客户进程在收到第一个数据分组后必须探测到这个新的端口,并将之后的所有确认发送到那个新的端口。
安全性
注意在T F T P分组(图1 5 - 1)中并不提供用户名和口令。这是T F T P的一个特征(即“安全
漏洞”)。由于T F T P是设计用于系统引导进程,它不可能提供用户名和口令。
T F T P的这一特性被许多解密高手用于获取U n i x口令文件的复制,然后来猜测用户口令。
为防止这种类型的访问,目前大多数T F T P服务器提供了一个选项来限制只能访问特定目录下的文件( U n i x系统中通常是/ t f t p b o o t)。这个目录中只包含无盘系统进行系统引导时所需的文件。
Mac中的目录: /private/tftpboot

对其他的安全性, Unix系统下的TFTP服务器通常将它的用户ID和组ID设置为不会赋给任何真正用户的值。这只允许访问具有读或写属性的文件。
注: 用户ID和组ID可参考:linux:SUID、SGID详解
本文简单总结自TCP/IP协议
网友评论