[ 服务器 ] ___ Shared : Tftpd

一、介绍


TFTPTrivial File Transfer Protocol)是一种简单的文件传输协议,用于在网络上进行文件传输。它基于UDP协议,使用无连接的方式进行数据传输,不具备TCP协议的可靠性和流量控制等特性,因此适用于小文件的快速传输。

TFTP最初由RFC 783定义,后来又通过RFC 1350RFC 2347RFC 2348RFC 2349等标准进行了扩展和完善。它主要用于网络引导(booting)、配置文件传输、固件升级等场景,常见于嵌入式设备、路由器、交换机等网络设备中。

tftpd是一个TFTP服务器,用于在网络上提供文件传输服务。它可以运行在LinuxUnixWindows等操作系统上,并支持IPv4IPv6两种网络协议。

(一)功能


TFTP具有以下主要功能:

  1. 文件传输:可以在网络上传输文件。
  2. 简单性:非常简单,只支持最基本的文件传输功能。
  3. 可靠性:使用数据包确认机制确保数据传输的可靠性。
  4. 跨平台:跨平台的,可以在不同的操作系统和硬件上运行。

TFTPD的主要功能包括:

  1. 提供TFTP服务:作为TFTP服务器,响应客户端的读取请求(RRQ)或写入请求(WRQ),并向客户端发送数据报文或确认应答。
  2. 支持多线程:支持多线程处理客户端请求,可以同时处理多个客户端的文件传输请求。
  3. 配置灵活:可以通过配置文件进行参数设置,如监听地址、传输模式、日志级别等。
  4. 记录日志:可以记录传输过程中的详细日志信息,方便用户进行故障排查和问题定位。

(二)工作原理


TFTP协议的工作原理比较简单,通常包括以下步骤:

  1. 客户端向服务器发送读取请求(RRQ)或写入请求(WRQ),并指定要读取或写入的文件名和传输模式(如octetnetascii等);
  2. 服务器收到请求后,根据文件名查找相应的文件,并向客户端发送确认应答(ACK)或错误应答(ERROR);
  3. 客户端收到应答后,开始向服务器发送数据报文,每个数据报文都会被服务器确认;
  4. 当所有数据传输完成后,客户端发送结束传输请求(ACK)给服务器,服务器收到后也发送确认应答,然后关闭连接。

需要注意的是,TFTP协议本身并不提供身份验证和加密等安全机制,因此在使用时需要注意安全问题。同时,由于TFTP使用UDP协议进行数据传输,可能会受到丢包、重复、乱序等问题的影响,因此不适合用于大文件或对数据可靠性要求较高的场景。

(三)优缺点


  1. 优点:
  • 简单易用:(实现非常简单,易于使用)
  • 小巧轻便:(实现非常小巧,占用资源少)
  • 跨平台:(可以在不同的操作系统和硬件平台上运行)
  • 支持UDP:(使用UDP协议进行数据传输,因此可以快速传输数据)
  1. 缺点:
  • 安全性较低:(没有身份验证机制,容易受到攻击)
  • 功能有限:(只支持最基本的文件传输功能,不支持目录传输、文件夹传输等高级功能)
  • 传输速度较慢:(使用UDP协议进行数据传输,因此在网络拥塞或者丢包情况下传输速度会变慢)

(四)应用


TFTP通常用于以下场景:

  1. 在本地网络中传输配置文件、固件、操作系统映像等文件。
  2. 在嵌入式系统中进行软件更新。
  3. 在路由器、交换机等网络设备中进行配置文件的传输。

总之,TFTP是一种简单、轻便的文件传输协议,适用于小规模文件传输。虽然它的功能有限,但是在特定的场景下仍然具有非常重要的作用。

二、构建


在Linux系统中,TFTP服务器的配置可以通过以下步骤完成:

  • 安装TFTP服务器;
  • 配置TFTP服务器;
  • 创建TFTP服务器的根目录;
  • 启动TFTP服务器。

(一)安装


客户端服务器的安装(客户端如果不需要可以不安装):

linux@localhost:~$ sudo apt-get install tftpd-hpa tftp-hpa

(二)配置


编辑TFTP服务器的配置文件/etc/default/tftpd-hpa,修改以下参数:

  1. TFTP_USERNAME:指定TFTP服务器运行的用户,默认设置为tftp。意味着TFTP服务器将以用户tftp的身份运行;
  2. TFTP_DIRECTORY:指定TFTP服务器的根目录,默认设置为/srv/tftp。意味着/srv/tftp是此服务器上的目录,可以通过TFTP访问该目录;
  3. TFTP_ADDRESS:指定TFTP服务器的监听地址和端口号,其中,:69表示监听所有可用的IP地址(0.0.0.0)和默认的TFTP端口号69
  4. TFTP_OPTIONS:指定TFTP服务器的选项,默认设置为--secure。(1. --secure:启用安全模式,禁止TFTP服务器访问文件系统以外的文件;2. -c:允许客户端上传文件到TFTP服务器;3. -l:允许客户端列出TFTP服务器上的文件列表;4. -s:指定TFTP服务器的根目录,等同于TFTP_DIRECTORY参数;5. -v:启用详细日志输出。)

使用vim编辑器打开配置文件进行编辑。

linux@localhost:~$ sudo vim /etc/default/tftpd-hpa

如果要配置TFTP服务器,则必须修改此配置文件并重新启动tftpd-hpa服务器,或者直接使用默认配置创建默认根目录并赋予权限即可:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

默认参数修改

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/mnt/shared/tftpd-hpa"
TFTP_ADDRESS="0.0.0.0:52013"
TFTP_OPTIONS="--secure -l -c"

TFTP服务器以独立(侦听)模式运行服务器,指定侦听52013端口上运行,服务器允许上传文件。

(三)权限


创建用户自定义目录

linux@localhost:~$ sudo mkdir -p /mnt/shared/tftpd-hpa

设置所有者和所属组为tftp

linux@localhost:~$ sudo chown tftp:tftp /mnt/shared/tftpd-hpa

设置访问目录权限

linux@localhost:~$ sudo chmod -R 755 /mnt/shared/tftpd-hpa

设置防火墙端口权限允许

linux@localhost:~$ sudo ufw allow 52013

(四)启动


服务启动

linux@localhost:~$ sudo service tftpd-hpa restart

检查服务是否启动:

linux@localhost:~$ systemctl status tftpd-hpa
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa; bad; vendor preset: enabled)
   Active: active (running) since Wed 2020-11-26 00:53:13 PST; 2s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3873 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS)
  Process: 3884 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tftpd-hpa.service
           └─3898 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:52013 -l -c -s /home/tftpd-hpa

Nov 26 00:53:13 ubuntu systemd[1]: Stopped LSB: HPA's tftp server.
Nov 26 00:53:13 ubuntu systemd[1]: Starting LSB: HPA's tftp server...
Nov 26 00:53:13 ubuntu tftpd-hpa[3884]:  * Starting HPA's tftpd in.tftpd
Nov 26 00:53:14 ubuntu tftpd-hpa[3884]:    ...done.
Nov 26 00:53:14 ubuntu systemd[1]: Started LSB: HPA's tftp server.

设置开机自启动

linux@localhost:~$ sudo systemctl enable tftpd-hpa

四、测试


  • 在客户端中使用Tftp进行上传和下载测试
  • 当前服务器主机设置Ip地址为 : 192.168.1.128
  • 建议关闭客户端所有安全软件和防火墙
[ root@arm / ] # tftp
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
  1. 上传本地文件
[ root@arm / ] # ls -la
-rwxr-xr-x    1 root     root         47328 Jan 20  2020 3G.png
[ root@arm / ] # tftp -p -l  192.168.1.128:52013 3G.png
3G.png              100% |*******************************| 47328   0:00:00 ETA
  1. 下载远端文件
[ root@arm / ] # tftp -g -r  192.168.1.128:52013 light.png
light.png              100% |*******************************| 20022   0:00:00 ETA

五、帮助


注意:上面测试的tftp为开发板当中的版本,如想要在其他平台使用,则要自行查看命令或软件的帮助手册,如下:

  1. 查看帮助
linux@localhost:~$ tftp 192.168.1.128 52013
tftp> help
tftp-hpa 5.2
Commands may be abbreviated.  Commands are
connect         connect to remote tftp
mode            set file transfer mode
put             send file
get             receive file
quit            exit tftp
verbose         toggle verbose mode
trace           toggle packet tracing
literal         toggle literal mode, ignore ':' in file name
status          show current status
binary          set mode to octet
ascii           set mode to netascii
rexmt           set per-packet transmission timeout
timeout         set total retransmission timeout
?               print help information
help            print help information
  1. 上传和下载
linux@localhost:~$ tftp 192.168.1.128 52013
tftp> put 3G.png
tftp> get light.png
tftp>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值