此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍对VoIP网络进行故障排除和调试的基本技术和命令。
Cisco 建议您了解以下主题:
VoIP 配置
语音 QoS
VoIP网络的设计和部署
本文档不限于特定的软件和硬件版本。但是,显示的输出基于 Cisco IOS® 软件版本 12.3(8)。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
本文档展示用于对 VoIP 网络进行故障排除和调试的基本技术和命令。首先概要介绍 Cisco 路由器中的语音呼叫流和电话体系结构,然后按如下步骤分步介绍 VoIP 的故障排除过程:
注意:本文档并未说明Cisco VoIP网关和网守中使用的Cisco IOS架构的每个方面。而主要是显示哪些命令可以使用,以及命令输出中的哪些字段最有价值。
警告:调试Cisco IOS需要占用大量处理器。使用本文档中列出的调试时,应特别注意。有关详细信息,请参阅有关 Debug 命令的重要信息。
运行调试时,需要在日志中启用时间戳。在启用模式下,使用命令service timestamps debug datetime msec和service timestampslog datetime msec启用时间戳。
时间戳有助于确定状态更改之间的间隔时间。
在开始任何 VoIP 故障排除或调试之前要考虑的一项重要因素是 VoIP 呼叫由三个呼叫段组成。这些呼叫段分别是:源普通旧式电话系统 (POTS)、VoIP 和目的 POTS。
故障排除和调试需要先分别关注每一个呼叫段,然后关注整个 VoIP 呼叫。
以下定义解释了路由器呼叫流图中显示的主要组件的功能:
呼叫控制API(应用编程接口) — 三个客户端使用呼叫控制API。这三个客户端分别是 CLI、简单网络管理协议 (SNMP) 代理和会话应用。呼叫控制API(也称为CCAPI)的主要功能包括:
识别呼叫段(例如,它是哪个拨号对等体?它来自何处?)。
决定由哪个会话应用程序接受呼叫(例如,由谁处理它?)。
调用数据包处理程序。
将所有呼叫段合并到一起。
开始记录呼叫统计信息。
会话应用程序和拨号方案映射—会话应用程序使用拨号方案映射,将号码映射到拨号对等体(本地 POTS 或远程 VoIP)。
拨号方案映射使用拨号对等体表来查找活动的拨号对等体。
电话和 VoIP 服务提供商接口 (SPI) — 与 POTS 拨号对等体通信的电话 SPI,包括以下模拟设备:fxs、fxo、e&m;数字:isdn、qsig、e&m 等)拨号对等体通信。
VoIP SPI 是 VoIP 对等体的特有接口。电话/DSP 驱动程序向电话 SPI 提供服务,而 VoIP SPI 依赖于会话协议。
此图表显示 Cisco 路由器电话构件的体系结构,以及它们如何彼此互动。
以下列表描述了主要的流程图组件的功能和定义:
呼叫控制应用编程接口 (CCAPI) — 建立、终止和桥接呼叫段的软件实体。
语音电话服务提供商(VTSP) — 一个Cisco IOS进程,为来自呼叫控制API的请求提供服务,并将适当的请求提交给数字信号处理器(DSP)或VPM。
语音处理器模块 (VPM) — VPM 用于在电话端口信号状态机 (SSM)、DSP 资源管理器和 VTSP 之间桥接和协调信令交换过程。
DSP 资源管理器—DSPRM 提供接口,由 VTSP 用来向 DSP 发送消息或从 DSP 接收消息。
数据包处理程序—数据包处理程序在 DSP 和对等呼叫段之间转发数据包。
呼叫对等体—呼叫对等体是相反的呼叫段。这可以是另一个电话语音连接 (POTS)、VoFR、VoATM 或 VoIP 连接。
验证数字和模拟信令的目的是:
确定接收到适当的挂机和摘机模拟或数字信令。
确定路由器和交换机配置(CO 或 PBX)两端已配置正确的 E&M、FXO 和 FXS 信令。
验证 DSP 处于数字收集模式。
这些部分中概要介绍的命令可用于验证信令。
show controllers t1 [slot/port] — 首先使用此命令。它显示路由器与交换机(CO 或 PBX)之间的数字 T1 连接是否已启动,以及它是否能正常工作。此命令的输出如下所示:
router# show controllers T1 1/0 T1 1/0 is up. Applique type is Channelized T1 Cablelength is short 133 No alarms detected. Framing is ESF, Line Code is B8ZS, Clock Source is Line Primary. Data in current interval (6 seconds elapsed): 0 Line Code Violations, 0 Path Code Violations 0 Slip Secs, 0 Fr Loss Secs, 0 Line Err Secs, 0 Degraded Mins 0 Errored Secs, 0 Bursty Err Secs, 0 Severely Err Secs, 0 Unavail Secs |
如果使用E1,请使用show controllers e1命令。有关详细信息,请参阅:
show voice portslot-number/port — 使用此命令可显示端口状态和思科语音接口卡(VIC)的语音端口上配置的参数。 与所有Cisco IOS命令一样,show running-config中不会显示默认值,但使用此命令可以显示默认值。
下面是 E&M 语音端口的示例输出:
router# show voice port 1/0:1 recEive and transMit Slot is 1, Sub-unit is 0, Port is 1 Type of VoicePort is E&M Operation State is DORMANT Administrative State is UP No Interface Down Failure Description is not set Noise Regeneration is enabled Non Linear Processing is enabled Music On Hold Threshold is Set to -38 dBm In Gain is Set to 0 dB Out Attenuation is Set to 0 dB Echo Cancellation is enabled Echo Cancel Coverage is set to 16 ms Connection Mode is normal Connection Number is not set Initial Time Out is set to 10 s Interdigit Time Out is set to 10 s Call-Disconnect Time Out is set to 60 s Region Tone is set for US Voice card specific Info Follows: Out Attenuation is Set to 0 dB Echo Cancellation is enabled Echo Cancel Coverage is set to 16 ms Connection Mode is normal (could be trunk or plar) Connection Number is not set Initial Time Out is set to 10 s Interdigit Time Out is set to 10 s Call-Disconnect Time Out is set to 60 s Region Tone is set for US Voice card specific Info Follows: Signal Type is wink-start Operation Type is 2-wire E&M Type is 1 Dial Type is dtmf In Seizure is inactive Out Seizure is inactive Digit Duration Timing is set to 100 ms InterDigit Duration Timing is set to 100 ms Pulse Rate Timing is set to 10 pulses/second InterDigit Pulse Duration Timing is set to 500 ms Clear Wait Duration Timing is set to 400 ms Wink Wait Duration Timing is set to 200 ms Wink Duration Timing is set to 200 ms Delay Start Timing is set to 300 ms Delay Duration Timing is set to 2000 ms Dial Pulse Min. Delay is set to 140 ms |
以下命令用于调试 VPM 电话接口:
debug vpm signal — 此命令用于收集信令事件的调试信息,可用于解决向PBX发送信令的问题。
debug vpm spi — 此命令可以跟踪语音端口模块服务提供商接口 (SPI) 与呼叫控制 API 的交互情况。此 debug 命令显示有关如何处理每个网络指示和应用程序请求的信息。
debug vpm dsp — 此命令显示从VPM上的DSP到路由器的消息,如果怀疑VPM不起作用,此命令非常有用。这是检查 VPM 是否响应摘机指示以及计算从接口传递消息的时间的简单方法。
debug vpm all — 此EXEC命令启用所有debug vpm命令:debug vpm spi、debug vpm signal和debug vpm dsp。
debug vpm port — 使用此命令可将调试输出限制为特定端口。例如,以下输出仅显示端口1/0/0的debug vpm dspmessages:
debug vpm dsp debug vpm port 1/0/0
debug vpm signalCommand的输出示例
maui-voip-austin#debug vpm signal !--- FXS port 1/0/0 goes from the "on-hook" to "off-hook" !--- state. htsp_process_event: [1/0/0, 1.2 , 36] fxsls_onhook_offhook htsp_setup_ind *Mar 10 16:08:55.958: htsp_process_event: [1/0/0, 1.3 , 8] !--- Sends ringing alert to the called phone. *Mar 10 16:09:02.410: htsp_process_event: [1/0/0, 1.3 , 10] htsp_alert_notify *Mar 10 16:09:03.378: htsp_process_event: [1/0/0, 1.3 , 11] !--- End of phone call, port goes "on-hook". *Mar 10 16:09:11.966: htsp_process_event: [1/0/0, 1.3 , 6] *Mar 10 16:09:17.218: htsp_process_event: [1/0/0, 1.3 , 28] fxsls_offhook_onhook *Mar 10 16:09:17.370: htsp_process_event: [1/0/0, 1.3 , 41] fxsls_offhook_timer *Mar 10 16:09:17.382: htsp_process_event: [1/0/0, 1.2 , 7] fxsls_onhook_release |
如果挂机和摘机未正确发出信令,请检查以下各项:
验证接线是正确的。
验证路由器和交换机(CO 或 PBX)均正确接地。
检验连接的两端是否具有等效的信令配置。不匹配的配置可能导致不完整或单向信令。
有关 E&M 故障排除的详细信息,请参阅了解模拟 E & M 接口类型和接线安排以及故障排除。
debug vpm spiCommand的输出示例
maui-voip-austin#debug vpm spi Voice Port Module Session debugging is enabled !--- The DSP is put into digit collection mode. *Mar 10 16:48:55.710: dsp_digit_collect_on: [1/0/0] packet_len=20 channel_id=128 packet_id=35 min_inter_delay=290 max_inter_delay=3200 mim_make_time=18 max_make _time=75 min_brake_time=18 max_brake_time=75 |
当挂机和摘机信令得到验证并且能正常工作后,请立即验证语音端口(数字或模拟)上收到或发送了正确的数字。
如果发送或接收的数字不完整或不正确,则无法匹配拨号对等体,交换机(CO 或 PBX)也不能使正确的站点响铃。
有些命令可用于验证接收/发送的数字:
show dialplan number — 此命令用于显示拨打特定电话号码时到达的拨号对等体。
debug vtsp session — 此命令显示有关如何处理每个网络指示和应用请求、信令指示以及DSP控制消息的信息。
debug vtsp dsp — 早于Cisco IOS软件版本12.3,此命令显示语音端口接收的数字。
但是,在 Cisco IOS 软件版本 12.3 及以后,debug 命令的输出不再显示数字。debug hpi detail 和debug pinotification 的组合可用于查看传入的数字。
debug vtsp all — 此命令启用以下debug voice telephony service provider(VTSP)命令:debug vtsp session、debug vtsp error和debug vtsp dsp。
show dialplan number <digit_string>—此命令显示数字字符串所匹配的拨号对等体。如果可以匹配多个拨号对等体,则按匹配的顺序显示它们。
注意:您需要在变长拨号对等体的电话号码末尾使用 # 符号,才能在以 T 结尾的目标模式上进行匹配。
此命令的输出如下所示:
maui-voip-austin#show dialplan number 5000 Dial string terminator: # Macro Exp.: 5000 VoiceOverIpPeer2 information type = voice, tag = 2, destination-pattern = `5000', 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-target = `ipv4:192.168.10.2', technology prefix: ip precedence = 5, UDP checksum = disabled, session-protocol = cisco, req-qos = best-effort, acc-qos = best-effort, dtmf-relay = cisco-rtp, 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 = 25630, Charged Units = 0, Successful Calls = 25, Failed Calls = 0, Accepted Calls = 25, Refused Calls = 0, Last Disconnect Cause is "10 ", Last Disconnect Text is "normal call clearing.", Last Setup Time = 84427934. Matched: 5000 Digits: 4 Target: ipv4:192.168.10.2 |
debug vtsp session 命令显示有关路由器如何根据来自信令堆栈的信令指示以及来自应用程序的请求与 DSP 进行交互的信息。
此 debug 命令显示有关如何处理每个网络指示和应用程序请求的信息、信令指示以及 DSP 控制消息。
maui-voip-austin#debug vtsp session Voice telephony call control session debugging is on !--- Output is suppressed. |
如果确定没有正确发送或接收数字,则可能有必要使用数字捕获器(测试工具)或T1测试器来验证数字是否以正确的频率和定时间隔发送。
如果为交换机(CO或PBX)错误地发送这些值,则可能需要调整路由器或交换机(CO或PBX)上的某些值,以便它们匹配且互操作。
这些值通常是数字持续时间和数字间持续时间值。用来检查数字是否正确发送的另一项是交换机(CO 或 PBX)中可以添加或删除数字的任意号码转换表。
在您验证语音端口信令能正确工作并且收到了正确的数字之后,即可进行 VoIP 呼叫控制故障排除和调试。以下要素解释了为何呼叫控制调试会变成一项复杂的工作:
Cisco VoIP 网关使用 H.323 信令来完成呼叫。H.323 由三层呼叫协商和呼叫建立组成:H.225、H.245和H.323。这些协议结合使用TCP和UDP来建立和建立呼叫。
端到端VoIP调试显示许多Cisco IOS状态机。任何状态机的问题都可能会导致呼叫失败。
端到端 VoIP 调试可能非常繁琐,并且会产生大量调试输出。
用来调试端到端 VoIP 呼叫的主要命令是 debug voip ccapi inout。呼叫调试的输出如以下输出所示。
!--- Action: A VoIP call is originated through the |
如果呼叫失败并且原因似乎出现在呼叫设置的VoIP部分,则可能需要查看呼叫设置的H.225或H.245 TCP部分,而不仅仅是H.323设置的UDP部分。
能用来调试 H.225 或 H.245 呼叫建立的命令是:
debug ip tcp transactions 和debug ip tcp packet — 这些命令检查H.225和H.245协商的TCP部分。它们返回 TCP 连接的 IP 地址、TCP 端口和状态。
debug cch323 h225 — 此命令检查呼叫协商的H.225部分,并根据已处理的事件跟踪H.225状态机的状态转换。可将其当作 H.323 呼叫建立的三个部分中的第 1 层部分。
debug cch323 h245 — 此命令检查呼叫协商的H.245部分,并根据已处理的事件跟踪H.245状态机的状态转换。可将其当作 H.323 呼叫建立的三个部分中的第 2 层部分。
当 VOIP 呼叫适当建立时,下一步将是检验语音质量是否良好。
尽管本文档不涵盖 QoS 故障排除,但是要获得良好的语音质量,需要考虑以下指南:
了解 VoIP 呼叫的每个编解码器需要占用多少带宽。这包括第 2 层和 IP/UDP/RTP 标头。有关详细信息,请参阅修改语音呼叫的带宽消耗计算。
了解呼叫途经的 IP 网络的特性。例如,帧中继网络的带宽在 CIR 时与在高 CIR(或突发)时差别很大。在后一种情况下,数据包可能会被丢弃或在帧中继云中排队。确保尽可能控制并消除延迟和抖动。单向传输延迟不得超过150毫秒(根据G.114建议)。
使用排队技术确定VoIP流量并排定其优先级。
当您通过低速链路传输VoIP时,请使用第2层数据包分段技术,例如在点对点链路上使用带链路分段和交织(LFI)的MLPPP,或在帧中继链路上使用FRF.12。由于 VOIP 数据包可以插入链路,较大数据包的分段使传输 VOIP 流量时所发生的抖动和延迟减少。
尝试使用不同的编解码器,并在启用和禁用 VAD 的情况下尝试呼叫,尽可能将问题限定到 DSP,而不是 IP 网络。
有了 VoIP,在进行 QoS 故障排除时最主要的问题就是丢弃的数据包和可能导致延迟和抖动的网络瓶颈。
查找:
接口丢弃
缓冲丢弃
接口拥塞
链路拥塞
需要检查 VoIP 呼叫路径中的每个接口。并且,消除丢弃和拥塞。而且,需要尽可能减少往返延迟。
VoIP 终点之间的 Ping 操作可提供链路往返延迟的指标。尽可能的往返延迟不得超过300毫秒。
如果延迟必须超出此值,则需要采取措施,确保此延迟稳定不变,以免导致抖动或可变的延迟。
还必须进行验证,以确保Cisco IOS排队机制将VoIP数据包放置在正确的队列中。Cisco IOS命令(例如show queue interface 或show priority)可以帮助验证排队。
当您阅读调试以及调试中的相关值时,请使用下面的表。
呼叫断开原因值(十六进制) | 含义和编号(十进制) |
---|---|
CC_CAUSE_UANUM = 0x1 | 未分配的编号。(1) |
CC_CAUSE_NO_ROUTE = 0x3 | 没有通往目标的路由。(3) |
CC_CAUSE_NORM = 0x10 | 正常呼叫清除。(16) |
CC_CAUSE_BUSY = 0x11 | 用户忙。(17) |
CC_CAUSE_NORS = 0x12 | 用户无响应。(18) |
CC_CAUSE_NOAN = 0x13 | 用户无应答。(19) |
CC_CAUSE_REJECT = 0x15 | 呼叫被拒绝。(21) |
CC_CAUSE_INVALID_NUMBER = 0x1C | 编号无效。(28) |
CC_CAUSE_UNSP = 0x1F | 正常,未指定。(31) |
CC_CAUSE_NO_CIRCUIT = 0x22 | 无电路。(34) |
CC_CAUSE_NO_REQ_CIRCUIT = 0x2C | 无请求的电路。(44) |
CC_CAUSE_NO_RESOURCE = 0x2F | 无资源。(47) 1 |
CC_CAUSE_NOSV = 0x3F | 服务或选项不可用,或者未指定。(63) |
1此问题可能是由于H323设置中的编解码器不匹配,因此故障排除的第一步是对VoIP拨号对等体进行硬编码以使用正确的编解码器。
有关CODEC的详细信息,请参阅了解编解码器:复杂性、硬件支持、MOS 和协商。
协商值 | 含义 |
---|---|
codec=0x00000001 | G711 ULAW 64K PCM |
codec=0x00000002 | G711 ALAW 64K PCM |
codec=0x00000004 | G729 |
codec=0x00000004 | G729IETF |
codec=0x00000008 | G729a |
codec=0x00000010 | G726r16 |
codec=0x00000020 | G726r24 |
codec=0x00000040 | G726r32 |
codec=0x00000080 | G728 |
codec=0x00000100 | G723r63 |
codec=0x00000200 | G723r53 |
codec=0x00000400 | GSMFR |
codec=0x00000800 | G729b |
codec=0x00001000 | G729ab |
codec=0x00002000 | G723ar63 |
codec=0x00004000 | G723ar53 |
codec=0x00008000 | CLEAR_CHANNEL |
音调类型 | 含义 |
---|---|
CC_TONE_RINGBACK 0x1 | 铃声 |
CC_TONE_FAX 0x2 | 传真音 |
CC_TONE_BUSY 0x4 | 忙音 |
CC_TONE_DIALTONE 0x8 | 拨号音 |
CC_TONE_OOS 0x10 | 未使用音 |
CC_TONE_ADDR_ACK 0x20 | 地址确认音 |
CC_TONE_DISCONNECT 0x40 | 断开音 |
CC_TONE_OFF_HOOK_NOTICE 0x80 | 表示电话处于摘机状态的声音 |
CC_TONE_OFF_HOOK_ALERT 0x100 | CC_TONE_OFF_HOOK_NOTICE 的更紧急版本 |
CC_TONE_CUSTOM 0x200 | 自定义提示音 — 在指定自定义提示音时使用 |
CC_TONE_NULL 0x0 | 空音 |
价值 | 含义 |
---|---|
CC_CAP_FAX_NONE 0x1 | 传真禁用或不可用 |
CC_CAP_FAX_VOICE 0x2 | 语音呼叫 |
CC_CAP_FAX_144 0x4 | 14,400 波特 |
CC_CAP_FAX_96 0x8 | 9600 波特 |
CC_CAP_FAX_72 0x10 | 7,200 波特 |
CC_CAP_FAX_48 0x20 | 4,800 波特 |
CC_CAP_FAX_24 0x40 | 2,400 波特 |
CC_CAP_VAD_OFF 0x1 | VAD 已禁用 |
CC_CAP_VAD_ON 0x2 | 启用 vad |
版本 | 发布日期 | 备注 |
---|---|---|
2.0 |
20-Apr-2023 |
更新格式。已更正CCW警报。重新认证。 |
1.0 |
11-Dec-2001 |
初始版本 |