C cenaly.com
免费开始

通话中断:30 秒断开、15–30 分钟断开

第 32 秒中断(无 ACK)、15–30 分钟后中断(会话计时器)、开机仅前几分钟能接听呼入 —— 原理与解决方案

4 min read 在演示中打开此界面
On this page 21

通话中断:30 秒后、15–30 分钟后

“正好在某个时间点”中断,不是信号差,而是定时器:某一方在等待某个东西,没等到,于是老老实实挂断了电话。因此,根据中断时间几乎可以确定原因:约 32 秒——通话开始的确认没有送达;约 15 或约 30 分钟——通话续期没有通过;来电只在最初几分钟可用——路由器关闭了通往电话的路径。下面用文字说明每种情况的机制以及该怎么做。

电话的通用设置见“SIP 电话设置”,其他症状见按症状诊断。

先在管理后台检查#

  1. 通话记录——打开中断的那通电话。“通话”会显示精确到秒的时长:0:31–0:33——第一种情况的特征,约 15:00 或 29:30——第二种。那里还有**“挂断方”(主叫方、员工或 PBX)和“挂断原因”**。
  2. 回声测试 *43,但要长时间:拨打并保持通话 45 秒。*43 也是一通电话,通话开始的确认在其中走同样的路径。在第 32 秒中断——电话与 PBX 之间有故障;坚持住了——门店的电话和网络正常,继续排查(外部通话、运营商)。
  3. 设备卡片 → “运行状态”:反复出现“无连接”失败——路由器关闭了通往电话的回程路径(见第三种情况)。
  4. 在卡片中**“拨打设备”**,在最后一次通话 10 分钟后:响铃了——通往电话的路径畅通;门店为绿色却无反应——这是路由器的问题。
  5. 在专属 PBX 上做 SIP 跟踪:重复出现没有 ACK 的 200 OK,随后 BYE——第一种情况;通话中途在 INVITE 或 UPDATE 之后出现 BYE——第二种。

30–32 秒后中断#

为什么会这样#

通话开始是一次三消息握手:“我打来”(INVITE)——“已接听”(200 OK)——“收到,开始”(ACK)。应答的一方会重复它的“已接听”,直到收到“收到”。SIP 协议规则:如果“收到”在 64 × T1 = 64 × 0.5 秒 = 32 秒内没有到达,通话就必须结束。此时语音已经在传输——所以半分钟内一切正常,然后通话自行掉线。

因此,在第 32 秒中断意味着:ACK 确认在某处丢失了。原因从常见到罕见:

  1. 路由器上的 SIP ALG。 路由器改写服务消息内的地址,确认发往了错误的地方或被丢弃。这是任何时候都要首先检查的。
  2. 数据包太大。 如果电话中启用了数十种编解码器,通话描述会膨胀到超过约 1300 字节,通过 UDP 会“分块”(分片)发送。许多路由器和防火墙会默默丢弃分片——正是那条消息丢失了。SIP 协议明确要求此类消息改用 TCP。
  3. 消息中的内部地址。 电话报告自己的内部地址(192.168.x.x),确认就按这个地址发送。我们的 PBX 会自行修正——回复到消息实际来源的地方——但运营商可能没有这种保护:那样只有外部通话会中断。
  4. 双重 NAT 或严格的防火墙,它放行通话的最初几条消息,却拦截后续的。
给网络管理员:哪一方挂断电话

根据 RFC 3261(§13.3.1.4),应答 200 OK 的一方以 T1 到 T2 的间隔重复它,并在 64 × T1 后仍未收到 ACK 时,用 BYE 请求结束会话;T1 默认是 500 毫秒(§17.1.1.1),由此得出 32 秒。

  • 来电打到电话: 200 OK 由电话发送,ACK 由 PBX 发送。ACK 在通往电话的路径上丢失——挂断电话的是电话。
  • 从电话拨出和 *43: 200 OK 由 PBX 发送,ACK 由电话发送。ACK 在通往 PBX 的路径上丢失——挂断电话的是 PBX。
  • 分片: RFC 3261 §18.1.1——如果请求长于 1300 字节(或在距路径 MTU 200 字节以内),客户端必须通过带拥塞控制的 TCP 发送它。我们的 PBX 在同一端口 5060 上接受 TCP。

该怎么做#

每一步之后都重复长时间的 *43(45 秒)和测试通话;只有在没有帮助时才继续下一步。

  1. 在路由器上关闭 SIP ALG(“SIP Helper”、“SIP Passthrough”、“SIP 的 ALG”)并重启路由器。常见品牌中它在哪里——见“网络、路由器和互联网”。
  2. 在电话中保留三种编解码器——G.711 PCMA、G.711 PCMU 和 G.722——其余关闭:消息会变短,不再被分片。
  3. 如果第 2 步没有帮助,将传输切换为 TCP(端口相同,5060):TCP 会自行正确地切分长消息,分片就消失了。我们的 PBX 同时接受 UDP 和 TCP。
  4. 只有外部通话中断,而 *43 和内部通话能保持——故障在 PBX 与运营商之间。把几通中断通话的时间发给支持。
  5. 消除双重 NAT——把运营商的路由器切换到桥接模式,或把电话直接接到它上面。

通话在 15 或 30 分钟后中断#

为什么会这样#

长时间通话时,双方会不时确认通话仍在进行——这就是会话计时器。间隔在通话开始时协商;一方承诺在间隔中点“续期”通话,另一方则等待续期。在我们的 PBX 上,会话计时器已启用,间隔为 1800 秒(30 分钟);其作用是让静默断联的通话不会挂上数小时并占用线路。

由此有两种表现:

  • 约 15 分钟——在间隔中点发送了续期,但没有成功:对方拒绝了它,或没有收到回复;
  • 约 29.5 分钟——完全没有续期,等待续期的一方在间隔到期前稍早挂断了电话。

续期为什么不成功:

  1. 路由器关闭了服务消息的通道。 通话期间语音是连续传输的,而服务消息则保持静默。如果电话关闭了 keep-alive,路由器会在几分钟后关闭服务消息的“门”——来自 PBX 的续期就无法到达电话。
  2. 电话不理解续期方式或拒绝它——固件过旧,启用了参数非标准的“Session Timer”。
  3. SIP ALG 破坏了续期消息。
  4. 运营商计时器——如果只有外部通话中断,且总是在同一分钟。

只有当电话也支持时,PBX 才会在通话中启用计时器 ⚠️ verify。大多数桌面电话的“Session Timer”出厂时是关闭的(根据文档,Yealink 和 Grandstream 也是如此),此时通话中根本没有计时器。

网络管理员:PBX 侧的参数值
  • timers=yes——支持计时器;timers_sess_expires=1800——间隔 1800 秒;timers_min_se=90——小于 90 秒 PBX 不接受(shared/sip/advanced-options.json,组 protocol)。
  • 根据 RFC 4028,续期在间隔中点(900 秒)发送,而未收到续期的一方会在到期前 min(32 秒, 间隔 / 3) 处以 BYE 结束会话——约 1768 秒。
  • PBX 不会因静音而中断(rtp_timeout=0),因此“无声通话”本身不会中断。
  • 在独立 PBX 上,相同的参数值位于“SIP 高级设置”(“会话计时器”、“会话刷新,秒”)。没有提供商要求时无需更改。

该怎么办#

  1. 在电话中启用 keep-alive——它会在通话期间保持服务消息通道打开。Yealink:Account → Advanced → Keep Alive Type(Default 或 Options)以及 Keep Alive Interval——30 秒(出厂值)。
  2. 在路由器上关闭 SIP ALG。
  3. 如果电话中启用了 “Session Timer”——恢复出厂值(关闭)或设置间隔为 1800 秒:Yealink——Account → Advanced → Session Timer / Session Expires;Grandstream——Account → SIP Settings → Session Timer(Enable Session Timer、Session Expiration)。
  4. 更新电话固件——通话续期错误通常在新版本中已修复。
  5. 只有外部通话中断,且在同一分钟——请将通话时间发送给支持:我们会与运营商核对计时器。

来电只在开机后的最初几分钟内可用#

为什么会这样#

电话位于路由器后面,PBX 只能通过电话最后一条消息打开的“门”才能访问它。路由器保持这些门的时间不长——家用路由器从半分钟到几分钟的静默——然后就会关闭。只要电话频繁发送消息(开机后立即注册、keep-alive),门就是打开的。一旦安静下来——门就关闭了,来自 PBX 的来电就会撞在路由器上。

此时管理后台中的门店可能仍显示为绿色:电话自己从内部刷新注册,注册能通过,但从外部进入电话已经不可能了。重启能“治愈”,因为它重新打开了门——只是暂时的。

我们的 PBX 每 60 秒用“你在线吗?”请求检查每台设备:这个反向数据包也能保持门打开——但前提是路由器关闭门的时间超过一分钟。设备没有响应——PBX 认为它不可用,门店熄灭,并在“运行状态”中出现故障。

该怎么办#

每一步之后,在空闲 10 分钟后检查来电(用“拨打设备”按钮或从相邻分机拨打);之后——仅在未解决时继续。

  1. 在电话中启用 keep-alive,间隔为 20–30 秒。Yealink:Account → Advanced → Keep Alive Type / Keep Alive Interval(出厂值 Default 和 30 秒);Fanvil——线路高级设置中的 Keep Alive Type。
  2. 在路由器上关闭 SIP ALG——它也喜欢“忘记”门。
  3. 缩短电话中的注册期限(Expires / Register Expiration)至 60–120 秒——电话会更频繁地自己打开门。小于 60 我们的 PBX 不接受(423 Interval Too Brief)。
  4. 在独立 PBX 上可以更频繁地检查设备:“SIP 高级设置” → “链路检查,秒”——20–30 代替 60。这从 PBX 侧保持门打开,但会增加服务流量;电话的 keep-alive 更可靠。
  5. 双重 NAT(提供商路由器 + 自己的路由器)——有两道门,且关闭方式不同:去掉一个——“网络、路由器和互联网”。

Wi-Fi 切换到移动网络时通话中断#

为什么会这样#

场所的 Wi-Fi 和移动网络是两个不同的地址。通话从其中一个地址开始,PBX 在通话开始时记住了语音来自哪里:出于安全考虑,它只接受来自该地址的声音。当智能手机切换到移动网络时,语音开始来自新地址——对 PBX 来说这已经是陌生的流,而服务消息仍继续发往已不存在的旧地址。在一个网络中开始的通话,切换到另一个网络时几乎总会中断。这是技术本身的限制,而不是故障。

同一问题的另一面:在智能手机切换期间,软电话会丢失注册,这几秒内的来电无法接通。Android 还会让后台应用休眠——详见概述中关于软件电话的部分。

该怎么做#

  1. 通话期间不要切换网络:在离开 Wi-Fi 覆盖范围前结束通话。
  2. 在智能手机上关闭从差 Wi-Fi 自动切换到移动网络的功能(iPhone 上为“Wi-Fi 助理”,Android 上为 Wi-Fi 设置中的“切换到移动网络”):目前它会在咖啡馆门口中断通话。
  3. 允许软电话在后台运行,并为其取消电池优化——这样它在更换网络后能更快重新注册。
  4. 在不能丢失通话的地方(前台、接待处),请使用桌面电话或 DECT 话筒,而不是智能手机。

向支持团队提供什么#

  • 几次中断通话的日期和时间(精确到分钟)、号码和分机号;
  • 多久之后中断(根据“通话”日志)以及是否每次都一样;
  • 是所有通话都中断,还是只有外部通话;长时间的 *43(45 秒)是否能保持;
  • 电话的型号和固件(设备标签中的字符串),其中是否启用了 keep-alive 和 Session Timer;
  • 路由器型号,SIP ALG 是否关闭,是否有运营商提供的第二个路由器;
  • 在独立 PBX 上——重复中断的 SIP 跟踪文本。

如何联系我们——“支持”。

常见问题#

为什么偏偏在第 32 秒中断,而不是第 30 秒或第 40 秒?#

因为这个数字内置于 SIP 协议本身:等待通话开始的确认时间为 64 个半秒间隔——即 32 秒。如果您的通话“大约 30 秒”且每次都一样——那就是它,即使秒表显示 31 或 33:部分时间用于振铃和接听。

SIP ALG 已关闭,但第 30 秒仍然中断——还有什么原因?#

检查路径上所有路由器的 ALG 是否都已关闭(运营商路由器通常有自己的 ALG),在电话中保留三种编解码器,并尝试 TCP 传输。如果只有外部通话中断,而 *43 能保持 45 秒——问题出在通往运营商的链路段,请发送通话时间。

门店显示绿色,但来电无法接通——这也算“中断”吗?#

这与来电仅在开机后最初几分钟可用一节中的机制相同:注册从内部更新,但从外部通往电话的门已经关闭。检查方法——空闲 10 分钟后“拨打设备”;解决办法——电话中的 keep-alive。

可以直接关闭 PBX 上的会话计时器吗?#

可以(在独立 PBX 上,“SIP 精细设置”),但这治标不治本:续期无法通过,是因为服务消息的路径被关闭或损坏,而同一路径在呼叫转接和保持时也会用到。此外,没有计时器时,无声中断的通话会挂上数小时并占用线路。先处理 keep-alive 和 SIP ALG。

相关章节#

来源#

  • RFC 3261——SIP:在收到 ACK 之前重复 200 OK,以及通过 64 × T1 结束会话(§13.3.1.4),T1 = 500 毫秒(§17.1.1.1),超过 1300 字节的消息改用 TCP(§18.1.1)——https://www.rfc-editor.org/rfc/rfc3261
  • RFC 4028——Session Timers:在间隔中点续期,在到期前 min(32 秒, 间隔 / 3) 发送 BYE——https://www.rfc-editor.org/rfc/rfc4028
  • Yealink SIP-T2/T3/T4/T5/CP920 Administrator Guide V86.60——Keep Alive Type / Interval(出厂默认,30 秒),Session Timer(出厂默认——关闭;Session Expires 1800 秒;在间隔一半时更新)
  • Grandstream GRP261x/262x/263x Administration Guide——Session Timer:Enable Session Timer(出厂默认“No”),Session Expiration,Min-SE——https://documentation.grandstream.com/knowledge-base/grp261x-grp262x-grp263x-series-administration-guide/
  • Zoiper 5 User Guide v1.0.7——UDP 和数据包大小限制,路由器 NAT 超时——https://www.zoiper.com/pdf/User%20Guide%20Zoiper%205%20v.1.0.7.pdf
  • PBX 代码:shared/sip/advanced-options.json(timers=yes、timers_sess_expires=1800、timers_min_se=90、qualify_frequency=60、minimum_expiration=60、rtp_timeout=0、force_rport、rewrite_contact),sip-edge/asterisk/rtp.conf(strictrtp=yes),sip-edge/sipsync/linecheck.go(回声测试 *43,检查上限 300 秒)
Was this article helpful?