如何用WiFi进行快速数据传输?

xeonds

2026-05-07 18:25:36

问题的提出

两台设备通过热点组成局域网,用 rsync 传大量文件——这是极其常见的场景:手机开热点、电脑连上来传照片;或者电脑开热点、手机连上来备份数据。

但实际速度往往远低于网卡标称速率。问题出在哪一层?

WiFi 速率从标称 1200Mbps 到实际文件传输 20MB/s(160Mbps),损耗超过 85%——这不是单一瓶颈,而是物理层→TCP层→应用层(rsync)的多层叠加效应

本文将问题拆成三层,逐层分析并给出优化方法。

场景定义

角色 设备 网络位置
AP(热点提供方) Android 手机 / Linux PC 创建 WiFi 局域网
Client(连接方) Linux PC / Android 手机 连入热点
传输工具 rsync (over SSH 或 daemon) 应用层
网络类型 纯局域网,流量不经蜂窝网

文件传输方向可能为 AP→Client 或 Client→AP,两者在 WiFi 层不对称(AP→Client 下行和 Client→AP 上行速率可能不同)。

第一层:物理层(WiFi 链路)

1.1 四个核心参数

WiFi 物理层协商速率由四个参数决定:

参数 含义 典型消费级设备上限
MCS Index 调制编码策略 9 (ac, 256-QAM), 11 (ax, 1024-QAM)
Spatial Streams (NSS) 空间流数 2(手机/笔记本)
Channel Width 信道带宽 80 MHz(大多数), 160 MHz(高端)
Guard Interval (GI) 符号间保护间隔 400ns (short), 800ns (long)

给定这四个参数,查 IEEE 标准表即得 PHY 速率。例如 2×2 MIMO + 80MHz + MCS 11 + SGI = 1201 Mbps。

1.2 各协议最大 PHY 速率(消费级 2×2 设备)

协议 最大带宽 最高 MCS 最大 PHY 速率
802.11n (WiFi 4) 40 MHz 7 (64-QAM) 300 Mbps
802.11ac (WiFi 5) 80 MHz 9 (256-QAM) 866 Mbps
802.11ac Wave 2 160 MHz 9 1733 Mbps
802.11ax (WiFi 6) 80 MHz 11 (1024-QAM) 1201 Mbps
802.11ax (WiFi 6) 160 MHz 11 2402 Mbps

1.3 快速诊断:当前连接状态

# 查看当前协商速率(最直接的诊断命令)
iw dev wlan0 link
# => tx bitrate: 866.7 MBit/s VHT-MCS 9 80MHz short GI VHT-NSS 2

这条输出告诉你当前实际协商的 MCS、带宽、GI 和流数。对照上表,如果发现:

1.4 查看硬件能力上限

iw list    # 完整硬件能力

关键输出段落:

Band 2:   (5 GHz)
    HT20/HT40              ← 802.11n 支持 40MHz
    VHT80/VHT160           ← 802.11ac 支持 80/160MHz
VHT RX MCS set:
    1 streams: MCS 0-9     ← 单流最高 MCS 9
    2 streams: MCS 0-9     ← 双流最高 MCS 9
    3 streams: not supported  ← 最大 2 流

如果 iw list 显示支持 VHT160 但 iw dev wlan0 link 只跑在 80MHz,说明存在可优化的空间。

1.5 第一层速查:物理层常见减速原因

现象 可能原因 验证方法 解决
2.4GHz 而非 5GHz 配置/兼容性 iw dev wlan0 link 看 freq 强制 5GHz 信道
20MHz 而非 80MHz hostapd 配置错误 iw list vs iw link 对比 检查 vht_oper_chwidth
NSS=1 而非 2 天线问题/距离 iw link 看 NSS 靠近设备
MCS 偏低 信号弱/干扰 iw link 看 signal 换信道,靠近
54Mbps 封顶 wmm_enabled=0 hostapd.conf 必须设为 1
TX Power 极低 country_code 错误 iw reg get iw reg set <CC>

第二层:WiFi AP 配置(hostapd / 手机热点)

2.1 谁做 AP?选择策略

AP 角色 优点 缺点
Linux PC 做 AP 天线好、不发热降频、TX power 大、可精细调优 Intel 网卡 5GHz 不能做 AP;需要 hostapd 配置
Android 手机做 AP 零配置、便携 发热降频、天线弱、不可调参

关键选择一:如果 PC 网卡是 Intel(AX200/AX210 等),5GHz AP 模式几乎不可用——Intel 的 LAR(Location-Aware Regulatory)机制要求先侦听到合法的 5G AP beacon 才允许自己发射,这在 AP 模式下形成死锁。Intel 仅支持 2.4GHz AP。

关键选择二:如果 PC 网卡是 MT7921/MT7922 或 RTL8852BE 等,推荐 PC 做 AP,性能远超手机热点。

2.2 PC 做 AP:hostapd 最小最优配置

interface=wlan0
driver=nl80211
ssid=FastTransfer
hw_mode=a                  # a=5GHz, g=2.4GHz
channel=36                 # 36-48 非DFS,兼容性最好
country_code=US
wmm_enabled=1              # 必选!否则 11n/ac/ax 全部失效

# 802.11n (HT)
ieee80211n=1
ht_capab=[HT40+][HT40-][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935]

# 802.11ac (VHT) — 80MHz
ieee80211ac=1
require_vht=1
vht_capab=[MAX-AMSDU-7935][SHORT-GI-80]
vht_oper_chwidth=1
vht_oper_centr_freq_seg0_idx=42     # 信道36-48 → 42

# 802.11ax (HE) — 如硬件支持
ieee80211ax=1
he_capab=[HE80]

# 安全:CCMP(AES) 最快,避免 TKIP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_passphrase=secretpass

信道与中心频率对照(80MHz):

信道范围 seg0_idx
36-48 42
52-64 58
149-161 155

2.3 手机做 AP:只能做的优化

手机热点几乎没有可调参数,但有几件事可以控制:

  1. 强制 5GHz 热点:Android 设置 → 便携式热点 → 配置 → 选择 5GHz 频段
  2. 关闭移动数据:避免蜂窝流量干扰(也避免误用流量)
  3. 物理散热:手机放在凉爽表面甚至主动散热(风扇),延缓降频
  4. 近距离:两台设备尽量靠近,减少信号衰减

2.4 第二层速查:配置常见问题

现象 原因 解决
hostapd 启动报错 网卡不支持 AP 模式 iw list \| grep "AP" 确认能力
连不上 5GHz DFS 信道等待 用 ch 36-48(非DFS)
速度上不去 wmm_enabled=0 设为 1
vht_oper_chwidth 不生效 seg0_idx 错误 对照上表

第三层:系统与 rsync 调优

这是最常见却被忽视的性能黑洞。 WiFi 链路调好后,rsync 本身的参数选择经常将实际文件吞吐拉到物理极限的 30% 以下——尤其是大量小文件的场景。

3.1 系统层基线优化

# --- WiFi 层面 ---
iw dev wlan0 set power_save off     # 关省电,WiFi 性能的首要杀手
ip link set wlan0 txqueuelen 4096   # 增大发送队列

# --- TCP 层面 ---
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
sysctl -w net.ipv4.tcp_congestion_control=bbr

3.2 rsync 核心参数

# 最优 LAN 传输命令
rsync -avW --no-compress --inplace --info=progress2 /source/ user@host:/dest/
参数 作用 为什么重要
-W (--whole-file) 跳过 delta 算法,直接传整个文件 大量小文件的首要杀手。 delta 对每个文件计算滚动校验和,对小文件来说计算开销远超直接传输。LAN 带宽足够,不需要 delta
--no-compress 不压缩 LAN 上压缩浪费 CPU,得不偿失
--inplace 直接写入目标文件,不用临时文件+rename 减少目标端 I/O
--info=progress2 显示整体进度而非逐文件 不会刷屏,能看到总体速度
-z 的取舍 默认 -a 不含 -z 不要加 -z,除非传的都是未压缩文本

3.3 SSH vs rsync Daemon:需要关心吗?

rsync 默认走 SSH 隧道。SSH 加密对 LAN 传输有两重开销:

CPU 类型 SSH 加密开销 影响
现代 x86(有 AES-NI) 可忽略 1Gbps 链路基本不受影响
ARM / 手机 / NAS 10-30% CPU 可能成为瓶颈
10Gbps+ 链路 SSH 窗口限制 单流 2-4Gbps 封顶

结论:普通 WiFi LAN(PHY < 2Gbps,实际 < 1Gbps),rsync over SSH 即可。 加密开销在 AES-NI 硬件上可以忽略。

如果双方的 CPU 都很弱(老旧 ARM NAS 等),可考虑 rsync daemon 模式(免加密,端口 873):

# 服务端
cat > /etc/rsyncd.conf << 'EOF'
[share]
    path = /srv/data
    read only = no
EOF
rsync --daemon

# 客户端
rsync -avW --no-compress /source/ rsync://host/share/

3.4 大量小文件的特殊处理

这是 rsync LAN 传输最常见的性能灾难。

rsync 对每个文件有固定开销:stat()checksumsend metadatatransfer data。对于 KB 级别的小文件,这些开销远超数据传输本身,导致有效吞吐量暴跌 50-90%。

解决方案,按效果排序:

方案一:并行 rsync(最推荐)

将文件列表拆成 N 份,并行跑 N 个 rsync 进程:

# msrsync 方式(推荐)
msrsync -p 8 -r '-avW --no-compress' /source/ host:/dest/

# 或 GNU Parallel 手动拆分
cd /source && find . -type f | parallel -j8 --files --pipe --block 10M \
    'rsync -avW --no-compress --files-from=- /source/ host:/dest/'

效果:典型 10 万个小文件场景,单 rsync 12 分钟 → 48 秒(约 15× 提升)。

方案二:tar + netcat 全量传输

如果不是增量同步而是首次全量,rsync 的逐文件开销完全是浪费:

# 接收端
nc -l 9999 | pv | tar xv -C /dest/

# 发送端
tar cv /source/ | pv | nc <receiver_ip> 9999

无逐文件开销、无 SSH 加密、无 delta 计算——最接近裸 TCP 吞吐。缺点是无增量/断点续传能力。

方案三:优化 rsync 参数(不改变流程)

rsync -avW --no-compress --inplace --no-inc-recursive \
    --no-motd --ignore-existing --include='*/' --include='*.jpg' --exclude='*' \
    --info=progress2 /source/ host:/dest/

3.5 大文件的极限优化

如果传输的是少量大文件(ISO、视频等),瓶颈不在文件数而在 TCP 流本身:

# 多并行流(多个大文件同时传)
rsync -avW --no-compress --info=progress2 \
    --rsh='ssh -c [email protected] -o Compression=no' \
    /source/ host:/dest/

如果要真正逼近物理极限,可以多实例同时传不同文件:

# 找大文件
find /source -type f -size +100M > big_files.txt
# 并行传
cat big_files.txt | parallel -j4 rsync -avW --no-compress {} host:/dest/

3.6 第三层速查:应用层减速原因

现象 可能原因 解决
大量小文件速度极慢(< 5MB/s) rsync 逐文件开销 -W + 并行 rsync
iperf3 满速但 rsync 慢 delta 计算或 SSH 开销 -W --no-compress
CPU 满载 SSH 加密或压缩 去掉 -z,换快速 cipher
传输慢且 iperf3 也慢 WiFi/TCP 层问题 回到第一/二层诊断
增量同步慢 逐文件校验 --ignore-existing 跳过已有;增量扫描不可避免

第四层:拓扑瓶颈 — 中转的性能代价

这是三层调优做完之后,可能仍然存在的硬限制。

4.1 问题现象

PC1 ──WiFi──> 手机AP ──WiFi──> PC2
     866Mbps          866Mbps

iperf3 单链路:PC1↔Phone 或 PC2↔Phone → 500-1000 Mbps ✓
PC1 → PC2 中转:                   → ~300 Mbps      ✗

单链路满速,中转直接腰斩。这不是配置问题,是 WiFi 半双工共享介质的物理规律

4.2 为什么会减半?

WiFi 是半双工、共享信道。AP 只有一个无线电,同一时刻只能和一个客户端通信:

时间片拆分:
  t1: PC1 → AP  (数据包上行)
  t2: AP → PC2  (数据包下行)
  t3: PC1 → AP  (下一个包)
  t4: AP → PC2  (下一个包)
  ...

一个数据包从 PC1 到 PC2 要占用两倍的空口时间:入站一次、出站一次。再加上 CSMA/CA 竞争退避、ACK 帧开销,理论极限就是单链路速率的 40-50%

300Mbps ≈ 866Mbps × 40%——数字完全对得上。

除此之外,手机 AP 在中间做 NAT 路由而非二层桥接,每个包要经过 netfilter/conntrack,CPU 负担进一步恶化:

PC1 → AP: WiFi 上行 (空口时间 50%)
AP 内部: NAT/conntrack (CPU)
AP → PC2: WiFi 下行 (空口时间 50%)

4.3 有没有办法绕过?

方法 原理 可行性 预期效果
换 PC 做 AP 数据源/目的地之一就是 AP,消除一跳 ✅ 推荐(PC 网卡支持的话) 接近单链路速率
USB 有线连接 一台 PC 通过 USB tethering 连手机,另一台用 WiFi ✅ 最简单 USB 侧不占空口,WiFi 侧跑满
WiFi Direct 两台 PC 直接 P2P 连接,不经过 AP 中转 ⚠️ 需网卡支持 单跳,接近满速
手机双频热点 PC1 连 2.4G,PC2 连 5G(或反之),不同信道不共享空口 ⚠️ 需手机支持双频同时广播 接近单链路速率
以太网替代一侧 一台 PC 用有线连路由器,另一台用 WiFi ✅ 如果有路由器 有线侧不占 WiFi 空口

4.4 最佳实践:根据硬件选择拓扑

方案 A:PC 网卡能做 AP(MT792x / RTL8852)→ PC 开热点

PC1 (AP) ──WiFi──> PC2 (Client)
        单跳,无中转

数据直接从 PC1 的 WiFi 接口发到 PC2,只经过一次空口传输,速率接近单链路上限。

方案 B:PC 网卡是 Intel(不能做 5G AP)→ USB tethering + WiFi 混合

PC1 ──USB──> 手机AP ──WiFi──> PC2
    有线侧     无线侧

USB tethering 不占 WiFi 空口。PC1 通过 USB 把数据发给手机,手机用全部 WiFi 带宽传给 PC2——单链路速率基本不损耗。这是绕过 Intel 网卡限制和 WiFi 中转损耗的最简单方法:

# 手机 USB 连接 PC1,开启 "USB 网络共享"
# PC1 上会出现 usb0 接口
# 然后在 PC1 上启动 rsync 服务端,PC2 通过手机热点的 WiFi IP 连接 PC1

# PC1 (USB 连接手机):
rsync -avW --no-compress /source/ user@<PC2_WiFi_IP>:/dest/

方案 C:只能手机做 AP,两台 PC 都 WiFi 连接 → 接受物理限制

中转损耗是硬性的,此时能做的只是确保链路本身是最优的: - 两台 PC 都连 5GHz - 手机和两台 PC 保持近距离等距 - 关省电模式 - iperf3 验证单链路能跑满,然后接受中转 ≈ 40% 的现实

如果手机支持双频同时热点(Android 16+ 的 2.4+6G 模式),可以让一台 PC 连 2.4GHz、另一台连 5GHz——两个频段不共享空口,中转损耗可大幅降低。

完整优化流程

graph TD
    A[iw dev wlan0 link<br/>查看当前 PHY 速率] --> B{达到硬件上限的<br/>60-70%?}
    B -->|否| C[第一层:检查 MCS/NSS/<br/>带宽/GI/频段]
    B -->|是| D[iperf3 测试 TCP 吞吐]
    D --> E{达到 PHY × 0.65?}
    E -->|否| F[第二层:hostapd 配置<br/>/系统 TCP 参数]
    E -->|是| G{数据经过 WiFi 中转?<br/>PC→AP→PC?}
    G -->|是| H[第四层:消除中转<br/>换 PC 做 AP / USB 有线 / WiFi Direct]
    G -->|否| I[rsync 传输基准测试]
    I --> J{是否是大量小文件?}
    J -->|是| K[第三层:-W + 并行 rsync<br/>或 tar+nc]
    J -->|否| L[第三层:-W --no-compress<br/>基本够用]

速查表:按场景选方案

场景 推荐方案 预期吞吐(相对 PHY)
少量大文件,增量同步 rsync -avW --no-compress 50-65%
少量大文件,首次全量 rsync -avW --no-compress --inplace 55-70%
大量小文件,增量同步 msrsync -p8 -avW --no-compress 取决于文件大小分布
大量小文件,首次全量 tar + nc 65-75%(逼近裸 TCP)
手机热点中转(PC→手机→PC) USB tethering + WiFi 混合,或换 PC 做 AP 单链路 40-50%(物理硬限)
手机热点 + PC(直连) PC 关省电,手机强制 5G + 散热 热点硬件是天花板
PC 热点(MT792x) 直连 hostapd 最优配置 + 5GHz 接近硬件极限
PC 热点(Intel) 直连 仅 2.4G,或 USB 外接 MT792x 网卡 2.4G 上限 ~150Mbps

总结

四层优化,按优先级排:

  1. 物理层:5GHz + 80/160MHz + 2×2 MIMO = 先确保 PHY 协商到硬件上限
  2. WiFi 配置层wmm_enabled=1、正确 country_code、AP 角色选择(Intel 别做 5G AP)
  3. 拓扑层:避免 WiFi 中转!让数据源/目的地之一充当 AP,或用 USB 有线替代一侧 WiFi 连接
  4. 应用层rsync -W(跳过 delta)、--no-compress、大量小文件用并行 rsync 或 tar+nc

针对你的现象:手机热点中转跑 300Mbps,单链路能跑 500-1000Mbps——这不是配置问题,是 WiFi 半双工共享介质在中转场景下的硬限制(~40-50%)。 解决方案:让一台 PC 做 AP,或 USB tethering + WiFi 混合连接。

附录:两台 Linux 间的硬件直连策略

如果 WiFi 热点不够快,两台 Linux 电脑间建立直连链路有哪些硬件方案?以下是三种主流选择的实测数据对比。

方案对比总览

指标 10GbE 直连 Thunderbolt/USB4 网络 WiFi Direct (P2P)
实际 TCP 吞吐 ⭐⭐⭐⭐⭐ ~9.5 Gbps ⭐⭐⭐⭐ ~11-18 Gbps ⭐⭐ ~0.2-1.2 Gbps
延迟 ~20-25 µs ~15-20 µs(最低) ~2-10 ms
双工 全双工 半双工(~11 Gbps/方向) 半双工(共享)
线缆长度 最长 100m <2m(被动),<3m(主动) ~30-100m(无线)
已有端口成本 需额外网卡 $15-60(仅线缆) $0
无端口时成本 $50-200(2 网卡+线) $30-120(扩展卡+线) $0-60(可能需要外置网卡)
配置难度
Linux 驱动成熟度 优秀 良好
可靠性 极高 良好(少量桥接 bug) 受干扰影响大

方案一:10GbE 直连(最推荐)

两条网线对插,配个 IP 就能跑满万兆。不需要交换机——现代网卡都支持 Auto MDI-X,普通 Cat6a 线直连即可。

推荐硬件: - 二手企业卡($25-40/张):Mellanox ConnectX-3/4、Intel X520/X540,PCIe 插上即用 - 全新消费卡($100-150/张):TP-Link TX401、ASUS XG-C100C - 线缆:Cat6a/Cat7 ~$15-30(短距离),或 SFP+ DAC 线 ~$20-40

配置

# 两台机器各配一个 IP,搞定
# PC1
ip addr add 10.0.0.1/24 dev eth1
# PC2
ip addr add 10.0.0.2/24 dev eth1

# 实测
iperf3 -c 10.0.0.2    # 预期 ~9.4-9.9 Gbps

优点:全双工、最稳定、CPU 开销最低(硬件卸载)、线长可达 100m。需要更高带宽时可以 bond 多张卡。

缺点:需要 PCIe 插槽(笔记本通常没有),除非用 Thunderbolt 转 10GbE 适配器。

方案二:Thunderbolt/USB4 网络

如果两台电脑都有 TB3/TB4 或 USB4 接口,只需一根线就能获得比万兆更快的连接。

关键认知:TB4 标称 40Gbps 是物理层速率。IP 网络跑在其上是半双工的,实际单向吞吐约 11-18 Gbps——差不多是 10GbE 的 1.2-1.8 倍,但远不是 40Gbps。

驱动:Linux 内核自带 thunderbolt-net 模块。插上线后会自动出现 thunderbolt0 网络接口。

# 加载驱动(一端执行即可,对端自动触发)
modprobe thunderbolt-net

# 配置 IP
# PC1
ip link set thunderbolt0 up
ip addr add 10.0.0.1/24 dev thunderbolt0

# PC2
ip link set thunderbolt0 up
ip addr add 10.0.0.2/24 dev thunderbolt0

# 设置巨帧 MTU 提升吞吐
ip link set thunderbolt0 mtu 65520

# 实测
iperf3 -c 10.0.0.2    # 预期 ~11-18 Gbps

实测数据(iperf3 TCP): - TB3 直连 (kernel 6.14):~9.4-10 Gbps - TB4/USB4 直连 (AMD):~13.7 Gbps(大数据包)、~11.7 Gbps(4K 小包) - Strix Halo USB4:~11 Gbps/方向

优点:单线缆即插即用(USB4);延迟最低(~15-20 µs);零额外成本(如果已有端口)。

缺点:半双工,总带宽有限;线缆极短(<2m);AMD USB4 和 Intel TB4 实现有差异;桥接模式下有已知性能 bug(TB→以太网方向可能掉到 ~5Mbps,kernel 6.14 中仍在修复)。

方案三:USB 2.5GbE 网卡

笔记本没有 PCIe 插槽也没有 Thunderbolt 时的折中选择。

芯片:Realtek RTL8156/B,USB 3.0 接口,支持 2.5GBASE-T。

实测吞吐:~2.3 Gbps(280 MB/s),接近线速。但有几个坑:

# 1. 检查驱动是否正确(必须 r8152,不是 cdc_ncm)
ethtool -i eth1    # driver: r8152 ✓

# 2. 检查协商速率和双工
ethtool eth1       # Speed: 2500Mb/s, Duplex: Full ✓

# 3. 如果驱动错误,手动修复
modprobe -r cdc_ncm
modprobe r8152

驱动陷阱:内核有时错误加载 cdc_ncm 而非 r8152,导致速度下降 2-4 倍(~500-750 Mbps)且频繁断连。内核 5.13+ 自带正确的 r8152 驱动。

成本:单个适配器 ~$15-30,配 Cat5e/Cat6 线即可。

方案四:WiFi Direct(P2P)——不推荐用于高速传输

两台电脑不经过 AP 直接通过 WiFi P2P 连接。理论可跑到 867Mbps (11ac 2×2),但 Linux 上的实际体验极差:

结论:除非绝无可能拉线,否则不要用 WiFi Direct。

决策树:选哪个方案?

两台电脑都有 Thunderbolt/USB4 接口?
├── 是 → 方案二(Thunderbolt),$15 买根线就行,~11-18 Gbps
└── 否 → 是否有 PCIe 插槽?
    ├── 是 → 方案一(10GbE),网卡 $25-40/张,~9.5 Gbps 全双工
    └── 否(笔记本无 PCIe)→ 方案三(USB 2.5GbE),$15-30/个,~2.3 Gbps

我个人的推荐排序:10GbE > Thunderbolt/USB4 > USB 2.5GbE >>> WiFi Direct

10GbE 用二手 Mellanox 卡性价比极高,全双工 9.5Gbps 极其稳定,几乎零维护。Thunderbolt 在有口的设备上很便利,但短线和半双工是其软肋。