一、TFTP是一个很小且易于实现的文件传送协议
1、FTP的简化版本,没有一个庞大的命令集
不支持交互 | 1980年定义 | 占内存很小 |
不能列出目录 | 不能进行身份鉴别 | 只支持对文件进行读/写传输 |
2、停止/等待,C/S协议
①发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。 |
②发完数据后在规定时间内收不到确认就要重发数据PDU。 |
③发送确认PDU的一方若在规定时间内收不到下一个文件块,也要重发确认PDU。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。 |
3、 基于UDP因此TFTP需要有自己的差错控制(表现为步锁)。
①客户进程发送一个读/写请求PDU给TFTP服务器进程,其熟知端口号码为69。 |
②服务器进程要选择一个新端口和TFTP客户进程进行通信。 |
③最后传送数据PDU的数据字段一定不满512字节,这正好可作为文件结束的标志。 |
④若文件长度为512B的整数倍,还必须在最后发送一个只含首部而无数据的数据PDU。 |
二、TFTP 协议的封装形式和5种PDU
0、模式字段是一个netascii或octet,同样以0字节结束。
1、Read ReQuest(=1)和Write ReQuest(=2)使用相同格式。
2、Data PDU(操作码=3)
初始块号被设置成1,为初始的DATA分组报文。每一个附加的分组报文将增加1。 |
每次传送的数据PDU中有512Bytes的数据,如果数据段少于512字节,则表明来自文件的最后一个数据块。如果正好是512字节长,必须传送额外的0长度数据块。 |
3、Ack确认(Acknowledgment 操作码=4)分组报文
块号段包含正在被确认的DATA报文的块号;若确认信号是回答一个WRQ的,则块号将被设置成0,表明数据的传输可以开始。
4、Err出错(Error操作码=5), 出错代码给出出错类型值
出错消息以NETASCII格式储存,出错消息总是以一个“0”来作为结尾标志。出错代码描述:
0 | 没有定义的错误 | 4 | 非法的TFTP操作 |
1 | 文件没找到 | 5 | 未知的传输ID(端口号) |
2 | 权限不足 | 6 | 文件已存在 |
3 | 磁盘已满或分区表溢出 | 7 | 没有这个用户 |
5、TFTP 报文分析
三、linux下TFTP安装与使用
1、安装这2个软件,一个是服务端,一个是客户端
tftp-0.39-2.i386.rpm;tftp-server-0.39-2.i386.rpm
2、修改/etc/xinetd.d/tftp配置文件
说明:参数-s指定chroot,-c指定了可以创建文件。
3、创建tftp根目录,启动tftp-server。
#chmod -R 777 /tftp_root #chkconfig tftp on; service xinetd restart #netstat -uan|grep 69 Chmod -R 777 /tftpboot |
4、测试如下