9. TFTP 服务器

TFTP(Trivial File Transfer Protocol)和FTP(File Transfer Protocol)都是用于文件传输的协议,但它们在设计目标、功能、安全性和应用场景上有显著区别。以下是两者的主要对比:


1. 协议基础

  • TFTP

    • 传输层协议:基于 UDP(无连接协议,端口号 69)。
    • 简单性:设计极简,仅支持文件传输的基本功能(上传/下载),无目录浏览、权限管理等功能。
    • 轻量级:适用于资源受限的环境(如嵌入式设备、网络引导)。
  • FTP

    • 传输层协议:基于 TCP(可靠连接协议,端口号 21(控制连接)和 20(数据连接))。
    • 功能丰富:支持目录操作(列表、创建、删除)、用户认证、断点续传、文件权限管理等。

2. 安全性

  • TFTP

    • 无认证机制:无用户名/密码验证,依赖网络隔离(如局域网)保证安全。
    • 明文传输:数据不加密,易被窃听或篡改。
    • 仅限简单场景:通常用于受信任的内部网络(如路由器固件更新、无盘工作站启动)。
  • FTP

    • 支持认证:需要用户名和密码登录(但默认明文传输)。
    • 安全缺陷:传统FTP不加密数据,存在安全隐患。可通过 FTPS(FTP over SSL/TLS)或 SFTP(SSH File Transfer Protocol)增强安全性。

3. 可靠性

  • TFTP

    • 无可靠性保证:基于UDP,无内置重传机制,依赖应用层实现简单的确认(ACK)和超时重传。
    • 文件大小限制:通常用于小文件传输(如配置文件、固件)。
  • FTP

    • 可靠传输:基于TCP,确保数据完整性和顺序性。
    • 支持大文件:适合传输大型文件或批量文件。

4. 使用场景

  • TFTP

    • 网络设备(如路由器、交换机)的固件更新。
    • 无盘工作站(PXE启动)加载引导文件。
    • 局域网内快速传输小型配置文件。
  • FTP

    • 需要用户认证和权限管理的文件共享。
    • 跨网络的常规文件传输(需结合加密协议如FTPS/SFTP)。
    • 企业级文件服务器(支持目录管理、日志记录等)。

5. 配置复杂度

  • TFTP

    • 配置简单,通常依赖 xinetd或独立服务,无需复杂权限管理。
    • 例如:在CentOS中只需安装 tftp-server并配置目录。
  • FTP

    • 配置复杂,需设置用户权限、被动模式、防火墙规则等。
    • 例如:使用 vsftpdproftpd时需要详细配置访问控制和安全策略。

6. 性能

  • TFTP

    • 低开销,适合低带宽或高延迟网络(但不可靠)。
    • 无加密和认证,传输速度快。
  • FTP

    • 高可靠性,但TCP握手和加密(如启用)会增加延迟。
    • 适合对稳定性要求高的场景。

总结对比表

特性 TFTP FTP
协议类型 UDP(无连接) TCP(可靠连接)
端口号 69 21(控制)、20(数据)
认证机制 用户名/密码(可加密)
加密支持 支持(FTPS/SFTP)
目录操作 不支持 支持(列表、创建、删除)
适用场景 局域网内简单文件传输、设备固件更新 跨网络文件共享、需权限管理的场景
典型应用 PXE启动、路由器配置 企业文件服务器、Web资源上传/下载

如何选择?

  • 选TFTP:内网环境、无需认证、传输小文件(如设备固件、配置文件)。
  • 选FTP:需要用户管理、目录操作、加密传输(结合FTPS/SFTP)。
  • 更安全的替代方案:优先使用 SFTP(基于SSH)或 SCP,避免FTP/TFTP的明文传输风险。

在CentOS 7上配置TFTP服务器的步骤如下:


1. 安装必要的软件包

yum install -y tftp-server xinetd

2. 配置TFTP服务

编辑配置文件 /etc/xinetd.d/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/lib/tftpboot -c
    disable         = no
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}
  • -s /var/lib/tftpboot:指定TFTP根目录。
  • -c:允许客户端上传文件。

3. 创建TFTP目录并设置权限

mkdir /var/lib/tftpboot
chmod -R 777 /var/lib/tftpboot
chown -R nobody:nobody /var/lib/tftpboot  # 可选,根据服务用户调整

4. 启动并启用服务

systemctl restart xinetd
systemctl enable xinetd

5. 测试TFTP服务

安装客户端:

yum install -y tftp

上传/下载测试:

# 本地生成测试文件
echo "Hello TFTP" > /var/lib/tftpboot/test.txt

# 连接TFTP服务器
tftp 127.0.0.1
tftp> get test.txt
tftp> put upload.txt
tftp> quit

检查文件是否传输成功。