TFTP 服务器搭建和测试
关于TFTP:TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于UDP 协议实现 的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合
搭建服务器
首先,打开ubuntu终端,输入命令“sudo apt-get install xinetd”,安装xinetd
【注释:xinetd 的主要作用是监听并管理各种网络服务的连接请求。
它可以通过配置文件来定义服务及其相关参数,如监听端口、协议类型、启动脚本等。当有客户端发送连接请求时,xinetd 可以根据配置文件中的规则决定是否接受连接并将连接转发给相应的服务进程处理。这种按需启动服务的方式可以极大地减少系统资源的消耗,提高系统的安全性和效率。】
输入命令“sudo apt-get install tftp tftpd”安装tftp 和tftpd,然后建立TFTP 的配置文件,使用命令“vi /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
}
【注释:service tftp: 定义了服务名称为 tftp
socket_type = dgram: 指定了使用数据报(datagram)类型的套接字进行通信
server = /usr/sbin/in.tftpd: 指定了 tftp 服务器进程的可执行文件路径
server_args = -s /var/tftpboot/: 指定了 tftp 服务器进程的参数,其中 -s 表示指定 TFTP 的根目录为 /var/tftpboot/ ——————TFTP 客户端就是从这个目录里面获取服务器上的文件
】
之后建立mkdir /var/tftpboot 建立tftp 服务器的目录,设置访问权限777
之后输入:sudo /etc/init.d/xinetd restart 命令重启xinetd 服务
这一步就搭建好了服务器
服务器测试
在/var/tftpboot (上面提到的TFTP 的根目录)下面建立一个文件test,在里面输入hello world,之后打开另一个终端,输入tftp 127.0.0.1,之后输入get test获取test文件,输入q退出tftp
之后用ls看有没有test文件,如果有就用cat查看文件内容是不是hello world,如果是就测试成功完成。
【注释:
- tftp:表示要使用 TFTP 协议进行文件传输。
- 127.0.0.1:表示本地回环地址,也就是指向本地计算机的 IP 地址。
通过运行这个命令,你可以在本地计算机上创建一个 TFTP 客户端,并尝试与同一台本地计算机上运行的 TFTP 服务器进行文件传输
】
开发板实现TFTP 文件传输
IP地址的查看
用ifconfig看的是Ubuntu系统下的IP,使用SSH 软件和Ubuntu 连通传文件,就需要先在Ubuntu 下查看IP 地址。
开发板的IP,在查看最小文件系统的etc 文件可以看到默认的IP地址
子网掩码的查看
使用ifconfig,可以查看Ubuntu 系统下的子网掩码
查看最小文件系统的etc/eth0-setting 文件可以看到默认的子网掩码
如何确认IP地址在不在一个网段:
如果大家计算发现Ubuntu 系统的IP 和开发板的IP 不在同一网段,则需要修改开发板的
IP。【因为如果Ubuntu系统的IP地址与开发板的IP地址不在同一网段,它们之间无法直接进行通信。在局域网中,不同网段的设备之间需要通过路由器或者网络设备进行数据包转发才能实现通信。如果想Ubuntu系统和开发板能够互相通信,需要将它们的IP地址设置在同一网段内。这样它们就可以直接通过局域网进行通信,而无需经过路由器。】
单纯的两个IP 不能直接拿来确认是不是在同一网段,必须结合子网掩码经过计算才能得出
结论。
计算方法是:两个IP 分别和相应的子网掩码做与运算,得出的结果相等则表明在同一网段
如果要改开发板的默认的IP,子网掩码,网关,DNS,MAC,要在文件系统的etc/eth0-setting 文件里更改
客户端的测试
首先看一下TFTP 服务器的IP 地址,输入“ifconfig”
可见tftp的ip地址是192.168.1.109,开发板的默认IP 是192.168.1.230,它们在同一个网段
之后开发板连到电脑上,然后输入ping 命令确认开发板和TFTP 服务器是连通
超级终端返回“xx bytes from xx.xx.xx.xx"就是连通的
在开发板的串口输入:tftp -g -l test -r test 192.168.1.109,获取文件test
【注释:
- tftp:表示要使用TFTP协议进行文件传输。
- -g:表示使用“get”模式,即从服务器下载文件到客户端。
- -l test:表示将下载的文件保存为本地文件名为test。
- -r test:表示从服务器上获取的文件名为test。
- 192.168.1.109:表示TFTP服务器的IP地址,即文件传输的目标地址。】
之后可以用cat指令去查看下载的test文件,看看是不是‘hello world”,是的话就说明测试成功
我们之前调试程序都是用U盘将某个文件挂载在开发板上,现在我们可以用TFTP去调试程序:
在虚拟机的Ubuntu 上编写过一个输出helloworld 的小程序,然后通过交叉编译器编译这个程序生成了可执行文件helloworld,通过cp 命令把这个可执行程序helloworld 拷贝到了/var/tftpboot 目录下,在开发板的串口上执行“tftp -g -l helloworld -rhelloworld 192.168.1.109”
输入ls 命令查看一下当前目录,可以看到已经有helloworld 这个文件了,使用命令“./helloworld”运行程序,会发现输出”hello world“