tfpt协议以及在ubuntu-8.04环境下tftp服务器的建立
时间:2010-01-03 来源:szufhc2006
tftp协议
TFTP(Trivial File Transfer Protocol),中译简单文件传输协议或小型文件传输协议,是一种简化的FTP,于1980年定义。
TFTP非常简单,通过少量存储器就能轻松实现——这在当时是很重要的考虑因素。所以TFTP被用于引导计算机,例如没有大容量存储器的路由器。现在它仍然被用于在一个网络上主机之间传输小文件,例如从一台网络主机或服务器引导一个远程X Window System终端或其他的薄型客户端(thin client)。
TFTP部分基于更早期的EFTP协议,EFTP是通用分组协议(PUP Protocol)中的一部分。在TCP/IP协议组早期的工作中,TFTP往往是在一个新的主机类型上首先完成的协议——因为其非常的简单。
技术信息
TFTP的一些详细资料:
- 使用UDP(端口69)作为其传输协议(不像FTP使用TCP端口21)。
- 不能列出索引内容。
- 无验证或加密机制。
- 被用于从远程服务器读取或写入文件。
- 支持三种不同的传输模式:”netascii”,”octet”和”mail”,前两种符合FTP协议中的”ASCII”和”image(binary)”模式;第三种从来很少使用,目前已经废弃。
因为TFTP利用了UDP,就必须提供自己的传输和会话支持。每个通过TFTP传输的文件构成了一个独立的交换。此传输表现为步锁,任何时间网络上仅仅传递一个包(一个数据块或一个首部确认)。由于缺少窗口切换技术,TFTP在有很多潜在连接的情况下仅提供较低的吞吐量。
由于TFTP缺少安全性,在开放式因特网上传输非常危险,所以普遍仅仅用于私人本地网络
TFTP会话的详细资料
- 初始化主机A送一个读请求(RRQ)或写请求(WRQ)包给主机B,包含了文件名和传输模式。
- B向A发一个ACK包应答,同时也通知了A其余送往B包应该发送的端口号。
- 源主机向目的主机送编过号的数据包,除了最后一个都应该包含一个全尺寸的数据块。目的主机用编号的ACK包应答所有的数据包。
- 最终的数据包必须包含少于最大尺寸的数据块以表明这是最后一个包。如果被传输文件正好是尺寸块的整数倍,源主机最后送的数据包就是0字节的。
ubuntu-8.04环境下tftp服务器的建立
原帖ubuntu-8.04环境下tftp服务器的建立 作者:taylor
1.安装程序
sudo apt-get install tftp tftpd
前者是客户端,后者是服务程序。
sudo apt-get install xinetd
2.在/srv目录下建一个tftpboot, 把属性改成777。
cd /srv
sudo mkdir tftpboot
sudo chmod 777 tftpboot
3.编辑 /etc/inetd.conf
sudo vi /etc/inetd.conf
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftpboot
4.编辑 /etc/xinetd.d/tftp
sudo vi /etc/xinetd.d/tftp
tftp内容:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /srv/tftpboot
}
(ps:步骤3、4 二者选其一则可)
5.重新启动服务:
sudo /etc/init.d/xinetd restart
sudo in.tftpd -s /srv/tftpboot
6.测试一下,在/tftpboot文件夹下新建立一个文件
touch test
进入另外一个文件夹
tftp 192.168.0.38 【IP自行修改】(本机测试可以为:tftp localhost)
tftp> get test
是不是工作正常了呢?
现在把你编译好的内核文件拷贝到/tftpboot下面,就可以使用u-boot的tftp命令加栽内核到目标板内存了。
也可以使用
netstat -au|grep tftp
命令来测试系统是否开启了tftp服务,示例:
fhc2007@fhc2007-desktop:~$ netstat -au|grep tftp
udp 0 0 *:tftp *:*