一、为什么丢包不高也会卡?
很多人只看丢包率:
text
丢包率 0%
平均延迟 35ms
所以网络应该没问题
但实时业务看的是连续性。
比如下面两条链路:
| 指标 | 链路 A | 链路 B |
|---|---|---|
| 平均延迟 | 40ms | 45ms |
| 丢包率 | 0% | 0% |
| 最大延迟 | 55ms | 850ms |
| 抖动 | 8ms | 220ms |
如果只看平均延迟,两条链路差不多。但实际体验上,链路 B 会明显卡顿。远程桌面会突然停一下,会议声音会断一截,游戏角色会瞬移。
所以实时网络排查要重点看:
- 平均延迟
- 最大延迟
- P95 延迟
- 抖动
- 连续异常次数
- 上行是否被占满
- Wi-Fi 是否有干扰
稳如狗网络这类工具在做体验优化时,也会关注这些"平均值之外"的指标,因为真正影响体感的往往不是平均值,而是长尾和波动。
二、第一步:用 ping 看连续延迟波动
Windows:
powershell
ping 223.5.5.5 -n 100
ping 1.1.1.1 -n 100
Linux/macOS:
bash
ping -c 100 223.5.5.5
ping -c 100 1.1.1.1
重点不要只看最后的平均值,而要观察中间是否出现这种情况:
text
来自 223.5.5.5 的回复: 字节=32 时间=18ms TTL=56
来自 223.5.5.5 的回复: 字节=32 时间=20ms TTL=56
来自 223.5.5.5 的回复: 字节=32 时间=421ms TTL=56
来自 223.5.5.5 的回复: 字节=32 时间=19ms TTL=56
来自 223.5.5.5 的回复: 字节=32 时间=688ms TTL=56
如果 100 次里偶尔出现几次 300ms、500ms、1000ms,这种抖动就足够让远程桌面和会议产生明显卡顿。
三、PowerShell 脚本:统计平均值、最大值和抖动
手动看 ping 输出比较累,可以用 PowerShell 做一个简单统计。
文件名:jitter_probe.ps1
powershell
param(
[string]$Target = "223.5.5.5",
[int]$Count = 100
)
$latencies = @()
$lost = 0
for ($i = 1; $i -le $Count; $i++) {
$result = Test-Connection -ComputerName $Target -Count 1 -ErrorAction SilentlyContinue
if ($result) {
$latencies += [double]$result.ResponseTime
Write-Host ("{0}/{1} {2} ms" -f $i, $Count, $result.ResponseTime)
} else {
$lost++
Write-Host ("{0}/{1} timeout" -f $i, $Count)
}
Start-Sleep -Milliseconds 300
}
if ($latencies.Count -gt 0) {
$avg = ($latencies | Measure-Object -Average).Average
$max = ($latencies | Measure-Object -Maximum).Maximum
$min = ($latencies | Measure-Object -Minimum).Minimum
$jitter = $max - $min
$lossRate = [math]::Round($lost / $Count * 100, 2)
Write-Host ""
Write-Host "Target: $Target"
Write-Host "Avg: $([math]::Round($avg, 2)) ms"
Write-Host "Min: $min ms"
Write-Host "Max: $max ms"
Write-Host "Jitter: $jitter ms"
Write-Host "Loss: $lossRate%"
}
运行:
powershell
powershell -ExecutionPolicy Bypass -File .\jitter_probe.ps1 -Target www.wenrugou.net -Count 100
可以按下面标准粗略判断:
| 抖动范围 | 体感 |
|---|---|
| 0-20ms | 通常比较稳定 |
| 20-50ms | 会议和远程桌面可能偶尔感觉不顺 |
| 50-150ms | 实时业务明显受影响 |
| 150ms 以上 | 很容易卡顿、断音、画面停顿 |
四、第二步:判断是本地网络还是外部链路
建议同时测三个目标:
powershell
powershell -ExecutionPolicy Bypass -File .\jitter_probe.ps1 -Target 192.168.1.1 -Count 100
powershell -ExecutionPolicy Bypass -File .\jitter_probe.ps1 -Target 223.5.5.5 -Count 100
powershell -ExecutionPolicy Bypass -File .\jitter_probe.ps1 -Target 1.1.1.1 -Count 100
判断思路:
| 现象 | 可能原因 |
|---|---|
| ping 路由器都抖 | 本地 Wi-Fi、网卡、路由器负载问题 |
| ping 路由器稳,公网 IP 抖 | 宽带出口、运营商路径或上行拥塞 |
| 国内 DNS 稳,海外 DNS 抖 | 跨境路径或国际出口波动 |
| 所有目标都偶发超时 | 本机、路由器、Wi-Fi 干扰或局域网拥塞 |
这个步骤很关键,因为很多人一上来怀疑远端服务,其实问题可能就在本地无线网络。
五、第三步:检查 Wi-Fi 干扰
如果你用的是 Wi-Fi,实时业务卡顿很常见。
Windows 可以先看无线信息:
powershell
netsh wlan show interfaces
关注:
text
Signal
Radio type
Channel
Receive rate
Transmit rate
如果信号低、速率忽高忽低,或者 2.4GHz 信道很拥挤,就容易出现短时间抖动。
也可以查看附近无线网络:
powershell
netsh wlan show networks mode=bssid
常见优化方法:
- 尽量使用 5GHz 或 6GHz。
- 远程桌面、会议、游戏尽量接网线。
- 避免路由器旁边放蓝牙音箱、微波炉、大功率电器。
- 不要让路由器长期高负载跑下载任务。
- 2.4GHz 尽量使用 1、6、11 这类常见非重叠信道。
如果 ping 路由器都有明显抖动,优先解决 Wi-Fi,而不是继续折腾远端线路。
六、第四步:排查上行被占满
实时业务很怕上行拥塞。
很多家庭宽带下行很高,上行却不高。一旦有人上传文件、同步网盘、开直播、跑备份,会议和远程桌面就可能明显卡。
Windows 可以看当前连接:
powershell
Get-NetTCPConnection | Group-Object State | Sort-Object Count -Descending
也可以查看网络适配器流量:
powershell
Get-Counter "\Network Interface(*)\Bytes Sent/sec"
Get-Counter "\Network Interface(*)\Bytes Received/sec"
如果你怀疑后台程序占用上行,可以打开资源监视器:
powershell
resmon
进入"网络"标签,看哪个进程正在大量发送数据。
建议排查时先关闭:
- 云盘同步
- 自动备份
- P2P 下载
- 系统更新
- 大文件上传
- 直播推流
然后重新测试远程桌面或会议。如果卡顿明显减少,就说明问题可能和上行拥塞有关。
七、第五步:用 pathping 看路径丢包
Windows 上 pathping 比普通 tracert 多了统计信息。
powershell
pathping 1.1.1.1
它会先探测路径,再统计每一跳的丢包情况。
需要注意:
text
中间节点丢包不一定是真丢包。
很多路由器会限制 ICMP 响应。
如果最后一跳没有丢包,中间某一跳显示丢包,不能直接判定故障。
更值得关注的是:
- 最后一跳是否丢包。
- 某一跳之后所有节点都开始丢包。
- 延迟是否从某一跳开始明显升高。
- 同一时间段重复测试结果是否一致。
八、Linux/macOS:用 mtr 看连续路径质量
如果你在 Linux 或 macOS 上,可以用 mtr:
bash
mtr -rwzc 100 1.1.1.1
mtr -rwzc 100 www.wenrugou.net
关注字段:
| 字段 | 含义 |
|---|---|
| Loss% | 丢包率 |
| Avg | 平均延迟 |
| Wrst | 最大延迟 |
| StDev | 延迟波动 |
如果终点 Loss% 为 0,但中间某一跳 Loss% 很高,可能只是中间设备不愿意回复 ICMP。
如果终点也有 Loss%,并且 Wrst、StDev 很高,就要重点关注。
九、实时业务的排障顺序
遇到远程桌面、会议、语音卡顿,可以按这个顺序:
text
1. ping 路由器,看本地 Wi-Fi 是否抖
2. ping 国内 DNS,看宽带出口是否稳定
3. ping 海外目标,看跨境路径是否抖
4. 用 PowerShell 脚本统计最大延迟和抖动
5. 检查是否有人上传、同步、下载
6. 用 pathping 或 mtr 看路径质量
7. 切换有线网络再次对比
8. 换时间段测试,判断是否高峰期问题
9. 记录结果,而不是只凭感觉判断
建议记录模板:
csv
time,network,target,avg_ms,max_ms,jitter_ms,loss_percent,note
10:00,wifi,router,2,18,16,0,normal
10:05,wifi,public_dns,28,620,592,0,spike
10:10,ethernet,public_dns,24,48,24,0,better
只要有了这些数据,就能很快判断:
text
是 Wi-Fi 问题?
是上行拥塞?
是运营商出口波动?
还是远端路径质量差?
十、总结
实时网络问题不能只看丢包率,也不能只看平均 Ping。真正影响体感的往往是最大延迟、P95 延迟、抖动和短时间队列拥塞。
排查时先从本地开始,再逐步向外扩展:路由器、宽带出口、跨境路径、远端服务。这样能避免把所有问题都归因到"服务器慢"或"网络玄学"。
稳如狗网络在这类场景下的思路也类似:先关注连续性和稳定性,再看峰值。对远程桌面、会议、语音、游戏这些实时业务来说,稳定比瞬时速度更重要。
参考资料
- 稳如狗网络工具箱:https://www.wenrugou.net/tools
- iperf3 官方文档:https://iperf.fr/
- MTR 项目说明:https://www.bitwizard.nl/mtr/