摘要

  • 在 RFC 3960 中,180 Ringing 证明的是被叫正在接受提醒,不证明带内回铃音或语音提示已经到达主叫。
  • 类传统电话的终端可以在没有媒体包时生成本地回铃,收到媒体后切换播放;协商、鉴别、解码和最终通话结果仍须分别判断。

主叫听见“嘟——嘟——”时,声音未必来自远端。终端可能只收到一条“被叫正在振铃”的 SIP 消息,然后在本地合成用户熟悉的回铃音。稍后,远端语音提示或特殊铃声的包抵达,终端停止本地声音,转而播放网络媒体。人的感受连续,证据来源却在中途换了主人。

RFC 3960在 2004 年讨论早期媒体:初始 INVITE 之后、最终响应之前交换的音视频。它可以是回铃、排队通知、失败说明或交互式提示。这份文档的重要之处不是规定一种统一铃声,而是拒绝把 SIP 信令状态当成媒体存在证明。

文档给出的 POTS 风格策略有三步。没收到 180 Ringing,不生成本地回铃;收到 180 但没有媒体包,就本地生成;收到 180 且已有媒体包,就播放媒体并停止本地回铃。180 的含义是被叫正在接受提醒。只要这一状态成立,服务器就应发送该响应,不论早期媒体会话处于什么状态。

为什么不能只看信令?简单服务器可能不使用可靠临时响应也直接发送早期媒体;另一个服务器可能为了预条件而在可靠临时响应里给出 SDP answer,却暂时根本不打算发送媒体。RFC 3262用 RSeq、RAck 与 PRACK 让临时响应可靠,但可靠到达的控制消息不是 RTP 收据。RFC 3312让会话先等待资源条件;条件协商和声音到达仍不是一件事。

两条路径还会互相超车。SIP 信令通常经过提供业务的多个代理,媒体则倾向走低时延路径。媒体包可能先于描述它们的 SIP 消息到达;相反,180 也可能先到,媒体连通性仍在建立。一个“将有早期媒体”的标志无法消除两种竞态。RFC 3960 因而选择本地可观察的判断:先让用户得到进展反馈,一旦实际媒体出现就让位。

“包到了”也不是证据链终点。包里可能只有静音或舒适噪声。RFC 3711为 SRTP 提供鉴别、完整性、重放保护与可选保密性,但密码学验收也不等于解码成功、扬声器发声、用户听清或作出回应。180、媒体参数、首包、首个通过鉴别的有用音频和人类结果必须分栏记录。

RFC 3264定义 offer/answer,RFC 3261定义承载它们的 SIP 流程。协商完成说明参数相容,不说明媒体已传输。终端甚至应在 200 OK 到达前准备播放,因为媒体可能先到;若坚持等最终响应,接听者开口的前几个音节就可能被截掉。

分叉让“一通电话”同时出现多个候选现实。一个 INVITE 可以抵达多个终端,每个终端形成早期对话并发出媒体。把多路音频一起播放会让人困惑,带宽也可能不允许全部接收。在网关模型里,主叫终端往往选一条早期分支,把其他分支静音。后来返回 2xx 的恰好可能是先前被静音的分支;再解除静音时,开头又可能丢失。先听到的分支没有权力决定最终接通的是谁。

应用服务器模型把早期媒体与常规媒体进一步分离。RFC 3959定义 early-session disposition 与 option tag,使两类媒体使用不同的 offer/answer 交换。终端可以拒绝或静音早期 offer,而不破坏最终要继续的常规会话。这减少了分叉切换的混乱,却仍不能替终端决定该呈现哪一路,也不证明包已经到达。

Alert-Info 也没有获得时间控制权。它可以在终端已经决定本地生成回铃时指定替代声音,却不告诉终端何时开始响。

安全问题说明这不是单纯的用户界面细节。SDP 里的 IP 地址和端口不自带身份;攻击者可能获知或猜中它,恶意 offer 还可能诱导终端向受害者发送大量流量。RFC 建议保护会话描述、在媒体层鉴别,并在大量发送前验证对方愿意接收。它还指出计费激励:若早期媒体免费、正式通话收费,恶意终端可能维持双向早期媒体而永不发送 200 OK。但一刀切禁止双向早期媒体又会破坏接通前收集输入的合法 IVR。

RFC 3960 留下的历史教训很具体:“正在振铃”可能指远端提醒、本地合成声音、收到的带内媒体,或用户实际听见。系统可以把体验衔接得顺滑,却不能让其中一个事实冒充另一个事实的收据。

RFC Editor 的文档记录与勘误查询固定了出版证据;相关标准包括 RFC 3261、RFC 3262、RFC 3264、RFC 3959、RFC 3312与 RFC 3711。