本文目录导读:

nuttcp 是一个非常轻量、高效且功能强大的网络性能测试工具,常用于测量 TCP 和 UDP 的吞吐量、丢包率、延迟等指标,相比 iperf3,它对于低带宽、高延迟或资源受限的环境(如嵌入式设备、物联网场景)有更好的适应性。
下面详细说明如何使用 nuttcp 进行网络测试,包括基本安装、核心参数、典型测试场景以及结果解读。
安装
- Linux(Ubuntu/Debian):
sudo apt install nuttcp - macOS(Homebrew):
brew install nuttcp - Windows: 需要从官网或第三方源码编译(官方主要支持 Unix/Like 系统)。
- 编译安装: 从官网下载源码,执行
make和make install。
基本架构与测试流程
nuttcp 采用经典的 客户端-服务器(C/S) 模式。
- 启动服务端:在接收数据的机器上运行
nuttcp -S。 - 运行客户端:在发送数据的机器上运行
nuttcp [选项] <服务端IP地址>。
注意:如果不启动服务端,客户端会默认启动一个短暂的临时服务端,并在测试结束后自动关闭(适用于一次性快速测试)。
核心参数详解
| 参数 | 作用 | 说明 |
|---|---|---|
-S |
作为服务端运行 | 长期监听,等待客户端连接 |
-i |
间隔秒数 | 定期(如每1秒)输出当前传输速率,代替最终总结果 |
-l |
缓冲区大小 | 设置读/写缓冲区(单位:字节,支持 K、M) |
-n |
数据块数量 | 发送指定数量的 -l 大小的数据块(-n 1000) |
-N |
使用非阻塞 I/O | 更贴近真实应用场景(如 HTTP 请求) |
-p |
端口号 | 指定通信端口(默认 5000) |
-R |
反向模式 | 客户端接收,服务端发送(测试下行到客户端的速度) |
-u |
使用 UDP 协议 | 默认是 TCP,加上此参数改为 UDP |
-v |
详细输出 | 打印更多调试信息 |
-w |
TCP 窗口大小 | 设置 TCP 发送/接收窗口(影响高延迟链路) |
-T |
测试时长(秒) | 测试持续指定时间后自动结束(-T 30) |
-r |
双向测试 | 客户端和服务端同时收发数据 |
-P |
并行线程数 | 启动多个连接并行测试(-P 4) |
典型测试场景与命令
场景1:TCP 带宽测试(最常用)
-
服务端(Server IP: 192.168.1.10):
nuttcp -S(保持后台运行) -
客户端(发送数据):
# 默认测试约 10 秒,输出总吞吐量 nuttcp 192.168.1.10 # 指定测试 30 秒(-T 30) nuttcp -T 30 192.168.1.10 # 每 1 秒输出一次实时速率(-i 1) nuttcp -i 1 192.168.1.10
输出示例:
7500 MB / 10.00 sec = 667.97 Mbps 3 %TX 5 %RX解读:10秒传输了795.75 MB数据,平均速率 667.97 Mbps,发送端 CPU 占用 3%,接收端 5%。
场景2:UDP 带宽与丢包测试
nuttcp 的 UDP 测试非常强大,因为 iperf3 的 UDP 测试在某些场景下有性能瓶颈,而 nuttcp 更稳定。
-
服务端:
nuttcp -S -u -
客户端:
# 以 100 Mbps 的速率发送 UDP 数据包(-R 100M) nuttcp -u -R 100M 192.168.1.10 # 指定发送 10 万个小包(每个 1472 字节,避免 IP 分片) nuttcp -u -n 100000 192.168.1.10
输出示例:
0000 Mbps TX, 99.9950 Mbps RX, 0.005% loss解读:发送速率100 Mbps,接收速率约99.995 Mbps,丢包率0.005%。这是衡量 UDP 传输质量的关键指标。
场景3:高延迟链路(长肥网络)测试
对于跨洲际、卫星链路等高带宽高延迟场景,需要调大 TCP 窗口:
# 窗口设为 256KB(-w 256K) nuttcp -w 256K -i 1 -T 30 192.168.1.10
场景4:双向同时测试(上行 + 下行)
# 在客户端同时发送和接收数据 nuttcp -r -T 30 192.168.1.10
输出会显示两个方向的吞吐量。
场景5:反向测试(测试客户端下载速度)
有时服务端在公网,客户端在内网,需要从服务端下载数据回客户端:
# 客户端执行(-R 表示反向) nuttcp -R -T 30 192.168.1.10 # 等价于:服务端作为发送方,客户端作为接收方
高级用法与技巧
1 测试 UDP 非饱合带宽(指定速率)
在 UDP 测试中,通常想测试在特定速率下链路的丢包率,而不是跑满带宽。
nuttcp -u -R 500K -T 20 192.168.1.10 # 以 500 Kbps 的速率发送 UDP 数据,持续 20 秒
2 使用文件模式(模拟真实应用)
通过 -F 参数可以指定传输文件,模拟真实的文件传输场景:
# 服务端 nuttcp -S -F receive.dat # 客户端 nuttcp -F send.dat 192.168.1.10
这会将 send.dat 发送到服务端并保存为 receive.dat。
3 连续压测(不限制时长)
如果希望测试一直进行,直到手动停止:
# 使用 -N 非阻塞模式,并用 -n 指定大量数据块 # 例如发送 10 亿个 8K 数据块(约 8TB) nuttcp -l 8K -n 1000000000 192.168.1.10 # 按 Ctrl+C 停止测试
常见问题与优化
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 速度远低于预期 | 窗口大小太小(高延迟) | 增加 -w 参数(如 -w 1M) |
| 防火墙或限速 | 检查 iptables、qdisc 等 |
|
| CPU 瓶颈 | 观察 %TX %RX 是否接近 100% |
|
| UDP 丢包率高 | 网络拥塞或缓冲区不足 | 降低发送速率 -R,或增大系统缓冲区 sysctl -w net.core.rmem_max=... |
| 测试不稳定 | 客户端和服务端时间不同步 | 确保使用 NTP 同步(尤其是长时间测试) |
| 端口冲突 | nuttcp -S 启动失败 |
换用 -p 指定其他端口 |
比较:nuttcp vs. iperf3
| 特性 | nuttcp | iperf3 |
|---|---|---|
| 安装包大小 | 极小(< 100KB) | 较大 |
| UDP 性能 | 极优,无性能天花板 | 高带宽 UDP 测试常见 CPU 瓶颈 |
| 单线程优化 | 优秀 | 一般(有时需多线程弥补) |
| 资源占用 | 极低 | 稍高 |
| 实时输出 | -i 参数 |
-i 参数(格式更丰富) |
| 反向模式 | -R |
-R |
| 社区支持 | 较小,文档相对简略 | 非常活跃,文档和教程丰富 |
选择建议:
- 如果你在高带宽 UDP 测试(如视频流、高频交易网络)或嵌入式/低资源环境下测试,nuttcp 是更好的选择。
- 如果追求更丰富的报告格式(JSON 输出)、多端口测试或更广泛的社区支持,iperf3 更合适。
快速检查清单
# 1. 服务端(后台运行) nohup nuttcp -S & # 2. TCP 默认测试(10秒) nuttcp <server_ip> # 3. TCP 带实时输出(每1秒) nuttcp -i 1 <server_ip> # 4. UDP 测试(100Mbps速率,30秒) nuttcp -u -R 100M -T 30 <server_ip> # 5. 高延迟场景(窗口256K) nuttcp -w 256K -i 5 <server_ip> # 6. 双向测试 nuttcp -r -T 20 <server_ip>
通过以上步骤,你应该可以熟练使用 nuttcp 进行各种场景的网络性能测试,如果遇到特定问题(如跨防火墙、IPv6、自定义速率等),可以进一步查阅官方文档或结合 -v 选项调试。
标签: 网络测试