本文档解决了在涉及 Cisco 网关的 IP 电话单向音频对话中可能发生的一些常见问题。本文档涉及的 Cisco 网关有 Cisco IOS® 网关和路由器、Catalyst 交换机和 DT-24+ 网关。
本文档面向与 IP 电话网络有关并且具有语音网络基础知识的人员。
本文档不限于特定的软件或硬件版本。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
本文档提供针对以下问题的情况和解决方案:
在通过 Cisco IOS 语音网关或路由器从 IP 工作站建立电话呼叫时,只有一方收到音频(单向通信)。
在两台 Cisco 网关之间建立长话旁路呼叫时,只有一方收到音频(单向通信)。
在从置于 VPN 3002 硬件客户端之后的 IP 工作站建立电话呼叫时,只有一方收到音频(单向通信)。
导致 IP 电话出现单向音频的原因可能有所不同,但是问题的根本通常涉及 IP 路由问题。本部分介绍了一些在现场出现过的情况和解决方案。
一些 Cisco IOS 网关(如 VG200)会在默认情况下禁用 IP 路由。此默认设置会导致单向语音问题。
注意:在您继续之前,请确保已在您的路由器上启用IP路由。换句话说,请保证路由器没有执行 no ip routing 全局配置命令。
若要启用 IP 路由,请在 Cisco IOS 网关上发出此全局配置命令:
voice-ios-gwy(config)#ip routing
请务必先检查基本 IP 可接通性。因为 Real-Time Transport Protocol (RTP) 流无连接(通过 UDP 传输),所以流量可能在一个方向上顺利移动,却在相反方向上丢失。此图显示一种可能会发生这种情况的方案:
子网A和子网B都可以到达子网X。子网X可以到达子网A和子网B。这允许在终端站(A和B)和Cisco CallManager之间建立TCP连接。因此,信令可以到达两个终端站而不会出现问题,这允许在 A 和 B 之间建立呼叫。
一旦建立呼叫,携带音频的 RTP 流便必须在终端站之间的两个方向上流动。在某些情况下,子网B可以到达子网A,但子网A无法到达子网B。因此,从A到B的音频流始终会丢失。
这是基本路由问题。请使用 IP 路由故障排除方法,以便可以成功地从网关 B 对电话 A 执行 ping 命令,请记住,ping 是双向验证。
本文档不涉及 IP 路由故障排除。不过,请确认遵守以下一些初始步骤:
在终端站上配置了默认网关。
这些默认网关上的 IP 路由指向目标网络。
注意:此列表说明如何验证各种Cisco IP电话上的默认路由器或网关配置:
Cisco IP 电话 7910 — 按 Settings,选择选项 6,然后按低音量直至 Default Router 字段出现。
Cisco IP 电话 7960/40 — 按 Settings,选择选项 3,然后向下滚动直至 Default Router 字段出现。
Cisco IP电话2sp+/30vip — 按**#,然后按#直到gtwy=出现。
注意:当您使用Cisco IP SoftPhone应用,并且机箱中安装了多个网络接口卡(NIC)时,请确保机箱中的网卡正确。此问题通常出现在 IP SoftPhone 软件版本 1.1.x 中。版本 1.2 应该会解决此问题。
注意:使用Cisco DT-24+网关时,请检查DHCP范围,并确保范围中有默认网关(003路由器)选项。003 路由器参数填充设备和 PC 中的 Default Gateway 字段。范围选项 3 应具有为网关进行路由的路由器接口的 IP 地址。
如果为群集间中继 (ICT) 配置了转码,请确保在与该中继关联的媒体资源组和媒体资源组列表中配置了媒体终结点 (MTP)。如果在不需要时指定了 MTP 或在需要时未能配置 MTP,则会导致 ICT 配置出现单向语音问题。
在 Cisco IOS 网关具有多个活动 IP 接口时,H.323 信令可能有一部分源自某个 IP 地址,而其他部分可能引用另一个源地址。这可能会生成各种问题。其中之一便是单向音频。
若要避免此问题,可以将 H.323 信令绑定到特定源地址。源地址可以属于物理或虚拟接口(环回)。 在接口配置模式下使用h323-gateway voip bind srcaddr ip-address命令。在具有 Cisco CallManager 指向的 IP 地址的接口下配置此命令。
此命令是在 Cisco IOS 软件版本 12.1(2)T 中引入的。请参阅虚拟接口的 H.323 支持。
注意:Cisco IOS软件版本12.2(6)中存在一个Bug,在该Bug中,此解决方案可能实际导致单向音频问题。有关详细信息,请参阅 Cisco bug ID CSCdw69681 (仅限注册用户)。
如果没有指定信令和媒体数据包的源接口,则在 Media Gateway Control Protocol (MGCP) 网关上可能会出现单向语音。如果发出 mgcp bind media source-interface interface-id 命令,然后发出 mgcp bind control source-interface interface-id 命令,则可以将 MGCP 媒体绑定到源接口。在发出命令后,请在 Cisco CallManager 中重置 MGCP 网关。
如果没有启用 mgcp bind 命令,则 IP 层仍会提供最佳本地地址。
mgcp bind 命令具有以下准则:
当网关上存在活动的 MGCP 呼叫时,会拒绝控制和媒体的 mgcp bind 命令。
如果绑定接口未打开,则该命令会被接受,但在接口出现前不会生效。
如果在绑定接口上未分配 IP 地址,则 mgcp bind 命令会被接受,但是只会在分配有效的 IP 地址之后才生效。在此期间,如果出现 MGCP 呼叫,则会拒绝 mgcp bind 命令。
当由于接口上的手动关闭或操作故障导致绑定接口断开时,在该接口上会禁用绑定活动。
当媒体网关控制器 (MGC) 上没有配置绑定时,用于源 MGCP 控制和媒体的 IP 地址是最佳可用 IP 地址。
如果有 Cisco IOS 网关连接到 Telco 或交换机,请验证在 Telco 或交换机后的被叫设备应答呼叫时是否正确发送了应答监督。未能接收应答监督会导致 Cisco IOS 网关无法在转发方向上开通(打开)音频路径。此故障会导致单向语音。解决方法是发出 voice rtp send-recv on 命令。
有关详细信息,请参阅在 Cisco IOS 网关和路由器上使用 voice rtp send-recv 命令及早开通双向音频。
语音路径是在 RTP 流开始时在向后方向上建立的。在 Cisco IOS 网关接收到来自远程端的连接消息之前,不会开通转发音频路径。
在某些情况下,需要在打开 RTP 通道后立即建立双向音频路径,而这发生在收到连接消息之前。若要达到此目的,请发出 voice rtp send-recv 全局配置命令。
此问题适用于长话旁路呼叫这类的方案,在这些方案中,语音路径包含多个 Cisco IOS 路由器或网关,并且使用压缩 RTP (cRTP)。cRTP(或 RTP Header Compression)是用于缩小 VoIP 数据包报头以重新获得带宽的方法。cRTP 在 VoIP 数据包上采用 40 字节 IP、User Datagram Protocol (UDP) 或 RTP 报头并且将其压缩为每个数据包 2 到 4 字节。对于一个采用 cRTP 的 G.729 编码呼叫,此压缩大约生成 12 kbps 的带宽。有关cRTP的更详尽信息请参阅《 VoIP-每呼叫带宽消耗》。
cRTP 是逐跳进行的,每跳上都进行解压和重新压缩。必须检查每个数据包报头才能进行路由。因此,需要在 IP 链路的两端都启用 cRTP。
还应当检验在链路两端,cRTP的运行是否达到预期要求,这一点也很重要。Cisco IOS 软件版本级别在交换路径和并发 cRTP 支持方面有所差异。
总之,发展历程是:
在 Cisco IOS 软件版本 12.0(5)T 之前的 Cisco IOS 软件版本中,cRTP 通过进程交换。
在 Cisco IOS 软件版本 12.0(7)T 和 Cisco IOS 软件版本 12.1(1)T 中,引入了针对 cRTP 的快速(以及 Cisco Express Forwarding (CEF))交换支持。
在 Cisco IOS 软件版本 12.1(2)T 中,引入了算法性能改进。
如果在 Cisco IOS 软件平台(Cisco IOS 软件版本 12.1)上运行 cRTP,请验证 Cisco bug ID CSCds08210 (仅限注册用户)不会影响 Cisco IOS 软件版本。此 bug 的症状是 VoIP 和 FAX over IP 在启用 RTP Header Compression 的情况下无法正常工作。
如果通过 show controller {e1 | t1}命令,语音网关上的时钟配置可能有一些不匹配。请参阅在有语音能力的基于 IOS 的平台上的时钟配置,并确保语音网关上的时钟配置正确。
如果使用网络地址转换 (NAT),必须满足最低软件级别要求。早期版本的 NAT 不支持 Skinny 协议转换。这些早期版本会导致单向语音问题。
必须运行 Cisco IOS 软件版本 12.1(5)T 或更高版本,才能使 Cisco IOS 网关同时支持 Skinny 和 H.323 版本 2 以及 NAT。有关详细信息,请参阅对 Cisco CallManager 的 IP 电话 NAT 支持。
注:如果Cisco CallManager使用TCP端口进行不同于默认端口(2000)的瘦客户端信令,则必须调整NAT路由器。发出 ip nat service skinny tcp port number 全局配置命令。
在PIX防火墙上同时使用NAT和Skinny所需的最低软件级别为6.0。有关详细信息,请参阅Cisco PIX防火墙版本6.0。
注:这些软件级别不一定支持完全网守支持所需的所有注册、准入和状态(RAS)消息。网守支持不属于本文讨论范围。
Cisco IOS软件命令voice-fastpath enable是AS5350和AS5400的隐藏全局配置命令。该命令默认启用。若要禁用该命令,请发出 no voice-fastpath enable 全局配置命令。
当该命令启用时,会缓存为特定呼叫打开的逻辑通道的 IP 地址和 UDP 端口号信息。该命令阻止 RTP 流到达应用层。而是使数据包在较低层上转发。这有助于在高呼叫量方案中稍微减少 CPU 利用率。
当使用保留或转接等附加服务时,voice-fastpath 命令会使路由器将音频流到缓存的 IP 地址和 UDP 端口。会忽略在恢复保留的呼叫之后或完成转接之后生成的新逻辑通道信息。若要避免此问题,流量始终必须进入应用层,以便考虑重新定义逻辑通道并使音频流到新的 IP 地址和 UDP 端口对。因此,请务必禁用 voice-fastpath 以支持附加服务。
Cisco IP SoftPhone 允许 PC 按照类似于 Cisco IP 电话 7900 系列电话的方式工作。通过虚拟私有网络 (VPN) 连接回公司网络的远程用户必须配置一些其他设置,才能避免单向语音问题。这是因为媒体流需要知道连接的终点。
解决方案是在网络音频设置下配置 VPN IP 地址而不是网络适配器的 IP 地址。有关详细信息,请参阅如何在 VPN 上使用 Cisco IP SoftPhone。
Cisco VPN 3002 硬件客户端可以在两种模式下运行:客户端模式和网络扩展模式 (NEM)。 在客户端模式下,Cisco VPN 3002 客户端后的所有主机都是转换为 VPN 3002 客户端的外部 IP 地址的端口地址。当 IP 电话置于 VPN 3002 客户端之后时,H.323 无法使用端口地址转换 (PAT) 并且会形成单向音频。当 VPN 3002 在 NEM 中工作时,远程网络可以通过其真实 IP 地址(而不是基于 Nat 或基于 PAT 的 IP 地址)看到对方。如果 VPN 3002 配置为在 NEM 中工作,则 H.323 可以工作。换句话说,仅当 VPN 3002 在 NEM 中工作时,VPN 3002 客户端后的 IP 电话才能正常工作。因此,若要避免与 VPN 3002 客户端有关的单向语音问题,请将 VPN 3002 客户端配置为使用 NEM。
若要将 Cisco VPN 3002 硬件客户端配置为使用 NEM,请选择 Configuration > Quick > PAT,然后在 PAT 窗口中单击 No, use Network Extension mode 。
有关详细信息,请参阅将 Cisco VPN 3002 硬件客户端配置为 EzVPN 为网络扩展模式的 Cisco IOS 路由器
用于验证数据包流的两个有用命令是 debug cch323 rtp 命令和 debug voip rtp 命令。debug cch323 rtp命令显示路由器发送(X)和接收(R)的数据包。大写字符指示成功的传输或接收。小写字符指示丢弃的数据包。
voice-ios-gwy#debug cch323 rtp RTP packet tracing is enabled voice-ios-gwy# voice-ios-gwy# voice-ios-gwy# voice-ios-gwy# voice-ios-gwy# !--- This is an unanswered outgoing call. !--- Notice that the voice path only cuts through in the forward direction and !--- that packets are dropped. Indeed, received packets are traffic from the !--- IP phone to the PSTN phone. These are dropped until the call is answered. Mar 3 23:46:23.690: ****** cut through in FORWARD direction ***** XXXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXr XrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXr XrXrXXrrrrrrrrrrrrrrrr voice-ios-gwy# voice-ios-gwy# !--- This is an example of an answered call: voice-ios-gwy# voice-ios-gwy# *Mar 3 23:53:26.570: ****** cut through in FORWARD direction ***** XXXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXr XrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXr XXrrrrrXrXrXrXrXrXrXrXrXrXrXrXrrXXrrXrXrXrXrXrXXXXXXXXXXXXXXXXrXXXXXXXXrXrXrXXrrXr XrXrXrXrXrXrXrXrXXrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr !--- At this point, the remote end picks up the phone. *Mar 3 23:53:30.378: ****** cut through in BOTH direction ***** XRXRXRXRXRXRXRXRXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRXRXRXRXRXR XXRRXRXRXXRRXRXRXRXRXXRXRXRXRXRXRRXRXXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXRRRRRRRRRRRRRRRRRRRRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXXRRRRRRRRRRRRRRRRRRRRRRRRRRRRXRXRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR RRRRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRRXXRXRXRXRXRXRRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXXRRRRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXR XXRRRRRRRRRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXRXR XRXRXRXRXRXRXRXRXRXRXRXRXXRRRXR !--- This is the end of the conversation.
注意:在Cisco IOS软件版本12.2(11)T及更高版本中,debug cch323 rtp命令行界面(CLI)命令已被debug voip rtp命令取代。
voice-ios-gwy#debug voip rtp --------cut through in BOTH direction------------------- *Mar 27 19:52:08.259: RTP(32886): fs rx d=10.48.79.181(20002), pt=0, ts=4FFBF0, ssrc=8E5FC294 *Mar 27 19:52:08.275: RTP(247): fs tx d=10.48.79.181(20002), pt=0, ts=5D00C8D9, ssrc=1F1E5093 *Mar 27 19:52:08.279: RTP(32887): fs rx d=10.48.79.181(20002), pt=0, ts=4FFC90, ssrc=8E5FC294 *Mar 27 19:52:08.295: RTP(248): fs tx d=10.48.79.181(20002), pt=0, ts=5D00C979, ssrc=1F1E5093 *Mar 27 19:52:08.299: RTP(32888): fs rx d=10.48.79.181(20002), pt=0, ts=4FFD30, ssrc=8E5FC294 *Mar 27 19:52:08.315: RTP(249): fs tx d=10.48.79.181(20002), pt=0, ts=5D00CA19, ssrc=1F1E5093 *Mar 27 19:52:08.319: RTP(32889): fs rx d=10.48.79.181(20002), pt=0, ts=4FFDD0, ssrc=8E5FC294 *Mar 27 19:52:08.335: RTP(250): fs tx d=10.48.79.181(20002), pt=0, ts=5D00CAB9, ssrc=1F1E5093 *Mar 27 19:52:08.339: RTP(32890): fs rx d=10.48.79.181(20002), pt=0, ts=4FFE70, ssrc=8E5FC294 *Mar 27 19:52:08.355: RTP(251): fs tx d=10.48.79.181(20002), pt=0, ts=5D00CB59, ssrc=1F1E5093 *Mar 27 19:52:08.359: RTP(32891): fs rx d=10.48.79.181(20002), pt=0, ts=4FFF10, ssrc=8E5FC294 *Mar 27 19:52:08.375: RTP(252): fs tx d=10.48.79.181(20002), pt=0, ts=5D00CBF9, ssrc=1F1E5093 *Mar 27 19:52:08.379: RTP(32892): fs rx d=10.48.79.181(20002), pt=0, ts=4FFFB0, ssrc=8E5FC294 *Mar 27 19:52:08.395: RTP(253): fs tx d=10.48.79.181(20002), pt=0, ts=5D00CC99, ssrc=1F1E5093 *Mar 27 19:52:08.399: RTP(32893): fs rx d=10.48.79.181(20002), pt=0, ts=500050, ssrc=8E5FC294 *Mar 27 19:52:08.976: RTP(282): fs tx d=10.48.79.181(20002), pt=0, ts=5D00DEB9, ssrc=1F1E5093 *Mar 27 19:52:08.980: RTP(32922): fs rx d=10.48.79.181(20002), pt=0, ts=501270, ssrc=8E5FC294 *Mar 27 19:52:08.996: RTP(283): fs tx d=10.48.79.181(20002), pt=0, ts=5D00DF59, ssrc=1F1E5093 *Mar 27 19:52:09.000: RTP(32923): fs rx d=10.48.79.181(20002), pt=0, ts=501310, ssrc=8E5FC294 *Mar 27 19:52:09.016: RTP(284): fs tx d=10.48.79.181(20002), pt=0, ts=5D00DFF9, ssrc=1F1E5093
通过收集经过 PIX 防火墙的呼叫流量信息可以排除单向呼叫故障。PIX capture 命令可以用于验证进行呼叫时打开和使用的端口。有关通过 PIX 防火墙的 VoIP 流量的详细信息,请参阅通过 PIX 防火墙处理 VoIP 流量。
注意:确保在生成排除故障所需的捕获文件后禁用捕获命令。
此问题只能在需要MTP的传出初始SIP呼叫设置中发生。在这种情况下,传出SIP INVITE消息将包含SDP优惠。在以下情况下可能会出现此问题:
在SIP中继上选中“需要媒体终端点的传出SIP中继呼叫”
仅IPv6端点和仅IPv4端点之间的呼叫
MTP资源可能间歇性地泄露,这会导致需要MTP资源的SIP呼叫失败。从RTMT,可用MTP资源达到0,对于每个需要MTP的呼叫,MTP分配失败计数上升。初始INVITE的SDP部分将错误地包含a=inactive。
完成这些步骤以解决问题:
如果可能,取消选中SIP中继配置上的Media Termination Point Required。
如果需要Early Offer,请配置Early Offer,但不选中Media Termination Point Required。
对于IPv6部署,请使用双堆栈而非仅IPv6终端。
注意:此记录在Bug ID CSCtk77040(仅限注册客户)中。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
13-Oct-2008 |
初始版本 |