一、tftp介绍
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69.
二、目的
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:
- netascii,这是8位的ASCII码形式,
- 另一种是octet,这是8位源数据类型;
- 最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
三、概况
任何传输起自一个读取或写入文件的请求,这个请求也是连接请求。如果服务器批准此请求,则服务器打开连接,数据以定长512字节传输。每个数据包包括一块数据,服务器发出下一个数据包以前必须得到客户对上一个数据包的确认。如果一个数据包的大小小于512字节,则表示传输结束。如果数据包在传输过程中丢失,发出方会在超时后重新传输最后一个未被确认的数据包。通信的双方都是数据的发出者与接收者,一方传输数据接收应答,另一方发出应答接收数据。大部分的错误会导致连接中断,错误由一个错误的数据包引起。这个包不会被确认,也不会被重新发送,因此另一方无法接收到。如果错误包丢失,则使用超时机制。错误主要是由下面三种情况引起的:不能满足请求,收到的数据包内容错误,而这种错误不能由延时或重发解释,对需要资源的访问丢失(如硬盘满)。TFTP只在一种情况下不中断连接,这种情况是源端口不正确,在这种情况下,指示错误的包会被发送到源机。这个协议限制很多,这些都是为了实现起来比较方便而进行的。
四、应用
在开发板上调试代码,使用的是交叉编译环境,即在电脑上编译,在开发板上运行,在前面电脑上编译后的可执行,通过存储介质(U盘、TF卡)拷贝,然后挂载到开发板上,再进行运行。为减少中间拷贝、挂载操作,现提供一种更为便捷的方式,即tftp功能,此功能将电脑设置为tftp服务器,开发板通过网络直接在电脑上获取文件。
- tftp服务器的搭建和测试
- 搭建服务器
– 安装xinetd,sudo apt-get install xinetd
– 安装tftp 和tftpd,sudo apt-get install tftp tftpd
– 配置/etc/xinetd.d/tftp文件(一定要对齐,严格按照以下格式输入!)
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
注意:server_args 配置了路径,是tftp获取文件的路径,如果客户端想要获取服务器的文件,只会在这里面找,因此需要将文件放到该目录下。
- tftp文件中的/var/tftpboot是服务器的目录
– 新建tftp服务器目录mkdir /var/tftpboot
– 修改权限为777 : chmod 777 /var/tftpboot
– 重启xinetd服务sudo /etc/init.d/xinetd restart
- 本机测试
– 在/var/tftpboot 下面建立一个文件test,输入任意内容
– 启动另一个终端
– 输入命令tftp 127.0.0.1
– 输入get test
– 输入q可以退出
– 退出后,使用ls命令可以发现当前目录下有test文件,如果这个文件和服务器中的test文件内容一模一样,表明服务器搭建成功
- 同一网段的概念
“同一网段” – IP和子网掩码做与运算得到网络标识,如果两个网络的网络标示一样,则在同一网段.
网线接到交换机
– 一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:
给内部网络或网络服务供应商自动分配IP地址;
演示计算网络标识,确认IP在同一网段.
- 开发板与tftp服务器的文件传输
需要具备的3个条件:
1、开发板与tftp服务器在同一网段,且没有IP冲突。
2、文件放在指定的目录下,具体的路径在配置服务器时已经写入。
3、客户端想要获取文件,需要知道文件名。
具备以上条件,通过 tftp 命令进行操作:
ftfp命令介绍:
在迅为4412提供的最小系统里面输入tftp有相应的介绍:
[root@iTOP-4412]# tftp
BusyBox v1.21.1 (2014-10-17 01:48:59 PDT) multi-call binary.
Usage: tftp [OPTIONS] HOST [PORT]
Transfer a file from/to tftp server
-l FILE Local FILE
-r FILE Remote FILE
-g Get file
-p Put file
-b SIZE Transfer blocks of SIZE octets
例:在tftp服务器的 /var/tftpboot 目录下有 test.txt文件,内容为 hello world!
在开发板上使用:
1、不更名获取
tftp -g -l/-r test 192.168.1.106
解释:
-g :下载
-l/-r:在不更改获取文件名的情况下,两者都可以
test:获取的文件名
192.168.1.106:tftp服务器的IP
获取的文件存放在当前路径下。
[root@iTOP-4412]# tftp -g -l test 192.168.1.106
[ 835.761330] [dm96-TxRound].2 for LEN_ODD tail_room +1, rslt add 1
[root@iTOP-4412]# ls
test
[root@iTOP-4412]# cat test
hello world!
2、更名获取
tftp -g -l hello -r test 192.168.1.106
解释:
-g :下载
-l :存放到本地的文件
hello:存放到本地的文件名
-r :获取的文件
test :获取的文件名
192.168.1.106 :tftp服务器的IP
[root@iTOP-4412]# tftp -g -l hello -r test 192.168.1.106
[ 1190.843793] [dm96-TxRound].3 for LEN_ODD tail_room +1, rslt add 1
[root@iTOP-4412]# ls
hello
[root@iTOP-4412]# cat hello
hello world!