准备环境时要控制变量,首先在测试端部署稳定的发射与接收节点,建议使用云主机或物理服务器,联网方式尽量固定(同一出口带宽、同一子网)。确保测试机的CPU与I/O不会成为瓶颈,关闭不必要的服务与防火墙干扰。对端目标应为新加坡电信机房的真实出口或被测业务IP(标注为CN2节点),若可能同时在不同运营商做对比。
网络层面记录路径信息(BGP、ASN)、链路带宽与MTU,准备好时间同步(NTP)以便对比时间序列数据。为避免偶然性,制定测试窗口(低峰、峰值、连续24小时、连续7天),并准备好日志与抓包工具(tcpdump/tshark)以便事后重放与分析。
需要的工具列表:ping、mtr(或mtr --report)、iperf3(测吞吐与UDP丢包/抖动)、hping3(特殊报文/端口)、tcpdump/tshark(抓包)、以及长期监测的Smokeping、Zabbix或Prometheus+blackbox exporter。测试前确认目标端口与ICMP/UDP/TCP的放行策略。
常规命令与参数示例:使用 ping 连续测试延迟与丢包率:
ping -c 100 -i 0.2 -s 56 <目标IP>,统计丢包与RTT(min/avg/max/mdev)。使用 mtr 做逐跳丢包定位:
mtr --report --report-cycles 100 <目标IP>,mtr 会显示每跳的丢包百分比与平均延迟,便于定位丢包发生点。
使用 iperf3 做吞吐与UDP抖动测试:
iperf3 -c <目标IP> -u -b 100M -t 60 -i 1,iperf3 报告会给出丢包、抖动(jitter)与抛弃包数。若需模拟TCP负载,去掉 -u 参数。hping3 可用于发送大量定制ICMP/TCP报文来测试状态依赖型丢包:
hping3 -S -p 80 --flood <目标IP>(注意风险,需授权)。
在可控情况下用 tcpdump -w capture.pcap host <目标IP> 保存报文,使用 Wireshark/tshark 计算丢包、重传、延迟分布与 TCP 重传率。对UDP语音类应用关注抖动与间片丢包,常用 RTP/VoIP 分析插件。
测试设计要覆盖时变性。建议至少包含:短期连续测试(5-10分钟的高频 ping/mtr 多轮)、中期测试(1小时的iperf3/udp 测试)以及长期周期采样(每5分钟一次的ping或Prometheus抓取,持续7天)。在不同时段(0-6点、工作时间、晚高峰)分别采样。
并发与协议:测试应同时做TCP与UDP场景,且在不同并发下检测链路行为(单流/多流/爆发流量),例如用 iperf3 的 -P 并发参数。注意模拟真实业务的报文字段与包大小,VoIP 可用小包高频率,下载/视频则用大包与持续带宽。
计算丢包率时采用比例估计:丢包率 = (发送包数 - 接收包数) / 发送包数。为降低置信区间,单次测试包数应不少于几百到几千包,采样多次并取中位数或95%分位以避免异常点误导结论。
先看端到端的时间序列:如果丢包与延迟突增同时出现且跨多跳,则可能是出口/承运商拥塞或链路抖动;若 mtr 显示某一跳开始出现持续丢包,则该跳很可能为丢包源头(但需注意 ICMP 限速会导致误判)。
结合抓包可看重传与零窗口等 TCP 行为,若大量 TCP 重传说明链路丢包或突发丢包;若只是偶发单包丢失且很快恢复,多为短暂抖动。查看路由变化(traceroute、BGP 信息)可以判断是否路由抖动或路径切换导致丢包。
步骤示例:1) 用 mtr 定位跳点;2) 在该跳点两端抓包确认丢包发生点;3) 若可能联系承运商查看链路、端口错误或光纤告警;4) 在不同时间与不同发射端重复测试,排除本地网段问题;5) 检查防火墙/ACL、流量整形与带宽策略是否触发丢包。
长期监控建议部署专用监控集群,常见方案是 Prometheus + blackbox_exporter + Grafana 或使用 Smokeping 来展示丢包与延迟趋势。监控指标包括:丢包率、平均延迟、抖动(jitter)、TCP重传率、链路错误计数与路由变化次数。
报警规则示例:当5分钟内丢包率>1%且平均延迟上升>50ms,或连续3次采样抖动超阈值,则触发告警。告警通道建议同时通报短信/邮件/钉钉并附带最近的mtr/traceroute/抓包文件链接,便于运维快速定位。