TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。虽然为网络启动和软硬件升级这种情况很少发生,但是,当你需要设置并使用一个Trivial FTP (or TFTP)服务器时掌握这项技术将会变得很重要。TFTP不像平常的FTP,它没有认证,没有密码,有很多小的特点,所以不是FTP的传输。如果TFTP如此难用,为什么使用它呢?一些驱动程序,特别是路由器和某些高端交换机会使用TFTP来进行升级软硬件,再就是TFTP在网络启动中的优势也会变得特别明显。当TFTP不像FTP一样广泛使用时,它仍然是非常有用的。通过DHCP分配一个TFTP服务器的IP地址的能力,和其他过分简单的特点让它非常容易使用,仅仅通过末端设备指向TFTP服务器的IP地址,使得软硬件升级和网络启动变得简单。

 

大多数Linux分布都有一个TFTP服务器进行可用包挑选,代表性的如tftp-hpa包,分布在ftp://ftp.kernel.org/pub/software/network/tftp/。如果从你的产品提供商那里获取的安装包是可用的,安装就相当简单了。如果不是,下载并且编译安装包;有很少需要你完成的非常规的“configure”和“make; make install.”的配置。

 

有了tftp-hpa,一些对这个不可靠协议进行安全性增长的措施被采用。你可以告诉后台程序,in.tftpd服务进程,改变程式目录将被用来服务文件夹也并用来取消特权。利用这点,创建一个特殊的用户名tftpd,它有一个TFTP基于目录的主目录,或许/var/lib/tftpboot。 然后访问in.tftpd 这样:

/usr/sbin/in.tftpd -u tftpd -s /var/lib/tftpboot

如果你安装通过一个RPM或者DEB包,将很有可能有一个可用到的初始脚本。代表性的来说,in.tftpd 被称作通过一个像inetd或xinetd的超级服务器。举个实例,一个inetd的构造:

tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -u tftpd -s /var/lib/tftpboot

 

xinetd示例:

 

 

service tftp
{
    socket_type = dgram
    protocol    = udp
    wait        = yes
    user        = root
    server      = /usr/sbin/in.tftpd
    server_args = -u tftpd -s /var/lib/tftpboot
}

tftp-hpa包也将伴随一个tftp客户机程序,能被用来测试客户机程序。

为了测试一些正常工作,启动(或者重新启动)xinetd 或者 inetd,创造一个测试文件夹,并用tfpt客户机程序去获得这个文件:

 

 

# dd if=/dev/zero of=/var/lib/tftpboot/foo bs=1024 count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.00041193 s, 249 MB/s
# tftp -v localhost -c get foo
Connected to localhost (127.0.0.1), port 69
getting from localhost:foo to foo [netascii]
Received 102400 bytes in 0.1 seconds [11872463 bit/s]
# ls -l foo
-rw-r--r-- 1 root root 102400 2008-01-06 17:05 foo

 

现在你可以用TFTP服务器为PXE booting提供启动映像或者为路由器或其它设备提供软硬件映像,这样通过TFTP进行软硬件升级。