作为Linux用户或管理员,掌握网络测速与诊断技能是应对突发需求、保障系统稳定运行的关键。本文将系统介绍Linux环境下从基础到进阶的各种网络测速方法与工具,助你构建完整的网络性能评估体系。
一、基础篇:网络测速的常用工具
1. speedtest-cli:便捷的公网带宽测试
speedtest-cli是Ookla Speedtest官方网站提供的命令行客户端,能够快速测量互联网上下行带宽。
安装方法:
# Ubuntu/Debian
sudo apt install speedtest-cli
# CentOS/RHEL
sudo yum install speedtest-cli
# 或使用pip安装
sudo pip3 install speedtest-cli
基本使用:
# 简单测速
speedtest-cli
# 列出并指定服务器测试
speedtest-cli --list
speedtest-cli --server <服务器ID>
# 简化输出
speedtest-cli --simple
# 以字节/秒为单位显示
speedtest-cli --bytes
输出示例:
Ping: 23.456 ms
Download: 125.67 Mbit/s
Upload: 45.89 Mbit/s
2. iperf3:专业的端到端带宽测试
iperf3是测量网络最大带宽性能的标准工具,尤其适用于测试两台主机之间的真实吞吐量。
安装:
# Ubuntu/Debian
sudo apt install iperf3
# CentOS/RHEL
sudo yum install iperf3
使用方法:
需要分别在服务器端和客户端执行命令。
服务器端(监听):
iperf3 -s
客户端(发起测试):
# 基本TCP带宽测试
iperf3 -c <服务器IP>
# 测试上传速度(反向测试)
iperf3 -c <服务器IP> -R
# 设置测试时长为30秒
iperf3 -c <服务器IP> -t 30
# 使用4个并行连接测试
iperf3 -c <服务器IP> -P 4
3. wget/curl:通过文件下载估算速度
通过下载已知大小的测试文件,可以快速估算当前网络下载速度。
# 使用wget并计时
time wget http://speedtest.tele2.net/100MB.zip
# 使用curl并输出下载速度
curl -o /dev/null -w "速度: %{speed_download} B/s\n" http://speedtest.tele2.net/100MB.zip
二、进阶篇:网络质量深度分析
1. ping:基础但强大的连通性与延迟测试
ping命令除了检查连通性,还能提供反映网络质量的详细统计信息。
# 发送10个ICMP包并统计
ping -c 10 www.baidu.com
# 显示时间戳(Linux)
ping -c 5 -D www.baidu.com
# 测试大包(用于发现MTU问题)
ping -c 4 -s 1472 www.baidu.com
# 安静模式,只显示摘要
ping -c 20 -q www.baidu.com
关键指标解读:
- 延迟(Latency):最小/平均/最大值,反映网络响应速度。
- 丢包率(Packet Loss):是网络稳定性的核心指标。
- RTT偏差:体现网络抖动(Jitter)情况。
2. mtr:集成的路径追踪与诊断工具
mtr结合了traceroute和ping的功能,能持续分析到目标主机的路径上每一跳的网络质量。
# 交互式运行
mtr www.baidu.com
# 生成报告并输出到文件
mtr -r -c 10 www.baidu.com > mtr_report.txt
# 显示IP地址而非主机名
mtr -n www.baidu.com
# 使用TCP协议探测(绕过ICMP限制)
mtr --tcp www.baidu.com
3. iftop:实时流量监控与分析
iftop可以实时显示各个网络连接的带宽占用情况,类似于顶部的网络版。
# 安装
sudo apt install iftop
# 监控默认网卡
sudo iftop
# 监控指定网卡(如eth0)
sudo iftop -i eth0
# 显示端口号
sudo iftop -P
# 不进行DNS解析,按带宽排序
sudo iftop -n -P
三、专业篇:企业级监控与统计
1. nload:简洁直观的实时流量仪表盘
nload提供分网卡的上/下行流量实时曲线图,一目了然。
# 安装
sudo apt install nload
# 使用,可左右箭头切换网卡
nload
nload eth0 # 指定网卡
2. vnStat:轻量级长期流量统计
vnStat是一个后台进程,长期记录网络流量数据并生成日、月、年报表。
# 安装
sudo apt install vnstat
# 查看实时流量(live)
vnstat -l
# 查看日报和月报
vnstat -d
vnstat -m
# 生成图形化输出(需安装vnstati)
vnstati -s -i eth0 -o /tmp/vnstat_summary.png
3. netperf:全面的网络性能基准测试套件
netperf可以模拟多种网络流量模式,测试TCP/UDP的吞吐量、请求/响应时间等。
# 安装
sudo apt install netperf
# 服务器端启动
netserver
# 客户端测试TCP流性能(带宽)
netperf -H <服务器IP> -t TCP_STREAM
# 测试UDP性能
netperf -H <服务器IP> -t UDP_STREAM
# 测试TCP请求/响应性能(交易速率)
netperf -H <服务器IP> -t TCP_RR
四、实战篇:场景化测试脚本
场景1:快速本地网络健康检查
这是一个快速的 Shell 脚本检查,用于日常巡检。
#!/bin/bash
echo “=== 网络连接测试 ===”
ping -c 4 8.8.8.8 | tail -2
echo -e “\n=== DNS解析测试 ===”
nslookup www.baidu.com | grep “Address:”
echo -e “\n=== 公网下载速度测试 ===”
speedtest-cli –simple
echo -e “\n=== 本地接口统计 ===”
ip -s link show | grep -A 3 “eth0|wlan0”
场景2:服务器间内网带宽测试
此脚本自动化两台服务器间的iperf3测试。
#!/bin/bash
SERVER=“目标服务器IP”
PORT=“5201”
echo “启动iperf3服务器端…”
ssh $SERVER “iperf3 -s -p $PORT -D”
echo “等待服务器启动…”
sleep 2
echo -e “\n=== TCP带宽测试 ===”
iperf3 -c $SERVER -p $PORT -t 30
echo -e “\n=== UDP带宽测试 ===”
iperf3 -c $SERVER -p $PORT -u -t 30 -b 100M
echo “清理…”
ssh $SERVER “pkill iperf3”
场景3:自动化持续网络监控
一个简单的 Python 脚本示例,用于周期性监控并记录日志。
#!/usr/bin/env python3
import subprocess
import time
import json
from datetime import datetime
def run_command(cmd):
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30)
return result.stdout.strip()
except subprocess.TimeoutExpired:
return “超时”
except Exception as e:
return f“错误: {str(e)}”
def test_ping(target=“8.8.8.8”):
cmd = f“ping -c 4 {target} | tail -1 | awk -F ‘/’ ‘{{print $5}}’”
latency = run_command(cmd)
return {“target”: target, “latency”: latency}
def test_speed():
cmd = “speedtest-cli –json”
result = run_command(cmd)
try:
data = json.loads(result)
return {
“download”: data.get(“download”, 0) / 1000000, # 转换为Mbps
“upload”: data.get(“upload”, 0) / 1000000,
“ping”: data.get(“ping”, 0)
}
except:
return None
def main():
log_file = “/var/log/network_monitor.json”
while True:
timestamp = datetime.now().isoformat()
data = {
“timestamp”: timestamp,
“ping”: test_ping(),
“speed”: test_speed(),
“interface”: run_command(“ip addr show | grep ‘state UP’”)
}
with open(log_file, “a”) as f:
f.write(json.dumps(data) + “\n”)
if data[“ping”].get(“latency”) and float(data[“ping”][“latency”]) > 100:
print(f“警告: 延迟过高 - {data[‘ping’][‘latency’]}ms”)
time.sleep(300) # 5分钟间隔
if __name__ == “__main__”:
main()
五、高级技巧与问题排查
1. 提升测速结果准确性
# 临时停止可能占用大量带宽的服务
sudo systemctl stop docker nginx mysql
# 多服务器对比测试,取最优
speedtest-cli –list | head -5 | awk ‘{print $1}’ | xargs -I {} speedtest-cli –server {} –simple
# 多次测试下载速度取平均值
for i in {1..5}; do
speedtest-cli –simple | grep “Download” | awk ‘{print $2}’
done | awk ‘{sum+=$1} END {print “平均下载速度: ” sum/NR ” Mbit/s”}’
2. 网络问题系统性诊断流程
遵循从本地到远端、从底层到应用的顺序排查:
- 检查本地配置:
ip addr, ip route。
- 测试网关连通性。
- 验证DNS解析:
nslookup, dig。
- 测试公网连通性:
ping 8.8.8.8。
- 分析网络路径:
mtr。
- 测量端到端带宽:
iperf3。
- 检查本地服务与端口占用:
netstat -tulpn。
六、建立你的网络测试工具箱
根据不同的使用场景,建议组合使用以下工具:
- 快速日常检查:
ping + speedtest-cli,配合nload实时看一眼。
- 深度性能分析:
iperf3(带宽),mtr(路径),iftop(流量分析)。
- 长期监控统计:
vnStat(流量日志),自定义监控脚本,或采用Prometheus + Grafana企业级方案。
实用建议:
- 建立基准:在网络正常时记录关键指标(延迟、带宽),作为后续对比的基准线。
- 定期测试:形成定期(如每周)执行完整测试的习惯。
- 交叉验证:不依赖单一工具的结果,使用不同工具和方法相互印证。
- 记录与分析:保存历史测试数据,便于分析网络性能的变化趋势。
- 了解上下文:清楚你的网络拓扑、带宽合同限制以及应用对网络的需求。
掌握这些工具和方法,你不仅能从容应对“如何测网速”的提问,更能主动掌控网络健康状况,为系统稳定性和性能优化提供坚实的数据支撑。