通话中断:30 秒后、15–30 分钟后
“正好在某个时间点”中断,不是信号差,而是定时器:某一方在等待某个东西,没等到,于是老老实实挂断了电话。因此,根据中断时间几乎可以确定原因:约 32 秒——通话开始的确认没有送达;约 15 或约 30 分钟——通话续期没有通过;来电只在最初几分钟可用——路由器关闭了通往电话的路径。下面用文字说明每种情况的机制以及该怎么做。
电话的通用设置见“SIP 电话设置”,其他症状见按症状诊断。
先在管理后台检查#
- 通话记录——打开中断的那通电话。“通话”会显示精确到秒的时长:0:31–0:33——第一种情况的特征,约 15:00 或 29:30——第二种。那里还有**“挂断方”(主叫方、员工或 PBX)和“挂断原因”**。
- 回声测试
*43,但要长时间:拨打并保持通话 45 秒。*43也是一通电话,通话开始的确认在其中走同样的路径。在第 32 秒中断——电话与 PBX 之间有故障;坚持住了——门店的电话和网络正常,继续排查(外部通话、运营商)。 - 设备卡片 → “运行状态”:反复出现“无连接”失败——路由器关闭了通往电话的回程路径(见第三种情况)。
- 在卡片中**“拨打设备”**,在最后一次通话 10 分钟后:响铃了——通往电话的路径畅通;门店为绿色却无反应——这是路由器的问题。
- 在专属 PBX 上做 SIP 跟踪:重复出现没有
ACK的200 OK,随后BYE——第一种情况;通话中途在INVITE或UPDATE之后出现BYE——第二种。
30–32 秒后中断#
为什么会这样#
通话开始是一次三消息握手:“我打来”(INVITE)——“已接听”(200 OK)——“收到,开始”(ACK)。应答的一方会重复它的“已接听”,直到收到“收到”。SIP 协议规则:如果“收到”在 64 × T1 = 64 × 0.5 秒 = 32 秒内没有到达,通话就必须结束。此时语音已经在传输——所以半分钟内一切正常,然后通话自行掉线。
因此,在第 32 秒中断意味着:ACK 确认在某处丢失了。原因从常见到罕见:
- 路由器上的 SIP ALG。 路由器改写服务消息内的地址,确认发往了错误的地方或被丢弃。这是任何时候都要首先检查的。
- 数据包太大。 如果电话中启用了数十种编解码器,通话描述会膨胀到超过约 1300 字节,通过 UDP 会“分块”(分片)发送。许多路由器和防火墙会默默丢弃分片——正是那条消息丢失了。SIP 协议明确要求此类消息改用 TCP。
- 消息中的内部地址。 电话报告自己的内部地址(
192.168.x.x),确认就按这个地址发送。我们的 PBX 会自行修正——回复到消息实际来源的地方——但运营商可能没有这种保护:那样只有外部通话会中断。 - 双重 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 秒)和测试通话;只有在没有帮助时才继续下一步。
- 在路由器上关闭 SIP ALG(“SIP Helper”、“SIP Passthrough”、“SIP 的 ALG”)并重启路由器。常见品牌中它在哪里——见“网络、路由器和互联网”。
- 在电话中保留三种编解码器——G.711 PCMA、G.711 PCMU 和 G.722——其余关闭:消息会变短,不再被分片。
- 如果第 2 步没有帮助,将传输切换为 TCP(端口相同,5060):TCP 会自行正确地切分长消息,分片就消失了。我们的 PBX 同时接受 UDP 和 TCP。
- 只有外部通话中断,而
*43和内部通话能保持——故障在 PBX 与运营商之间。把几通中断通话的时间发给支持。 - 消除双重 NAT——把运营商的路由器切换到桥接模式,或把电话直接接到它上面。
通话在 15 或 30 分钟后中断#
为什么会这样#
长时间通话时,双方会不时确认通话仍在进行——这就是会话计时器。间隔在通话开始时协商;一方承诺在间隔中点“续期”通话,另一方则等待续期。在我们的 PBX 上,会话计时器已启用,间隔为 1800 秒(30 分钟);其作用是让静默断联的通话不会挂上数小时并占用线路。
由此有两种表现:
- 约 15 分钟——在间隔中点发送了续期,但没有成功:对方拒绝了它,或没有收到回复;
- 约 29.5 分钟——完全没有续期,等待续期的一方在间隔到期前稍早挂断了电话。
续期为什么不成功:
- 路由器关闭了服务消息的通道。 通话期间语音是连续传输的,而服务消息则保持静默。如果电话关闭了 keep-alive,路由器会在几分钟后关闭服务消息的“门”——来自 PBX 的续期就无法到达电话。
- 电话不理解续期方式或拒绝它——固件过旧,启用了参数非标准的“Session Timer”。
- SIP ALG 破坏了续期消息。
- 运营商计时器——如果只有外部通话中断,且总是在同一分钟。
只有当电话也支持时,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 高级设置”(“会话计时器”、“会话刷新,秒”)。没有提供商要求时无需更改。
该怎么办#
- 在电话中启用 keep-alive——它会在通话期间保持服务消息通道打开。Yealink:Account → Advanced → Keep Alive Type(Default 或 Options)以及 Keep Alive Interval——30 秒(出厂值)。
- 在路由器上关闭 SIP ALG。
- 如果电话中启用了 “Session Timer”——恢复出厂值(关闭)或设置间隔为 1800 秒:Yealink——Account → Advanced → Session Timer / Session Expires;Grandstream——Account → SIP Settings → Session Timer(Enable Session Timer、Session Expiration)。
- 更新电话固件——通话续期错误通常在新版本中已修复。
- 只有外部通话中断,且在同一分钟——请将通话时间发送给支持:我们会与运营商核对计时器。
来电只在开机后的最初几分钟内可用#
为什么会这样#
电话位于路由器后面,PBX 只能通过电话最后一条消息打开的“门”才能访问它。路由器保持这些门的时间不长——家用路由器从半分钟到几分钟的静默——然后就会关闭。只要电话频繁发送消息(开机后立即注册、keep-alive),门就是打开的。一旦安静下来——门就关闭了,来自 PBX 的来电就会撞在路由器上。
此时管理后台中的门店可能仍显示为绿色:电话自己从内部刷新注册,注册能通过,但从外部进入电话已经不可能了。重启能“治愈”,因为它重新打开了门——只是暂时的。
我们的 PBX 每 60 秒用“你在线吗?”请求检查每台设备:这个反向数据包也能保持门打开——但前提是路由器关闭门的时间超过一分钟。设备没有响应——PBX 认为它不可用,门店熄灭,并在“运行状态”中出现故障。
该怎么办#
每一步之后,在空闲 10 分钟后检查来电(用“拨打设备”按钮或从相邻分机拨打);之后——仅在未解决时继续。
- 在电话中启用 keep-alive,间隔为 20–30 秒。Yealink:Account → Advanced → Keep Alive Type / Keep Alive Interval(出厂值 Default 和 30 秒);Fanvil——线路高级设置中的 Keep Alive Type。
- 在路由器上关闭 SIP ALG——它也喜欢“忘记”门。
- 缩短电话中的注册期限(Expires / Register Expiration)至 60–120 秒——电话会更频繁地自己打开门。小于 60 我们的 PBX 不接受(
423 Interval Too Brief)。 - 在独立 PBX 上可以更频繁地检查设备:“SIP 高级设置” → “链路检查,秒”——20–30 代替 60。这从 PBX 侧保持门打开,但会增加服务流量;电话的 keep-alive 更可靠。
- 双重 NAT(提供商路由器 + 自己的路由器)——有两道门,且关闭方式不同:去掉一个——“网络、路由器和互联网”。
Wi-Fi 切换到移动网络时通话中断#
为什么会这样#
场所的 Wi-Fi 和移动网络是两个不同的地址。通话从其中一个地址开始,PBX 在通话开始时记住了语音来自哪里:出于安全考虑,它只接受来自该地址的声音。当智能手机切换到移动网络时,语音开始来自新地址——对 PBX 来说这已经是陌生的流,而服务消息仍继续发往已不存在的旧地址。在一个网络中开始的通话,切换到另一个网络时几乎总会中断。这是技术本身的限制,而不是故障。
同一问题的另一面:在智能手机切换期间,软电话会丢失注册,这几秒内的来电无法接通。Android 还会让后台应用休眠——详见概述中关于软件电话的部分。
该怎么做#
- 通话期间不要切换网络:在离开 Wi-Fi 覆盖范围前结束通话。
- 在智能手机上关闭从差 Wi-Fi 自动切换到移动网络的功能(iPhone 上为“Wi-Fi 助理”,Android 上为 Wi-Fi 设置中的“切换到移动网络”):目前它会在咖啡馆门口中断通话。
- 允许软电话在后台运行,并为其取消电池优化——这样它在更换网络后能更快重新注册。
- 在不能丢失通话的地方(前台、接待处),请使用桌面电话或 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。
相关章节#
- 电话不工作:按症状诊断——包括“呼出正常但没有来电”
- 没有声音、单向可听、回声、“机器人”
- 无法注册:提示和错误代码——“注册后消失”,
423 Interval Too Brief - 电话通信的网络、路由器和互联网——在哪里关闭 SIP ALG、双重 NAT
- SIP 电话设置——场所网络、通信质量检查
- 通话日志和 SIP 跟踪
来源#
- 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 秒)