分类: LINUX
2010-09-11 21:33:26
TFTP是一个传输文件的简单协议,通常使用UDP协议而实现,但tftp并没有要求实现的具体协议,在特殊需求的场合可以同tcp实现。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
那么tftp的客服端和服务器端是怎么进行通信的呢。那么关系是这么发生的。
任何传输起自一个读取或写入文件的请求,这个请求也是连接请求(服务器端的tftp服务器程序,一直在监听69号端口,如果有请求就予以回应)。如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表示传输结构。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)。TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这是都是为了实现起来比较方便而进行的。通过下边的图片来了解tftp协议的通信流程:
好了,现在应该来知道一下tftp协议的一些基本概述
TFTP协议概述
1.简单文件传送协议(Trivial File Trhansfer Protocol)
2.最初用于引导无盘系统,被设计用来传输小文件
3.基于UDP协议实现,但也可以由其他协议实现
4.不具备FTP的许多功能
5.只能从服务器获取或写入文件,不能列出目录
6.不进行认证
数据传输模式
1.netascii:文本模式
2.octet:二进制模式
3.mail:已经不再支持
下面最重要了,我们只有知道了,数据包的包头怎么写,我们才能和服务器的tftp server 进行数据交互。
协议结构
基本 TFTP 协议头结构:
16 bits |
String |
16 bits |
String |
16 bits |
Opcode |
Filename |
0 |
Mode |
0 |
Opcode:操作代码或命令。以下为 TFTP 命令:
Opcode |
Command |
Description |
1 |
Read Request |
Request to read a file |
2 |
Write Request |
Request to write to a file |
3 |
File Data |
Transfer of file data |
4 |
Data Acknowledge |
Acknowledgement of file data |
5 |
Error |
Error indication |
Filename:传送的字段名称。
Mode:数据模式。协议传输的文件数据格式。可以是 NetASCII,也可以是标准 ASCII,八位二进制数据或邮件标准 ASCII。
我们通过图片来详细看看tftp报文的格式:
好了,知道tftp是做什么的,知道其数据包的包头应该怎么封装,知道刚开始发起连接时 ,使用的是69号端口,一般使用的协议是UDP,知道了这些,就可以写tftp客服端程序了。
|