通过 SSH 隧道传输大文件速度慢如何调整 MTU 优化?

文章导读
调整 MTU 仅在网络路径存在分片丢失或 PMTU 探测失败时能改善 SSH 隧道传输稳定性,而非直接提升带宽上限。注意:MTU 是操作系统网卡级配置,并非 SSH 软件配置。
📋 目录
  1. 命令速用版(区分操作系统)
  2. 为什么会这样
  3. 分步处理与安全建议
  4. 怎么验证是否生效
  5. 常见坑
A A

调整 MTU 仅在网络路径存在分片丢失或 PMTU 探测失败时能改善 SSH 隧道传输稳定性,而非直接提升带宽上限。注意:MTU 是操作系统网卡级配置,并非 SSH 软件配置。

先说结论:MTU 优化是排查手段而非万能加速方案,适合解决传输中断或速率波动大的场景。

  • 先定位:使用 ping 测试路径最大传输单元,确认是否存在分片问题。
  • 先做:临时调整网卡 MTU 值进行测试,避免直接修改永久配置。
  • 再验证:对比调整前后的文件传输速率与丢包情况。

命令速用版(区分操作系统)

以下命令需 root 或管理员权限。请先确认当前操作的网卡名称。

1. 查找网卡名称

Linux: ip addrifconfig(查看状态为 UP 的接口,如 eth0、ens33)

Windows: ipconfig(查看以太网适配器名称)

2. 测试路径 MTU

Linux: ping -M do -s 1472 -c 4 目标主机 IP

Windows: ping 目标主机 IP -f -l 1472

3. 临时调整 MTU

Linux: ip link set dev 网卡名 mtu 1400

通过 SSH 隧道传输大文件速度慢如何调整 MTU 优化?

Windows: netsh interface ipv4 set subinterface "网卡名" mtu=1400 store=persistent

恢复默认: Linux 使用 ip link set dev 网卡名 mtu 1500;Windows 重启网卡或设回 1500。

为什么会这样

SSH 隧道会在原始数据包外包裹加密头和 TCP 头,导致实际数据包体积变大。如果路径中某处链路支持的 MTU 小于发送端设定的值,且 ICMP 分片 needed 消息被防火墙拦截,发送端就无法感知需要减小包大小,从而导致重传或连接停滞。MTU 配置作用于操作系统网络栈,而非 SSH 软件本身。

分步处理与安全建议

1. 测试当前路径允许的最大不分片包大小。使用 ping 命令逐渐减小包大小(如 1472, 1400, 1300),直到不再出现分片错误。

2. 计算建议 MTU 值。通常以太网默认 1500。若 ping 测试发现 1472 字节 payload 不通,则 MTU 应设为小于 1500 的值(如 1400)。

3. 安全修改本地出站网卡 MTU

通过 SSH 隧道传输大文件速度慢如何调整 MTU 优化?
  • 本地修改:直接使用 ip link 命令修改,无需重启网络服务。
  • 远程修改警告:若需修改远程服务器 MTU,务必确保拥有控制台访问权限或已开启 screen/tmux 会话。错误配置可能导致 SSH 会话中断且无法重连。

4. 执行文件传输测试。使用 scp 或 rsync 传输一个大文件,观察速度是否稳定。

5. 永久配置(仅测试有效后)

# Ubuntu Netplan 示例 (/etc/netplan/01-netcfg.yaml)
network:
  version: 2
  ethernets:
    eth0:
      mtu: 1400

# Debian /etc/network/interfaces 示例
auto eth0
iface eth0 inet static
    mtu 1400

6. 若无效则恢复默认。避免长期保留低 MTU 设置,这会降低网络吞吐效率。

怎么验证是否生效

观察传输过程中是否不再出现卡顿或连接重置。使用 ping 命令携带 -M do (Linux) 或 -f (Windows) 参数测试,确保大包能通。若使用 rsync,可观察重传率是否下降。

常见坑

1. 不要盲目调低 MTU。过小的 MTU 会增加 header 占比,降低有效数据吞吐率。

2. 区分 SSH 压缩与 MTU。对于大文件,SSH 压缩选项可能增加 CPU 负担而非提升速度,需单独测试。

3. 远程配置风险。修改远程服务器网络配置前,确保远程连接不会因网络中断而失联,建议先在本地客户端测试。