本文档介绍什么是抖动,以及如何对抖动进行测量和补尝。
本文档的读者应掌握以下这些主题的相关知识:
基本 Cisco IOS® 语音配置
基本了解服务质量 (QoS)
本文档中的信息适用于 Cisco IOS 语音网关和路由器。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
抖动定义为收到数据包的延迟变化。在发送端,数据包以均匀分隔的连续流的形式发送。由于网络拥塞、排队不正确或配置错误等原因,此平稳的数据流可能会出现起伏,或者每个数据包之间的延迟失稳,产生变化。
下图说明平稳数据包流的处理情况。
当路由器收到用于 Voice over IP (VoIP) 的 Real-Time Protocol (RTP) 音频流时,必须对遇到的抖动进行补偿。处理此功能的机制是播放延迟缓冲区。播放延迟缓冲区必须缓冲这些数据包,然后以平稳的数据流将其播放至数字信号处理器 (DSP),以便将数据流重新转换为模拟音频流。播放延迟缓冲区有时也称为去抖动缓冲区。
下图说明对抖动的处理。
如果抖动过大,导致在此缓冲区范围外收到数据包,则丢弃范围外的数据包,音频产生失音现象。对于小至一个数据包的丢失,DSP 会插入它认为丢失的音频,从而无碍听觉效果。当抖动超出 DSP 对数据包丢失的补偿能力时,听觉效果受损。
下图说明对过度抖动的处理。
可在 Cisco IOS 中通过执行以下步骤确认是否存在过度抖动。
在呼叫启动并处于活动状态时,若怀疑存在抖动,请通过 Telnet 连接到所涉及的网关之一。
注意:如果连接到控制台端口,则无需执行此步骤。
输入 show voice call summary 命令。将显示类似如下的输出:
PORT CODEC VAD VTSP STATE VPM STATE ============ ======== === ==================== ====================== 1/0/0 - - - FXSLS_ONHOOK 1/0/1 g729r8 y S_CONNECT FXSLS_CONNECT
选择出现抖动的呼叫。本例中为 1/0/1。
要查看此特定呼叫,请输入 show voice call 命令。
在本例中,它是show voice call 1/0/1。提供的输出来自处理该呼叫的DSP,类似于:
1/0/1 vtsp level 0 state = S_CONNECT vpm level 1 state = FXSLS_CONNECT vpm level 0 state = S_UP MS-2621-3B# ***DSP VOICE VP_DELAY STATISTICS*** Clk Offset(ms): 0, Rx Delay Est(ms): 50 Rx Delay Lo Water Mark(ms): 50, Rx Delay Hi Water Mark(ms): 7 ***DSP VOICE VP_ERROR STATISTICS*** Predict Conceal(ms): 0, Interpolate Conceal(ms): 0 Silence Conceal(ms): 0, Retroact Mem Update(ms): 0 Buf Overflow Discard(ms): 0, Talkspurt Endpoint Detect Err: 0 ***DSP VOICE RX STATISTICS*** Rx Vox/Fax Pkts: 1187, Rx Signal Pkts: 0, Rx Comfort Pkts: 0 Rx Dur(ms): 150200, Rx Vox Dur(ms): 23740, Rx Fax Dur(ms): 0 Rx Non-seq Pkts: 0, Rx Bad Hdr Pkts: 0 Rx Early Pkts: 0, Rx Late Pkts: 0 ***DSP VOICE TX STATISTICS*** Tx Vox/Fax Pkts: 7129, Tx Sig Pkts: 0, Tx Comfort Pkts: 0 Tx Dur(ms): 150200, Tx Vox Dur(ms): 14259, Tx Fax Dur(ms): 0 ***DSP VOICE ERROR STATISTICS*** Rx Pkt Drops(Invalid Header): 0, Tx Pkt Drops(HPI SAM Overflow): 0 ***DSP LEVELS*** TDM Bus Levels(dBm0): Rx -54.5 from PBX/Phone, Tx -64.7 to PBX/Phone TDM ACOM Levels(dBm0): +2.0, TDM ERL Level(dBm0): +9.9 TDM Bgd Levels(dBm0): -49.4, with activity being voice
查看输出中的 ***DSP VOICE VP_ERROR STATISTICS*** 部分。
在此部分下,有几个参数需要查看一下。主要参数是显示的 Buf Overflow Discard (ms) 数。此参数对落于播放延迟缓冲区范围以外的数据包(已丢弃的数据包)进行计数。 此参数可以有数值,只要参数值不持续增加即属正常。最初启动呼叫时出现一些溢出属正常现象,但当重复 show voice call X/X/X 命令时,此值不应增加。此数值是过度抖动的一个直接征兆。
默认情况下,此缓冲区在适应性模式下运行,即它可以根据现有抖动量动态调整(在一定程度上)。 配置 playout-delay 命令,以更改去抖动缓冲区的动态行为的默认值。也可以将此缓冲区设置于固定模式。这样可以解决一些抖动问题。有关详细信息,请参阅针对 Voice over IP 的播放延迟增强功能。
抖动通常是由 IP 网络拥塞引起的。如果电路设置不正确,可能会在路由器接口或在提供商或运营商网络中出现拥塞。
检查抖动的最容易也是最好的位置是在路由器接口中,因为您可以直接控制这一部分电路。跟踪抖动源的方式在很大程度上取决于抖动发生处的链路的封装和类型。通常,如果配置正确,由于信元速率恒定,ATM 电路不会产生抖动。这样会产生非常一致的延迟。如果在 ATM 环境中发现抖动,则有必要检查 ATM 配置。当 ATM 正常运行(没有丢弃信元)时,应当不会出现抖动问题。在点对点协议 (PPP) 封装中,抖动几乎总是归因于串行延迟。通过 PPP 链路上的 Link Fragmentation and Interleaving 可以轻松管理这个问题。PPP 的本质意味着 PPP 端点彼此直接对话,之间没有交换机网络。这样,网络管理员便可控制涉及的所有接口。
需要考察三个参数来确定帧中继环境中的抖动情况:
有关配置示例和相关配置信息,请参阅带有服务质量控制的基于帧中继的 VoIP。
您需要确保对流量进行合理整形,使路由器以运营商提供的实际承诺信息速率 (CIR) 工作。请通过查看帧中继统计数据验证这一点,并向运营商核实。要查看的第一个位置是帧中继统计数据。请使用 show frame-relay pvc xx 命令,其中 xx 是数据链路连接标识符 (DLCI) 编号。您应收到类似如下的输出:
PVC Statistics for interface Serial0/1 (Frame Relay DTE) DLCI = 16, DLCI USAGE = LOCAL, PVC STATUS = ACTIVE, INTERFACE = Serial0/1.1 input pkts 103611 output pkts 120054 in bytes 9909818 out bytes 10962348 dropped pkts 0 in FECN pkts 0 in BECN pkts 0 out FECN pkts 0 out BECN pkts 0 in DE pkts 0 out DE pkts 0 out bcast pkts 1366 out bcast bytes 448048 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 0 bits/sec, 0 packets/sec pvc create time 22:45:57, last time pvc status changed 22:45:57 Queueing strategy: weighted fair Current fair queue configuration: Discard Dynamic Reserved threshold queue count queue count 64 16 0 Output queue size 0/max total 600/drops 18303 fragment type end-to-end fragment size 1600 cir 20000 bc 1000 be 0 limit 125 interval 50 mincir 20000 byte increment 125 BECN response no IF_CONG no frags 103356 bytes 9807006 frags delayed 67241 bytes delayed 7127120 shaping active traffic shaping drops 18303
有关所有字段的完整说明,请参阅 show frame-relay pvc 说明。
在命令输出中,您应关注指示是否存在帧网络拥塞的值。这些值为前向显式拥塞通知 (FECN)、后向显式拥塞通知 (BECN) 和可选择丢弃 (DE) 参数。您应只关注输入数据包,因为 Cisco 不会发送其中任何数据包。您可能会发现其中一个或多个值在增加。这取决于提供商使用的帧交换机的类型和配置。一般而言,如果您做过帧中继流量整形,并将其配置为与电路相同的 CIR,则应该不会看到这些值增加。如果确实看到这些值增加,并且您的配置与电路的真正 CIR 是匹配的,那么可能是因为帧提供商的网络中存在不合理设置。
一个恰当的示例是,您购买的是零 CIR 电路,但存在突发值。一些提供商会销售零 CIR 永久虚拟电路 (PVC)。 这对数据无影响,但会导致语音质量问题。如果查看零 CIR 电路的命令输出,您会发现 DE 或 FECN 数据包的数量等于输入数据包的数量。再进一步而言,如果运营商配置的 PVC 为 128 kbs,而路由器 CIR 设置为 512 kbs,则您会看到这些计数器增加(以较慢的速度)。 切记,您查看的只是进入路由器接口的数据包,并且此速率由在 PVC 另一端的路由器上配置的流量整形参数来控制。反之,通过在本地端配置的流量整形参数可以控制输入另一个路由器的内容。
重要的是不要超过运营商为 PVC 设置的 CIR。您的设置可以低于该 CIR,而不会有任何问题。但如果超出该 CIR,就会出现拥塞。
您之所以在此方式下看到拥塞,是因为在帧交换机中为特定 PVC 配置的 CIR 规定了该交换机传递的通信速率(对于该 PVC)。 当帧交换机的实际数据接收速率超出其中配置的 CIR 时,必须缓冲超出 CIR 的帧,直到有容量可用于转发缓冲的数据包。缓冲的所有数据包都会获得帧交换机设置的 DE 位或 FECN 位。
通常,您还要仔细检查接口统计信息,并查找丢包或错误以确保物理层一切运行正常。为此,请使用 show interface 命令。
这与抖动的关系是:如果出现这种情况,并且需要在帧网络中缓冲一些数据包,则在到达远程路由器时会出现更长的延迟。但是,当没有拥塞时,数据包可在正常的延迟时间内通过。这会使得远程路由器接收的数据包之间的增量时间产生变化。因此,抖动产生了。
分段与串行延迟的关联比其与抖动的关联更大。但在某些情况下,它可能是抖动的原因。当分包传送语音时,应始终在帧中继映射类中配置分段。此参数的配置对接口有两种影响。第一种影响是对大于指定大小的所有数据包分段。第二种影响不那么明显,但同样重要。如果查看配置分段的接口,便可看到此命令的影响。不分段时,show interface x 命令的输出中显示的排队策略表明,使用的是先入先出 (FIFO) 排队。对帧中继映射类应用分段后,此命令输出显示排队策略为双重先入先出。这样将为接口上的语音流量创建优先级队列。强烈建议将分段值设置为在带有 QoS 的基于帧中继的 VoIP 文档的“分段”部分中建议的值。如果使用建议值时仍然遇到抖动问题,则逐步降低分段值,直到语音质量可接受为止。
有两种普遍接受的排队方法可用于此类环境中的 VoIP 流量:
应该使用其中一种方法,不应同时配置两种方法。如果根据文档判断排队操作正常,则可以得出结论:排队工作正常,问题可能在别处。因为由排队产生的延迟变化相对较小,因此排队通常不是抖动的原因。但如果 VoIP 数据包排队不正确并且在同一电路中存在数据,则会产生抖动。
抖动是指语音数据包的数据包延迟变化。路由器中的 DSP 可以补偿部分抖动,但无法应对过度抖动。这会导致语音质量变差。抖动的原因是一个数据包在电路中某处被排队或延迟,而其他数据包则没有排队或延迟。这将导致延迟变化。抖动可能因路由器配置不当,或因运营商或提供商的 PVC 配置不当而引起。