VPN 通话中的抖动与丢包:该比较什么
延迟但平滑的语音与断续成空洞的语音是两种不同的故障。比较应用自身的统计、本地无线链路和一条已加负载的路径。
机械般的语音和掉落的音节听起来不同,因为它们是两种不同的故障。抖动改变数据包抵达的时刻;丢包则意味着它们根本没有到达。两者都可能在速度测试报告下载正常时发生,因为吞吐量与按时送达衡量的是不同的东西。在改动任何设置之前,先让证据与听到的声音对应起来。
为什么迟到与丢失的数据包听起来不同
媒体以稳定速率离开发送端,而真实网络以不均匀的间隔送达。应用会做一点缓冲来抹平这种不均,用延迟换取连续性:把缓冲调大,对话显得拖沓;调小,空洞就出现。超过播放截止时间才到达的数据包实际上已经丢失,即使它从未被丢弃。这就是为什么两条带宽相同的连接可能产生截然不同的通话。
方向也很重要。进入和出去的媒体可能走不同的路径,尤其当一侧在移动网络上时。
在糟糕时段里该读的数字
在应用自身提供统计的地方就用它,并且要在通话变差时读取,而不是在结束后才看。媒体中继往往是和服务网站不同的主机,所以 ping 首页测到的并不是通话所用的路径。分别查看丢包百分比、往返时间和抖动,并记下是客户端在发送还是接收问题。通话期间 VPN 重连是第三个要记录的事件,不要与其它事件混在一起。
统计面板的截图胜过对通话的记忆,因为数字之后还能比较。二十秒的丢包百分比能告诉你路径此刻是否在丢弃数据包,却不能告诉你 丢包是否成串出现、以及何时开始。
为此,应在第二种条件下重复测量,而不是把一个窗口当作判决。在不同条件下取的两个窗口,比一个不设任何条件的长窗口说明得更多。
抖动缓冲对截止时间做了什么
抖动缓冲把到达的数据包短暂留住,使不均匀的到达——即 RFC 3393 定义为指标的延迟变化——能按规律的时钟播放。缓冲大小决定了播放截止时间:任何晚于该截止时间到达的数据包都会被丢弃,无论其内容如何。各编解码器能掩盖的程度不同,能对缺失帧做插值的编解码器可以掩盖一次丢失,却掩盖不了一连串。这就是为什么同样的丢包百分比在不同编解码器上给出不同的通话质量。
调整缓冲是一种权衡,而不是修复。更大的缓冲以对话延迟为代价换来连续性,而它无法找回在截止时间之后到达的数据包。
在出口之前比较无线与负载
保持出口和应用不变,一次只改变一个本地条件。信号图标强并不说明信道拥塞。如果问题跟着某个房间或某个接入点走,下一个要查的就是无线。
ping -c 50 -i 0.2 203.0.113.9
mtr -rw -c 20 203.0.113.9
ping 给出丢包计数和可在不同条件间比较的离散程度,mtr 则显示沿途每一跳的丢包。中间跳失败而后面的跳仍能回应,通常是降低了 ICMP 的优先级,而不是丢弃用户流量。在受控上传进行时把两者都重复一遍,因为空闲时良好、有负载时不可用的链路指向的是排队,而不是 VPN。如果只有一个条件能重现问题,另一个条件刚刚被排除。
只修比较所支持的那一项
每一次比较只支持一项修复,同时做几项会毁掉证据。本地路径弱需要更好的信道或以太网,竞争流量需要调度或队列规则,而一个糟糕的出口需要在相同条件下比较另一个出口。更换 VPN 传输方式时,保持配置文件有效,并一次只改一个变量。用正常的后台活动重测同一段对话,而不是用速度测试分数是否上升来判断成功。
记下方向、丢包、抖动、往返时间,以及每一项是在什么条件下测得的。这份记录能把关于通话质量的模糊抱怨变成别人可以据以行动的发现。把它和工单放在一起,让下一次比较从同一条基线开始。