此配置示例研究在低带宽租用线路上配置具有点对点协议 (PPP) 的 VoIP。本文档包括所配置功能的相关技术背景信息、设计指南和基本验证与故障排除策略。
注意:请注意,在以下配置中,两台路由器通过租用线路背靠背连接。但在大多数拓扑中,支持语音功能的路由器可存在于任何位置。通常来说,语音路由器使用局域网连接来实现与连接广域网的其他路由器的连接(换句话说,就是一个PPP租用线路)。 这一点非常重要,因为如果您的语音路由器没有通过专线PPP直接连接,那么所有的广域网配置命令必须在跟广域网相连的路由器上进行配置,而不是像下面所显示的那样在语音路由器里进行配置。
本文档没有任何特定的要求。
本文档提供的配置通过以下设备进行测试:
两个使用 Cisco IOS® 软件版本 12.2.6a (IP Plus) 的 Cisco 3640
IP RTP Priority 在 Cisco IOS 版本 12.0(5)T 中引入。
LLQ 在 Cisco IOS 版本 12.0(7)T 中引入。
LFI 在 Cisco IOS 版本 11.3 中引入。
12.0.5T 以外的 Cisco IOS 版本包含适用于 cRTP 的显著性能改进。
有关文件规则的更多信息请参见“ Cisco技术提示规则”。
本部分提供在 PPP 租用线路上配置 VoIP 的设计准则(重点放在低速链路)。 要获得良好的语音质量,需满足两个基本要求:
最低的端到端延迟和避免抖动(延迟变化)。
经过优化和正确设计的链路带宽要求。
为了满足上述要求,应当遵守几个重要准则:
指南 | 描述 |
---|---|
语音流量的严格优先级 (IP RTP 优先级或 LLQ) | 提供语音流量严格优先级的方法。 |
Link Fragmentation and Interleaving (LFI) | 可能是对低速链路的一项强制性要求。 |
RTP 压缩 | 无需提供良好的语音质量,但要求降低呼叫带宽占用量。一般在具有良好语音质量的工作配置之后应用RTP压缩(简化排除故障)。 |
呼叫准入控制 (CAC) | 未包含在本文档中。使用 CAC 控制可以在链路上建立呼叫的数量。例如,如果2个网关之间的WAN链路有只传送2次VOIP呼叫的带宽,就承认第三次呼叫可能削弱所有三次呼叫的语音质量。更多信息请参见以下:VoIP 呼叫准入控制。 |
总之,对于将路由器/网关作为唯一语音流量来源的低速PPP链接而言,有二个功能必须提供:
语音流量的严格优先级
到 Cisco IOS 软件版本 12.2 为止,提供语音流量严格优先级主要有两种方法:
IP RTP Priority(也称 PQ/WFQ:优先级队列/加权公平队列)
Low Latency Queuing(也称 PQ/CBWFQ:优先级队列/基于类的加权公平队列)。
IP RTP Priority 可以为属于用户数据报协议 (UDP) 目的地端口范围的一套 RTP 数据包流创建严格的优先级队列。虽然使用的实际端口要动态地在终端设备或网关之间协商,但是所有Cisco VOIP产品都使用相同的UDP端口范围(16384-32767)。 路由器识别出 VoIP 流量后,便将其放置到严格的优先级队列中。当优先级队列为空时,将根据标准加权公平队列 (WFQ) 处理其他队列。直到接口中出现拥塞时,IP RTP 优先级才会变为活动状态。下图表明了 IP RTP 优先级的运行情况:
注意:IP RTP优先级允许在默认队列(WFQ)上有可用带宽时突发优先级队列(PQ),但在接口上出现拥塞时,会严格管制优先级队列内容。
LLQ 是一种功能,为 基于类的加权公平队列 (CBWFQ) 提供严格的 PQ。LLQ 能够在类级别上的 CBWFQ 内启用单个严格 PQ。使用 LLQ,(PQ 中)对延迟敏感的数据将首先出列并进行发送。在实施 LLQ 的 VoIP 中,语音流量放置在严格 PQ 中。
为保证公平队列不缺少带宽,PQ 将受到控制。当您配置 PQ 时,您用 Kbps 指定可用于 PQ 的最大带宽量。当接口被堵塞时,运行 PQ,直到负载达到优先级语句中配置的 Kbps 值。然后,超额流量丢弃,以避免具有缺乏更低优先级队列的Cisco的传统优先级组功能出现问题。
与 IP RTP 优先级相比,此方法更为复杂,也更为灵活。方法选择应当依据您的实际网络中的数据流模式和您的实际需求。
此表总结了 LLQ 和 IP RTP Priority 之间的主要区别,并提供了一些何时使用各种方法的准则。
Low Latency Queuing (LLQ) | IP RTP 优先级 |
---|---|
根据以下项目匹配语音流量:
|
根据以下项目匹配语音流量:
|
准则
|
有关排队方法相关性和差别的更多信息,请参考拥塞管理概述。
遵循以下准则配置 LLQ:
为 VoIP 流量创建类映射并确定匹配标准
以下命令说明如何完成此任务:
maui-voip-sj(config)#class-map ? WORD class-map name match-all Logical-AND all matching statements under this classmap match-any Logical-OR all matching statements under this classmap maui-voip-sj(config)#class-map match-all voice-traffic !-- Choose a descriptive class_name. maui-voip-sj(config-cmap)#match ? access-group Access group any Any packets class-map Class map cos IEEE 802.1Q/ISL class of service/user priority values destination-address Destination address input-interface Select an input interface to match ip IP specific values mpls Multi Protocol Label Switching specific values not Negate this match result protocol Protocol qos-group Qos-group source-address Source address !-- In this example, the access-group matching option is used for its !-- flexibility (it uses an access-list) maui-voip-sj(config-cmap)#match access-group ? <1-2699> Access list index name Named Access List maui-voip-sj(config-cmap)#match access-group 102 !-- Now, create the access-list to match the class-map access-group: maui-voip-sj(config)#access-list 102 permit udp any any range 16384 32776 !-- Safest and easiest way is to match with UDP port range 16384-32767 !-- This is the port range Cisco IOS H.323 products utilize to transmit !-- VoIP packets.
使用 match access-group 命令,还可将这些访问列表用于匹配语音流量:
access-list 102 permit udp any any precedence critical !-- This list filters traffic based on the IP packet TOS: Precedence field. !-- Note: Ensure that other non-voice traffic does NOT uses the !-- same precedence value. access-list 102 permit udp any any dscp ef !-- In order for this list to work, ensure that VoIP packets are tagged with !-- the dscp ef code before they exit on the LLQ WAN interface. !-- For more information on DSCP refer to: !-- Implementing Quality of Service Policies with DSCP !-- Note: If endpoints are not trusted on their packet marking, you can mark !-- incoming traffic by applying an inbound service policy on an inbound !-- interface. This procedure is out of the scope of this doc. Access-list 102 permit udp host 192.10.1.1 host 192.20.1.1 !-- This access-list can be used in cases where the VoIP devices cannot !-- do precedence or dscp marking and you cannot determine the !-- VoIP UDP port range.
下面是可用于替代 access-groups 命令的其他匹配方法:
从 Cisco IOS 软件版本 12.1.2.T 开始,就针对 LLQ 实施了 IP RTP Priority 功能。查看配置的UDP端口,这个功能与优先级类别内容相匹配,并且限制于只服务PQ中的偶数端口。
class-map voice match ip rtp 16384 16383
以下两种方法的操作均基于这样的假设,即在执行出站 LLQ 操作之前,VoIP 数据包在始发主机上进行标记,或在路由器中进行匹配和标记:
class-map voice match ip precedence 5
或
class-map voice match ip dscp ef
注意:从IOS版本12.2.2T开始,VoIP拨号对等体可以在LLQ操作之前标记语音承载和信令数据包。这允许一种可扩展方式,通过LLQ的DSCP代码值,标记和匹配VOIP信息包。
为 VoIP 信令创建类映射并确定匹配标准(可选)。
以下命令说明如何完成此任务:
class-map voice-signaling match access-group 103 ! access-list 103 permit tcp any eq 1720 any access-list 103 permit tcp any any eq 1720
注意:VoIP呼叫可以使用H.323、SIP、MGCP或Skinny(Cisco Call Manager使用的专有协议)建立。 上述示例假设 H.323 快速连接。下表可用作 VoIP 信令/控制信道所用端口的参考:
H.323/H.225 = TCP 1720
H.323/H.245 = TCP 11xxx(标准连接)
H.323/H.245 = TCP 1720(快速连接)
H.323/H.225 RAS = TCP 1719
Skinny = TCP 2000-2002 (CM Encore)
ICCP = TCP 8001-8002 (CM Encore)
MGCP = UDP 2427、TCP 2428 (CM Encore)
SIP= UDP 5060、TCP 5060(可配置)
创建策略映射并将其与 VoIP 类映射关联
策略映射旨在定义如何进行链路资源共享或如何将其分配给不同的映射类。以下命令说明如何完成此任务:
maui-voip-sj(config)#policy-map VOICE-POLICY !-- Choose a descriptive policy_map_name. maui-voip-sj(config-pmap)#class voice-traffic maui-voip-sj(config-pmap-c)#priority ? <8-2000000> Kilo Bits per second !-- Configure the voice-traffic class to the strict priority !-- Queue (priority command) and assign the bandwidth. maui-voip-sj(config-pmap)#class voice-signaling maui-voip-sj(config-pmap-c)#bandwidth 8 !-- Assign 8 Kbps to the voice-signaling class maui-voip-sj(config-pmap)#class class-default maui-voip-sj(config-pmap-c)#fair-queue !-- The remaining data traffic is treated as Weighted Fair Queue
注意:虽然可以将各种类型的实时流量排队到PQ,但思科建议您仅将语音流量定向到PQ。视频等实时流量可能会产生延迟变化(PQ 是先进先出 (FIFO) 队列)。 为避免抖动,语音流量要求该延迟是固定的。
注:优先级和带宽语句的值之和必须小于或等于链路带宽的75%。否则,服务策略就不能分配到链路(参见错误信息,确保日志控制台启用提供控制台访问,终端监视器启用提供Telnet访问)。
注意:当通过64 Kbps链路配置VoIP以支持两个语音呼叫时,通常将超过75%(48Kbps)的链路带宽分配给PQ。这种情况下,您可以使用命令 max-reserved-bandwidth 80,将可用带宽提高到 80% (80 Kbps)。
欲知 bandwidth 和 priority 命令的更多信息,参见比较 QoS 服务策略的 bandwidth 和 priority 命令。
启用 LLQ:将策略映射应用到出站 WAN 接口
以下命令说明如何完成此任务:
maui-voip-sj(config)#interface multilink 1 maui-voip-sj(config-if)#service-policy output VOICE-POLICY !-- In this scenario (MLPPP LFI), the service policy is applied to !-- the Multilink interface.
要配置 IP RTP Priority,请遵循以下准则:
Router(config-if)#ip rtp priority starting-rtp-port-#port-#-rangebandwidth
命令 | 描述 |
---|---|
starting-rtp-port-number |
UDP 端口下限。数据包将发往的最低端口号。对于 VoIP,请将此值设置为 16384。 |
port-number-range |
UDP 目的地端口范围。添加到 starting-rtp-port-number 的数字为 UDP 的最高端口号。对于 VoIP,请将此值设置为 16383 (32767 - 16384 = 16383) |
bandwidth |
优先级队列中的最大允许带宽 (kbps)。根据系统支持的同步呼叫数量设置此值。 |
配置示例:
interface Multilink1 !--- Some output omitted bandwidth 64 ip address 172.22.130.2 255.255.255.252 ip tcp header-compression fair-queue no cdp enable ppp multilink ppp multilink fragment-delay 10 ppp multilink interleave multilink-group 1 ip rtp header-compression iphc-format ip rtp priority 16384 16383 45
正常数据包的通常大小是 1500 字节,但典型的 VOIP 信息包(传输 G.729 语音帧)的大小在 66 字节左右(20 个字节的语音有效载荷,6 个字节的第 2 层包头,20 个字节的 RTP 或 UDP 报头,及 20 个字节的 IP 报头)。
现在,请想象语音和数据流量共存的 56Kbps 的租用线路链路。如果只有在数据包开始在链路上传输时语音信息包才准备准备连载,则存在问题。延迟敏感语音数据包必须在传输之前等待 214 毫秒(它需要 214 毫秒的时间在 56Kbps 链路上连载 1500 字节的数据包)。
正如您所看到的,大数据包可能相反延迟小语音数据包的交付,从而降低通话质量。将大型数据包分成更小的数据包,并在分段之间交错语音信息包,可以减少抖动和延时。Cisco IOS Link Fragmentation and Interleaving (LFI) 功能有助于满足 VoIP 实时交付需求。下图表面了 LFI 的运行情况:
如表1所示,低速WAN链路的序列化延迟(把比特放置在接口实际所需要的时间)相当高,但目标端到端单向延迟不应该超过150ms。(ITU-T G.114 建议指定 150 毫秒最大单程端到端。)
表 1. 低速链路串行延迟上各中帧大小的串行延迟 = 帧大小(位)/链路带宽 (bps)1 个字节 | 64 字节 | 128 字节 | 256 字节 | 512 字节 | 1024 字节 | 1500 字节 | |
---|---|---|---|---|---|---|---|
56 kbps | 143 微秒 | 9 毫秒 | 18 毫秒 | 36 毫秒 | 72 毫秒 | 144 毫秒 | 214 毫秒 |
64 kbps | 125 微秒 | 8 毫秒 | 16 毫秒 | 32 毫秒 | 64 毫秒 | 126 毫秒 | 187 毫秒 |
128 kbps | 62.5 微秒 | 4 毫秒 | 8 毫秒 | 16 毫秒 | 32 毫秒 | 64 毫秒 | 93 毫秒 |
256 kbps | 31 微秒 | 2 毫秒 | 4 毫秒 | 8 毫秒 | 16 毫秒 | 32 毫秒 | 46 毫秒 |
512 kbps | 15.5 微秒 | 1 毫秒 | 2 毫秒 | 4 毫秒 | 8 毫秒 | 16 毫秒 | 32 毫秒 |
768 kbps | 10 微秒 | 640 微秒 | 1.28 毫秒 | 2.56 毫秒 | 5.12 毫秒 | 10.24 毫秒 | 15 毫秒 |
1536 kbps | 5 微秒 | 320 微秒 | 640 微秒 | 1.28 毫秒 | 2.56 毫秒 | 5.12 毫秒 | 7.5 ms |
注意:对于语音应用,建议的序列化延迟(每跳)为10毫秒,不应超过20毫秒。
可使用命令 ppp multilink fragment-delay 以毫秒 (msec) 作为时间量度来配置链路片段大小。LFI 要求在打开 ppp multilink interleave 的情况下在接口上配置 ppp multilink。有关配置 LFI 的更多信息,请参考本文档的相关部分。
注意:如果您有超过专用的半T1连接(768 Kbps),则无需分段功能。(但是,您仍需要 QoS 机制,例如 LLQ 或 IP RTP Priority)。 半个T1提供足够的带宽允许语音信息包出入队列,不存在延迟问题。而且,您可能并不需要实时协议压缩(cRTP),在半T1的情况下,它可以通过压缩IP RTP头来保存带宽。
注意:cRTP不是确保良好语音质量所必需的。此功能可减少带宽消耗。请在满足其他所有条件且语音质量良好的情况下配置 cRTP。此程序可通过隔离潜在 cRTP 问题缩短排除故障时间。
根据RFC 2508,RTP报头压缩功能将IP/UDP/RTP报头从40个字节压缩到2个或4个字节,减少不必要的带宽消耗。它是一种逐跳压缩方案;因此,链路的两端必须配置cRTP(除非 passive 选项已配置)。 要配置 cRTP,请在接口层级使用此命令:
Router(config-if)#ip rtp header-compression [passive]
由于压缩过程可能是CPU密集型过程,因此RTP报头压缩在IOS 12.0.(7)T版本的快速交换和CEF交换路径中执行。有时候这些实施被中断,那么能发挥作用的唯一方式就是进行流程切换。Cisco只推荐cRTP和速率低于768 Kbps的链路一起使用,除非路由器以低CPU利用率运行。监控路由器的 CPU 使用率并在高于 75% 的情况下禁用 cRTP。
注意:配置命令ip rtp header-compression时,路由器会默认将命令ip tcp header-compression添加到配置中。这用于压缩报头的 TCP/IP 数据包。报头压缩在带有大量小型信息包的网络中特别有用,例如可以支持许多Telnet连接。使用HDLC或PPP封装,串联线路可以支持RFC 1144中完整描述的TCP报头压缩技术。
要压缩 TCP 报头,无需启用 cRTP,请使用此命令:
Router(config-if)#ip tcp header-compression [passive]
有关更多信息:压缩实时传输协议 (CRTP)
在 VoIP 呼叫段上使用低比特率编码解码器/解码器;推荐使用 G.729 (8 Kbps)。(这是 VoIP 拨号对端上的默认编码解码器)。 要配置不同的编码解码器,请在需要的 voip 呼叫对端下使用 router(config-dial-peer)#codec 命令。
尽管采用高比特率的语音编码解码(如 G.711)通常可以准确地传输双音多频 (DTMF),但低比特率语音编码解码(如 G.729 和 G.723.1)最适合语音模式,会使 DTMF 音失真。此方法可能导致访问交互式语音应答 (IVR) 系统时出现问题。dtmf relay 命令通过在带外传输 DTMF 音频或将其与已编码的语音流分离解决 DTMF 失真问题。如果使用的低比特率编码解码器(G.729、G.723),则在 VoIP 拨号对端下打开 dtmf relay 。
典型会话可能包含 35-50% 的静音。使用语音活动检测 (VAD) 抑制静音数据包。对于 VoIP 带宽规划,假设 VAD 会使带宽减少 35%。默认情况下,VAD 在 VoIP 拨号对等体下进行配置。要启用或禁用 VAD,请在需要的 voip 拨号对端下使用 router(config-dial-peer)#vad and router(config-dial-peer)# no vad 命令。
maui-voip-sj (Cisco 3640) |
---|
version 12.2service timestamps debug datetime msec !-- < Some output omitted > ! hostname maui-voip-sj ! ip subnet-zero ! no ip domain-lookup ! !-- Definition of the voice signaling and traffic class maps !-- "voice-traffic" class uses access-list 102 for its matching criteria. !-- "voice-signaling" class uses access-list 103 for its matching criteria. Class-map match-all voice-signaling match access-group 103 class-map match-all voice-traffic match access-group 102 ! !-- The policy-map defines how the link resources are assigned !-- to the different map classes. In this configuration, strict priority !-- queue is assigned to "voice-traffic" class with (based on ACL in !-- class voice) with max bandwidth = 45 Kbps. policy-map VOICE-POLICY class voice-traffic priority 48 class voice-signaling bandwidth 8 !-- Assigns a queue for "voice-signaling" traffic that ensures 8 Kbps. !-- Note that this is optional and has nothing to do with good voice !-- quality, but rather a way to secure signaling. class class-default fair-queue !-- The class-default class is used to classify traffic that does !-- not fall into one of the defined classes. !-- The fair-queue command associates the default class WFQ queueing. ! call rsvp-sync ! !-- Note that MLPPP is strictly an LFI mechanism. It does not !-- bundle multiple serial interfaces to the same virtual interface as !-- the name stands (This bundling is done for data and NOT recommended !-- for voice). The end result may manifest itself as jitter and no audio. interface Multilink1 ip address 172.22.130.1 255.255.255.252 ip tcp header-compression iphc-format service-policy output VOICE-POLICY !-- LLQ is an outbound operation and applied to the outbound WAN !-- interface. no cdp enable ppp multilink ppp multilink fragment-delay 10 !-- The configured value of 10 sets the fragment size such that !-- all fragments have a 10 ms maximum serialization delay. ppp multilink interleave multilink-group 1 ip rtp header-compression iphc-format ! interface Ethernet0/0 ip address 172.22.113.3 255.255.255.0 no keepalive half-duplex ! interface Serial0/0 bandwidth 128 !-- the bandwidth command needs to be set correctly for the !-- right fragment size to be calculated. no ip address encapsulation ppp clockrate 128000 ppp multilink multilink-group 1 !-- This command links the multilink interface to the physical !-- serial interface. ! router eigrp 69 network 172.22.0.0 auto-summary no eigrp log-neighbor-changes ! !-- access-list 102 matches VoIP traffic based on the UDP port range. !-- Both odd and even ports are put into the PQ. !-- access-list 103 is used to match VoIP signaling protocol. In this !-- case, H.323 V2 with fast start feature is used. access-list 102 permit udp any any range 16384 32767 access-list 103 permit tcp any eq 1720 any access-list 103 permit tcp any any eq 1720 ! voice-port 1/0/0 ! voice-port 1/0/1 ! voice-port 1/1/0 ! voice-port 1/1/1 ! dial-peer cor custom ! dial-peer voice 1 pots destination-pattern 5000 port 1/0/0 ! dial-peer voice 2 voip destination-pattern 6000 session target ipv4:172.22.130.2 |
maui-voip-austin (Cisco 3640) |
---|
version 12.2 service timestamps debug datetime msec ! hostname maui-voip-austin ! boot system flash slot1:c3640-is-mz.122-6a.bin ! ip subnet-zero ! class-map match-all voice-signaling match access-group 103 class-map match-all voice-traffic match access-group 102 ! policy-map voice-policy class voice-signaling bandwidth 8 class voice-traffic priority 48 class class-default fair-queue ! interface Multilink1 bandwidth 128 ip address 172.22.130.2 255.255.255.252 ip tcp header-compression iphc-format service-policy output voice-policy no cdp enable ppp multilink ppp multilink fragment-delay 10 ppp multilink interleave multilink-group 1 ip rtp header-compression iphc-format !-- Configure cRTP after you have a working configuration. !-- This helps isolate potential cRTP issues. ! Interface Ethernet0/0 ip address 172.22.112.3 255.255.255.0 no keepalive half-duplex ! interface Serial0/0 bandwidth 128 no ip address encapsulation ppp no ip mroute-cache ppp multilink multilink-group 1 ! router eigrp 69 network 172.22.0.0 auto-summary no eigrp log-neighbor-changes ! access-list 102 permit udp any any range 16384 32767 access-list 103 permit tcp any eq 1720 any access-list 103 permit tcp any any eq 1720 ! voice-port 1/0/0 ! voice-port 1/0/1 ! voice-port 1/1/0 ! voice-port 1/1/1 ! dial-peer cor custom ! dial-peer voice 1 pots destination-pattern 6000 port 1/0/0 ! dial-peer voice 2 voip destination-pattern 5000 session target ipv4:172.22.130.1 |
尝试发出任何 debug 命令前,请参考有关 debug 命令的重要信息。有关此处所列命令的更多信息,请参见本文档的Show 和 Debug 输出示例部分。
接口命令:
show interface [serial | multilink] — 使用此命令检查串行接口的状态。确保串行和多链路接口启用并处于开放状态。
LFI 命令:
show ppp multilink - 使用此命令显示多链路 PPP 捆绑的捆绑信息。
debug ppp multilink fragments - 使用此 debug 命令显示有关单个多链路片段和插入事件的信息。此命令输出也可确定数据包的序列号和片段大小。
LLQ/IP RTP Priority 命令:
show policy-map interface multilink interface # -此命令对查看LLQ操作和查看PQ中的任何丢弃非常有用。欲知此命令的各种字段的更多信息,请参见了解 show policy-map interface 输出中的数据包计数器。
show policy-map policy_map_name - 使用此命令显示有关策略映射配置的信息。
show queue interface-type interface-number - 使用此命令列出特定接口的公平排队配置和统计信息。
Debug priority-此debug命令显示优先级排队事件,并且显示此队列发生是否发生丢失现象。另请参见优先级排队中的输出丢包故障排除。
show class-map class_name - 使用此命令显示有关类映射配置的信息。
show call active voice - 使用此命令检查 DSP 层级的丢包。
其他命令/参考:
show ip rtp header-compression - 使用此命令显示 RTP 报头压缩统计信息。
已知问题:
准则:
以下是一些基本故障排除步骤,一旦 ppp 链路启动并运行(MLPPP、分段、插入):
show call active voice - 使用此命令检查 DSP 层级的丢包。
show interface - 使用此命令检查通用串行线路或接口问题。在接口上丢失并不表示有故障,但在它到达接口队列时,它通常是先从低优先级的队列丢弃数据包。
show policy-map interface - 使用此命令检查 LLQ 丢包和排队配置。不应报告违犯策略的任何丢包。
show ip rtp header-compression - 使用此命令检查 cRTP 特定问题。
!----------------------------------------------- !----------------------------------------------- !---- To capture sections of this output, the LLQ PQ bandwidth !---- was lowered and large data traffic was placed !---- on the link to force some packets drops. !----------------------------------------------- !----------------------------------------------- !---- Packet Drop Verification (During an Active Call) !--- Assuming your ppp link is up and running, the first step of voice !--- quality problems verification is to check for lost packets !--- at the DSP. Note: Use the show call active voice command !--- NOT show call active voice brief maui-voip-austin#show call active voice Total call-legs: 2 !--- Indicates that the connection is established and both legs exist GENERIC: SetupTime=155218260 ms Index=1 PeerAddress=5000 PeerSubAddress= PeerId=2 PeerIfIndex=13 LogicalIfIndex=0 ConnectTime=155218364 CallDuration=00:00:27 CallState=4 !--- indicates that it is the active call !--- (#define D_callActiveCallState_active 4). CallOrigin=2 ChargedUnits=0 InfoType=2 TransmitPackets=365 TransmitBytes=7300 ReceivePackets=229 ReceiveBytes=4580 VOIP: !--- For this call, this was the terminating gateway. !--- At this gateway, the call started at the VoIP leg. ConnectionId[0x18872BEB 0x1A8911CC 0x808CBE60 0x6D946FC6] IncomingConnectionId[0x18872BEB 0x1A8911CC 0x808CBE60 0x6D946FC6] RemoteIPAddress=172.22.130.1 !--- Indicates from which IP address the RTP stream is originating. RemoteUDPPort=18778 RemoteSignallingIPAddress=172.22.130.1 !--- Indicates from which IP address signaling messages are coming. RemoteSignallingPort=11010 RemoteMediaIPAddress=172.22.130.1 RemoteMediaPort=18778 RoundTripDelay=50 ms SelectedQoS=best-effort tx_DtmfRelay=inband-voice FastConnect=TRUE Separate H245 Connection=FALSE H245 Tunneling=FALSE SessionProtocol=cisco SessionTarget= OnTimeRvPlayout=4570 GapFillWithSilence=20 ms GapFillWithPrediction=1840 ms GapFillWithInterpolation=0 ms GapFillWithRedundancy=0 ms HiWaterPlayoutDelay=70 ms LoWaterPlayoutDelay=51 ms ReceiveDelay=51 ms LostPackets=90 EarlyPackets=1 LatePackets=0 !--- Indicates the precense of jitter, lost packets, or !--- corrupted packets. VAD = enabled CoderTypeRate=g729r8 CodecBytes=20 GENERIC: SetupTime=155218260 ms Index=2 PeerAddress=6000 PeerSubAddress= PeerId=1 PeerIfIndex=12 LogicalIfIndex=6 ConnectTime=155218364 CallDuration=00:00:34 CallState=4 CallOrigin=1 ChargedUnits=0 InfoType=2 TransmitPackets=229 TransmitBytes=4580 ReceivePackets=365 ReceiveBytes=7300 TELE: ConnectionId=[0x18872BEB 0x1A8911CC 0x808CBE60 0x6D946FC6] IncomingConnectionId=[0x18872BEB 0x1A8911CC 0x808CBE60 0x6D946FC6] TxDuration=35360 ms VoiceTxDuration=730 ms FaxTxDuration=0 ms CoderTypeRate=g729r8 NoiseLevel=-46 ACOMLevel=2 OutSignalLevel=-58 InSignalLevel=-42 InfoActivity=2 ERLLevel=7 SessionTarget= ImgPages=0Total call-legs: 2 !---------------------------------------------------------- !--- Interface Verification !--- Make sure you see this: !--- LCP Open, multilink Open: Link control protocol (LCP) open statement !--- indicates that the connection is establish. !--- Open:IPCP. Indicates that IP traffic can be transmitted via the PPP link. maui-voip-sj#show interface multilink 1 Multilink1 is up, line protocol is up Hardware is multilink group interface Internet address is 172.22.130.1/30 MTU 1500 bytes, BW 128 Kbit, DLY 100000 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation PPP, loopback not set Keepalive set (10 sec) DTR is pulsed for 2 seconds on reset LCP Open, multilink Open Open: IPCP Last input 00:00:01, output never, output hang never Last clearing of "show interface" counters 00:25:20 Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 91 Queueing strategy: weighted fair Output queue: 0/1000/64/37/383 (size/max total/threshold/drops/interleaves) Conversations 0/3/32 (active/max active/max total) Reserved Conversations 1/1 (allocated/max allocated) Available Bandwidth 38 kilobits/sec 5 minute input rate 0 bits/sec, 0 packets/sec 5 minute output rate 0 bits/sec, 0 packets/sec 8217 packets input, 967680 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 13091 packets output, 1254194 bytes, 0 underruns 0 output errors, 0 collisions, 0 interface resets 0 output buffer failures, 0 output buffers swapped out 0 carrier transitions ---------------------------------------------------------------- !-- Note: There are no drops at the interface level. !-- All traffic that is dropped due to policing, is !-- dropped before it gets to the interface queue. maui-voip-austin#show interface serial 0/0Serial0/0 is up, line protocol is up Hardware is QUICC Serial MTU 1500 bytes, BW 128 Kbit, DLY 20000 usec, reliability 255/255, txload 49/255, rxload 47/255 Encapsulation PPP, loopback not set Keepalive set (10 sec) LCP Open, multilink Open Last input 00:00:00, output 00:00:00, output hang never Last clearing of "show interface" counters 00:22:08 Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: weighted fair [suspended, using FIFO] FIFO output queue 0/40, 0 drops 5 minute input rate 24000 bits/sec, 20 packets/sec 5 minute output rate 25000 bits/sec, 20 packets/sec 4851 packets input, 668983 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 4586 packets output, 657902 bytes, 0 underruns 0 output errors, 0 collisions, 0 interface resets 0 output buffer failures, 0 output buffers swapped out 0 carrier transitions DCD=up DSR=up DTR=up RTS=up CTS=up !----------------------------------- !--- LLQ Verification maui-voip-austin#show policy-map int multilink 1 Multilink1 Service-policy output: voice-policy Class-map: voice-signaling (match-all) !--- This is the class for the voice signaling traffic. 10 packets, 744 bytes 5 minute offered rate 0 BPS, drop rate 0 BPS Match: access-group 103 Weighted Fair Queueing Output Queue: Conversation 42 Bandwidth 8 (kbps) Max Threshold 64 (packets) (pkts matched/bytes matched) 10/744 (depth/total drops/no-buffer drops) 0/0/0 Class-map: voice-traffic (match-all) !--- This is PQ class for the voice traffic. 458 packets, 32064 bytes 5 minute offered rate 0 BPS, drop rate 0 BPS Match: access-group 102 Weighted Fair Queueing Strict Priority Output Queue: Conversation 40 Bandwidth 15 (kbps) Burst 375 (Bytes) !--- Notice that the PQ bandwidth was lowered to force packet drops. (pkts matched/bytes matched) 458/29647 (total drops/bytes drops) 91/5890 !--- Some packets were dropped. In a well designed link, !--- there should be no (or few) drops of the PQ class. Class-map: class-default (match-any) 814 packets, 731341 bytes 5 minute offered rate 27000 BPS, drop rate 0 BPSMatch: any Weighted Fair Queueing Flow Based Fair Queueing Maximum Number of Hashed Queues 32 (total queued/total drops/no-buffer drops) 0/0/0 !--------------------------------------------- !--- Verify the class-map configuration maui-voip-austin#show class-map Class Map match-all voice-signaling (id 2) Match access-group 103 Class Map match-any class-default (id 0) Match any Class Map match-all voice-traffic(id 3) Match access-group 102 !--- Verify the access-lists of the class-maps maui-voip-austin#show access-lists Extended IP access list 102 permit udp any any range 16384 32767 (34947 matches) Extended IP access list 103 permit tcp any eq 1720 any (187 matches) permit tcp any any eq 1720 (86 matches) !--- Verify the policy-pap configuration maui-voip-austin#show policy-map voice-policy Policy Map voice-policy Class voice-signaling Weighted Fair Queueing Bandwidth 8 (kbps) Max Threshold 64 (packets) Class voice-traffic Weighted Fair Queueing Strict Priority Bandwidth 50 (kbps) Burst 1250 (Bytes) Class class-default Weighted Fair Queueing Flow based Fair Queueing Max Threshold 64 (packets) --------------------------- !--- Debug priority command provides immediate feedback in case !--- of VoIP packet drops. !--- The output below shows the error message when VoIP packets !--- are being dropped from the strict priority queue. maui-voip-sj#debug priority priority output queueing debugging is on maui-voip-sj# Mar 17 19:47:09.947: WFQ: dropping a packet from the priority queue 0 Mar 17 19:47:09.967: WFQ: dropping a packet from the priority queue 0 Mar 17 19:47:09.987: WFQ: dropping a packet from the priority queue 0 ------------------------------------------------------------------- !--- Link Fragmentation and Interleaving (LFI) Verification maui-voip-sj#show ppp multilink !--- Verify the fragmentation size and multilink Multilink1, bundle name is maui-voip-austin Bundle up for 00:08:04 0 lost fragments, 0 reordered, 0 unassigned 0 discarded, 0 lost received, 1/255 load 0x6D received sequence, 0x6E sent sequence Member links: 1 active, 0 inactive (max not set, min not set) Serial0/0, since 00:08:09, last rcvd seq 00006C 160 weight !--- Notice the fragmentation size is 160 Bytes. The link is configured with a !--- bandwidth of 128 kbps and a serialization delay of 10 msec. !--- Fragment Size (in bits) = bandwidth * serialization delay. !--- Note: There are 8 bits in one byte. ------------------------------------------------------- !--- Link Fragmentation and Interleaving (LFI) Verification !--- Testing Multilink PPP Link LFI !--- This output displays fragmentation and interleaving information !--- when the the 128kbps PPP link is loaded with big data and VoIP packets. maui-voip-sj#debug ppp multilink fragments Multilink fragments debugging is on 1w3d: Se0/0 MLP: O frag 800004CF size 160 1w3d: Se0/0 MLP: O frag 000004D0 size 160 1w3d: Se0/0 MLP: I ppp IP (0021) size 64 direct 1w3d: Mu1 MLP: Packet interleaved from queue 40 1w3d: Se0/0 MLP: O ppp IP (0021) size 64 1w3d: Se0/0 MLP: I ppp IP (0021) size 64 direct 1w3d: Se0/0 MLP: O frag 400004D1 size 106 1w3d: Se0/0 MLP: O ppp IP (0021) size 64 1w3d: Se0/0 MLP: I ppp IP (0021) size 64 direct 1w3d: Se0/0 MLP: O ppp IP (0021) size 64 direct 1w3d: Se0/0 MLP: I frag 800004E0 size 160 direct 1w3d: Se0/0 MLP: I frag 000004E1 size 160 direct 1w3d: Se0/0 MLP: I ppp IP (0021) size 64 direct ------------------------------------------------------------------- !--- Sample output of show ip rtp header-compression command maui-voip-sj#show ip tcp header-compression TCP/IP header compression statistics: Interface Multilink1: Rcvd: 10 total, 6 compressed, 0 errors 0 dropped, 0 buffer copies, 0 buffer failures Sent: 10 total, 7 compressed, 230 bytes saved, 99 bytes sent 3.32 efficiency improvement factor Connect: 16 rx slots, 16 tx slots, 2 long searches, 1 misses 0 collisions, 0 negative cache hits 90% hit ratio, five minute miss rate 0 misses/sec, 0 max ---------------------------------------------------------------------- !--- This command displays information of the voip dial-peers command. maui-voip-sj#show dial-peer voice 2 VoiceOverIpPeer2 information type = voice, tag = 2, destination-pattern = `6000', answer-address = `', preference=0, group = 2, Admin state is up, Operation state is up, incoming called-number = `', connections/maximum = 0/unlimited, application associated: type = voip, session-tMarget = `ipv4:172.22.130.2', technology prefix: ip precedence = 0, UDP checksum = disabled, session-protocol = cisco, req-qos = best-effort, acc-qos = best-effort, fax-rate = voice, payload size = 20 bytes codec = g729r8, payload size = 20 bytes, Expect factor = 10, Icpif = 30,signaling-type = cas, VAD = enabled, Poor QOV Trap = disabled, Connect Time = 283, Charged Units = 0, Successful Calls = 1, Failed Calls = 0, Accepted Calls = 1, Refused Calls = 0, Last Disconnect Cause is "10 ", Last Disconnect Text is "normal call clearing.", Last Setup Time = 93793451. ------------------------------------------------------------------------- !---The CPU utilization of the router should not exceed the 50-60 percent !--- during any five-minute interval. maui-voip-austin#show processes cpu CPU utilization for five seconds: 12%/8%; one minute: 11%; five minutes: 9% PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 1 148 310794 0 0.00% 0.00% 0.00% 0 Load Meter 2 76 23 3304 0.81% 0.07% 0.01% 0 Exec |