mtr [选项] 主机名或IP地址
| 选项 | 说明 |
|---|---|
| -4 | 只使用IPv4 |
| -6 | 只使用IPv6 |
| -u | 使用UDP数据包(默认ICMP) |
| -T | 使用TCP数据包(SYN包) |
| -P 端口 | 设置TCP/UDP端口号 |
| -i 秒数 | 设置发送数据包的间隔时间(默认1秒) |
| -c 次数 | 设置发送数据包的数量后退出 |
| -s 大小 | 设置数据包大小(字节) |
| -r | 报告模式(输出统计报告后退出) |
| -w | 宽报告模式(显示主机名) |
| -C | 显示ASN(自治系统号)信息 |
| -l | 使用原始IP格式输出 |
| -z | 显示统计信息 |
| -b | 同时显示IP和主机名 |
| -n | 不进行DNS解析(显示IP地址) |
| -a IP地址 | 设置源IP地址 |
| -f TTL | 设置起始TTL值(默认1) |
| -m TTL | 设置最大TTL值(默认30) |
| -o 字段 | 指定输出字段(LRSD BAWV等) |
| -h | 显示帮助信息 |
| -v | 显示版本信息 |
| 字段 | 说明 | 正常范围 |
|---|---|---|
| Loss% | 丢包率百分比 | 0-1%(优秀) 1-5%(良好) >5%(需关注) |
| Snt | 已发送的数据包数量 | - |
| Last | 最近一个数据包的延迟(ms) | <50ms(优秀) 50-100ms(良好) >100ms(一般) |
| Avg | 平均延迟(ms) | <50ms(优秀) 50-100ms(良好) >100ms(一般) |
| Best | 最佳延迟(ms) | 越低越好 |
| Wrst | 最差延迟(ms) | 波动越小越好 |
| StDev | 延迟标准差(ms) | <10ms(稳定) 10-30ms(一般) >30ms(不稳定) |
# 交互式模式(默认)
mtr google.com
# 指定使用IPv4
mtr -4 8.8.8.8
# 指定使用IPv6
mtr -6 google.com
图:mtr交互式界面示例
# 发送10个数据包后生成报告
mtr -r -c 10 google.com
# 宽报告模式(显示主机名)
mtr -w -c 10 google.com
# 报告模式,不进行DNS解析
mtr -r -n -c 10 8.8.8.8
# 报告模式,显示ASN信息
mtr -r -C -c 10 google.com
# 报告模式输出示例:
Start: 2024-03-15T10:30:00+0800
HOST: localhost Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.168.1.1 0.0% 10 2.1 2.3 1.9 3.2 0.4
2.|-- 10.0.0.1 0.0% 10 5.6 6.2 5.1 8.9 1.2
3.|-- 203.0.113.1 0.0% 10 12.3 13.1 11.8 15.6 1.1
4.|-- 72.14.238.1 0.0% 10 25.6 26.3 24.9 28.7 1.3
5.|-- 216.239.48.1 0.0% 10 30.1 31.2 29.8 33.5 1.2
6.|-- google.com 0.0% 10 32.5 33.1 31.9 35.6 1.1
# 使用TCP SYN包(模拟HTTP连接)
mtr -T google.com
# 使用TCP并指定端口443(HTTPS)
mtr -T -P 443 google.com
# 使用UDP数据包
mtr -u 8.8.8.8
# 调整数据包大小(默认60字节)
mtr -s 100 google.com
# 调整发送间隔(默认1秒)
mtr -i 2 google.com
# 调整起始TTL和最大TTL
mtr -f 3 -m 20 google.com
# 不进行DNS解析(只显示IP)
mtr -n google.com
# 同时显示IP和主机名
mtr -b google.com
# 指定输出字段(L=丢包率,R=接收顺序,S=发送数量,D=延迟)
mtr -o "LRSD" google.com
# 使用原始IP格式输出
mtr -l google.com
# CSV格式输出(便于脚本处理)
mtr --csv -c 10 google.com > report.csv
# XML格式输出
mtr --xml -c 10 google.com > report.xml
# 对比不同协议的表现
mtr -T -c 10 google.com # TCP
mtr -u -c 10 google.com # UDP
mtr -c 10 google.com # ICMP
# 诊断特定端口的连通性
mtr -T -P 443 google.com # HTTPS端口
mtr -T -P 80 google.com # HTTP端口
mtr -u -P 53 8.8.8.8 # DNS端口
# 从特定源IP发送(多网卡环境)
mtr -a 192.168.1.100 google.com
# 长时间监控(100个数据包)
mtr -c 100 -i 2 google.com | tee mtr_log.txt
# 诊断到数据库服务器的连接问题
mtr -T -P 3306 db-server.example.com
# 诊断到Web服务器的连接问题
mtr -T -P 80 web-server.example.com
# 长时间监控网络质量
mtr -c 100 -i 5 target-server.example.com > network_quality.log
# 分析日志,找出问题节点
grep -E " [0-9]+\.[0-9]+%| [0-9]+ms " network_quality.log
#!/bin/bash
# network_diagnosis.sh
TARGETS=("google.com" "8.8.8.8" "github.com")
LOG_FILE="/var/log/network_diagnosis_$(date +%Y%m%d).log"
echo "=== 网络诊断报告 $(date) ===" >> $LOG_FILE
for target in "${TARGETS[@]}"; do
echo "诊断目标: $target" >> $LOG_FILE
mtr -r -c 10 "$target" >> $LOG_FILE
echo "---" >> $LOG_FILE
done
# 检查是否有高丢包率
if grep -q " [5-9][0-9]\.[0-9]+\%\|[1-9][0-9][0-9]\.[0-9]+\%" $LOG_FILE; then
echo "警告:检测到高丢包率!" >> $LOG_FILE
mail -s "网络质量警报" admin@example.com < $LOG_FILE
fi
# 监控到多个目标的网络路径
TARGETS=(
"8.8.8.8" # Google DNS
"1.1.1.1" # Cloudflare DNS
"github.com" # GitHub
"aws.amazon.com" # AWS
)
for target in "${TARGETS[@]}"; do
echo "测试目标: $target"
mtr -r -c 20 "$target" | tail -10
echo ""
done
# 定期监控脚本
#!/bin/bash
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "=== $TIMESTAMP ===" >> /var/log/isp_monitor.log
mtr -r -c 10 8.8.8.8 >> /var/log/isp_monitor.log
sleep 300 # 每5分钟执行一次
done
# 测试到游戏服务器的延迟
mtr -c 50 -i 0.5 game-server.example.com
# 测试到视频会议服务器的网络质量
mtr -c 30 -i 1 zoom.us
# 重点关注的指标:
# 1. 平均延迟(Avg):影响实时性
# 2. 延迟波动(StDev):影响稳定性
# 3. 丢包率(Loss%):影响音视频质量
# 优化建议脚本:
#!/bin/bash
SERVER="your-game-server.com"
REPORT=$(mtr -r -c 20 "$SERVER")
AVG_LATENCY=$(echo "$REPORT" | tail -1 | awk '{print $7}')
LOSS_PERCENT=$(echo "$REPORT" | tail -1 | awk '{print $3}')
STDEV=$(echo "$REPORT" | tail -1 | awk '{print $9}')
echo "网络质量分析:"
echo "平均延迟: $AVG_LATENCY ms"
echo "丢包率: $LOSS_PERCENT"
echo "延迟波动: $STDEV ms"
if (( $(echo "$LOSS_PERCENT > 1" | bc -l) )); then
echo "建议:存在丢包问题,请检查网络连接"
elif (( $(echo "$AVG_LATENCY > 100" | bc -l) )); then
echo "建议:延迟较高,可能影响游戏体验"
elif (( $(echo "$STDEV > 30" | bc -l) )); then
echo "建议:网络不稳定,延迟波动较大"
else
echo "网络质量良好"
fi
ping -c 10 目标 确认问题mtr 目标 查看完整路径mtr -c 100 -i 2 目标 收集数据#!/bin/bash
# complete_network_diagnosis.sh
TARGET=$1
REPORT_FILE="/tmp/network_report_$(date +%Y%m%d_%H%M%S).txt"
echo "网络诊断报告" > $REPORT_FILE
echo "目标: $TARGET" >> $REPORT_FILE
echo "时间: $(date)" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "1. 基本ping测试:" >> $REPORT_FILE
ping -c 10 "$TARGET" >> $REPORT_FILE 2>&1
echo "" >> $REPORT_FILE
echo "2. ICMP路径分析:" >> $REPORT_FILE
mtr -r -c 10 "$TARGET" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "3. TCP路径分析(端口80):" >> $REPORT_FILE
sudo mtr -T -P 80 -r -c 10 "$TARGET" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "报告已保存到: $REPORT_FILE"
cat $REPORT_FILE
# Ubuntu/Debian
sudo apt install mtr
# RHEL/CentOS
sudo yum install mtr
# Fedora
sudo dnf install mtr
# macOS (Homebrew)
brew install mtr
# 从源码编译
git clone https://github.com/traviscross/mtr.git
cd mtr
./bootstrap.sh
./configure
make
sudo make install
A: 主要区别:
| 功能 | mtr | traceroute |
|---|---|---|
| 工作模式 | 实时持续更新 | 单次运行后结束 |
| 统计信息 | 提供详细的延迟、丢包统计 | 只显示单次延迟 |
| 交互性 | 支持交互式操作 | 无交互功能 |
| 数据包类型 | 支持ICMP、TCP、UDP | 通常只支持一种协议 |
| 输出格式 | 支持多种格式(CSV、XML等) | 通常只有文本格式 |
A: 可能有以下原因:
A: 使用mtr可以帮助定位问题:
# 找出高丢包率的节点
mtr -r -c 20 google.com | awk '$3 > 5 {print "节点", $2, "丢包率:", $3"%"}'
| 工具 | 主要功能 | 输出形式 | 最佳用途 |
|---|---|---|---|
| mtr | 实时路径追踪和统计 | 交互式/报告 | 网络质量深度分析 |
traceroute |
显示数据包路径 | 静态输出 | 快速路径查看 |
ping |
测试连通性和延迟 | 统计输出 | 基本连通性测试 |
tracepath |
类似traceroute,无需root | 静态输出 | 快速路径追踪 |
tcptraceroute |
使用TCP协议追踪 | 静态输出 | 绕过ICMP限制 |
pathping |
Windows的类似工具 | 统计输出 | Windows网络诊断 |