作为通信学院的专家讲师,我将根据您的要求,继续深度剖析 IMS 协议的核心机制。本篇将专注于**应用服务器(AS)**在会话控制中的核心角色,特别是它作为 B2BUA 如何干预信令流、管理媒体协商,并利用特定的 SIP 消息完成补充业务和状态订阅。
VoLTE高清语音技术精要(十八):AS的B2BUA核心职能:会话干预与特殊信令管理
1. 导论:AS——IMS业务的决策中心
在 IMS 体系中,S-CSCF 扮演着呼叫的“大脑”,负责 iFC(初始过滤规则)的评估和路由。然而,所有用户签约的补充业务(Supplementary Services)和高级业务逻辑,都由 **AS(应用服务器)**承载。
AS 通常以 **B2BUA(Back-to-Back User Agent)**模式运行。这意味着 AS 在逻辑上由一个 UAS(User Agent Server)和一个 UAC(User Agent Client)组成,它终结(Terminate)信令流,并重新发起(Originate)新的信令流。B2BUA 的核心优势在于它能够完全控制对话(Call-ID 和 Tags 通常不同),从而实现对信令流和媒体流的深度干预。
本章将聚焦于 AS 如何利用 B2BUA 职能,在复杂的会话生命周期中,管理媒体更新、处理特殊 SIP 事务,并在故障时保障业务连续性。
2. B2BUA 在 SDP 协商与会话修改中的角色
AS 通过 B2BUA 模式,在会话中主动修改 SDP 媒体描述或 SIP 消息头,以实现业务逻辑(如呼叫保持、视频彩铃等)。
2.1 呼叫保持的媒体流干预
在呼叫保持业务中,AS 必须与 **MRF(多媒体资源功能)**协同工作,控制媒体流的方向和内容。
- 保持状态:当用户 A 发起
reINVITE消息,将媒体流方向设置为保持状态时,AS 收到消息。 - 保持音播放:AS 收到用户 B 回送的
200 OK消息后,如果用户 B 支持接收和发送媒体流消息,AS 会回复ACK给用户 B,并给 MRF 回200 OK消息带用户 B 的媒体,并下INFO指示 MRF 放保持音。 - 恢复状态:AS 收到用户 A 发来的
reINVITE消息中 SDP 属性的a行携带了a=sendrecv(恢复通话)后,会BYE掉 MRF(停止放保持音),并给用户 B 发送新的reINVITE消息(改向),让用户 A 与 B 恢复通话。
2.2 视频彩铃(V-CRBT)的媒体动态协商
在复杂的彩铃/彩振业务流程中,AS(彩铃 AS)在被叫摘机后,需要扮演关键的 B2BUA 角色,完成媒体从 MRF 到 UE 的切换和最终媒体协商。
- 彩铃 AS 收到被叫
200 OK:被叫 UE 摘机回复200 OK后,彩铃 AS 停止彩铃播放,并回复ACK。 - 向被叫发起
re-INVITE:彩铃 AS 向被叫 UE 发送一个不携带 SDP 的re-INVITE请求。 - 获取被叫媒体能力:被叫 UE 对
re-INVITE消息进行应答(如回复200 OK),携带被叫的 SDP(Offer)。 - 向主叫发送
UPDATE:彩铃 AS 随后向主叫侧发送UPDATE消息,其携带的 SDP(Offer)为被叫 UE 在上一个200 OK中携带的 SDP。 - 媒体匹配处理:彩铃平台在发送 SDP offer 给主叫时,需要将被叫 SDP 的媒体行类型与主叫侧当前通话类型进行匹配处理。例如,若被叫返回的 SDP 媒体行同时包含音频和视频,而此时主叫侧通话类型为音频,则彩铃平台需要将被叫 SDP 中的视频媒体行置 0 后,再将被叫 SDP 发送给主叫。
- 主叫回复:主叫 UE 回送针对
UPDATE的200 OK响应,其中携带和被叫 UE 协商后的 SDP(Answer)。
3. AS 在特殊 SIP 消息中的应用
AS 不仅参与会话(INVITE/BYE)流程,还参与多种独立事务或订阅机制,以实现其特定的业务功能。
3.1 AS 订阅注册状态(SUBSCRIBE/NOTIFY)
AS 可以订阅与其业务相关的用户注册状态,以便及时感知用户的在线状态或切换信息。
- AS 发送 SUBSCRIBE:如果用户的注册触发了向第三方应用注册的 iFC 规则,AS 在完成注册后也可以对向它注册的 public user identity 发送订阅请求,订阅其更多的注册信息。
- 消息要求:AS 发送的
SUBSCRIBE消息中,From域为 AS SIP URI,To域为用户要订阅注册状态的 PUI。Event消息头为reg(注册状态)。 - 计费携带:AS 发送的
SUBSCRIBE消息必须包含P-Charging-Vector消息头,内容包括icid和orig-ioi(type 3)。
3.2 独立事务处理(MESSAGE/OPTIONS)
对于 UE 发起的 独立事务消息(例如 MESSAGE、OPTIONS),P-CSCF 在校验 Service-Route 并插入 PAI/ICID 后,请求会路由到 S-CSCF,并可能触发 AS。
- 路由校验:P-CSCF 收到 UE 发起的未知方法请求(与当前对话无关),如果存在一个
Service-Route列表与请求的发起者相对应,则 P-CSCF 应确认Service-Route头中的 URI 列表是否也以相同的顺序存在于收到的请求所带的Route头域中。 - 身份插入:P-CSCF 会删除请求中可能含有的
P-Preferred-Identity,并插入P-Asserted-Identity,其值为请求的发起者。
4. AS 故障与 S-CSCF 的 Default Handling 机制
AS 的可靠性直接影响用户业务。S-CSCF 必须具备在 AS 无法响应时,根据策略决定呼叫走向的能力。
- S-CSCF 的 Default Handling:如果被触发的 AS 没有响应,则 S-CSCF 遵从与初始过滤规则相关的缺省处理过程,即基于过滤规则中的信息,或者终止会话,或者让会话继续。
- S-CSCF 的缺省行为:如果 iFC 规则没有包含在联系 AS 失败后 S-CSCF 应如何操作的指示,S-CSCF 的缺省行为是让呼叫继续。
- 业务影响:验证通过设置 DefaultHandling 可以使用户跳过不可达的 AS 继续完成接续。这保证了基本业务(语音呼叫)的连续性,但补充业务(如彩铃、呼叫保持等)将触发不成功。
5. P-CSCF/S-CSCF 的对话清理与 AS 关联
AS 对话是 SIP 核心对话的一个分支。在会话释放时,S-CSCF 必须确保与 AS 相关的对话和资源都被释放。
- S-CSCF 释放对话:如果一个会话根据 iFC 触发了一个或多个应用服务器,那么 S-CSCF 存储了所有经过 S-CSCF 并与该会话请求相关的对话信息。当释放该会话时,S-CSCF 需要根据存储的与会话请求相关的对话信息释放对话。
- BYE 流程中的 AS 路径:在网络内部发起释放一个当前存在的多媒体会话时,S-CSCF 必须基于保存的相关对话信息,向主被叫两侧发送
BYE请求。如果 S-CSCF 通过 AS 给用户提供服务,则 S-CSCF 必须通知相关 AS 结束业务。
6. 本章小结
应用服务器(AS)作为 IMS 的业务层,是所有复杂补充业务的执行者:
- B2BUA 模式:AS 主要以 B2BUA 模式工作,实现对信令流和媒体流的隔离与控制。
- 媒体控制:AS 通过修改 SDP 媒体属性(如呼叫保持)或与 MRF 协同(如视频彩铃)来管理媒体会话。
- 身份/路由校验:UE 发起的独立事务(如
MESSAGE)到达 S-CSCF 前,P-CSCF 必须完成Service-Route校验和 PAI 插入。 - 容灾保障:S-CSCF 依赖 Default Handling 策略,确保 AS 故障时,呼叫能够继续完成接续。
- 状态同步:AS 发送
SUBSCRIBE订阅注册状态时,必须包含P-Charging-Vector消息头。
7. 工程师进阶思考 (FAQ)
Q1:P-CSCF 收到 UE 发起的 INVITE 请求时,必须回送 100 (Trying) 临时响应。这个响应的目的是什么?它与 183 Session Progress 有何本质区别?
A1: P-CSCF 应给所有的 INVITE 请求回送 100 (Trying) 临时响应。
- 目的:
100 (Trying)响应阻止 UAC 重新传送INVITE请求。它告知终端请求已被接收并正在处理,从而防止终端在 SIP Timer A 超时后因未收到响应而重传,减轻网络信令负载。 - 区别:
100 (Trying)是一个逐跳(hop-by-hop)响应,Proxy 不会对它进行转发。它不携带 SDP,仅用于事务层面的确认。而183 Session Progress是一个端到端(end-to-end)响应,通常携带 SDP 用于早期媒体协商,并触发底层专用 QoS 流的建立。183响应需要100rel机制来保证可靠传输。
Q2:在 AS 故障时,S-CSCF 如何利用 DefaultHandling 来决定呼叫的下一步动作?如果 iFC 未明确指示,S-CSCF 的默认行为是什么?
A2: 当被触发的 AS 没有响应时,S-CSCF 会遵从与**初始过滤规则(iFC)相关的缺省处理过程(Default Handling)**来决定下一步动作。
- Continue/Terminate:
DefaultHandling设置决定是终止会话还是让会话继续。 - 缺省行为:如果初始过滤规则没有包含在联系 AS 失败后 S-CSCF 应如何操作的指示,S-CSCF 的缺省行为是让呼叫继续。
- 目的:验证通过设置
DefaultHandling可以使用户跳过不可达的 AS 继续完成接续。虽然补充业务(如彩铃)将触发不成功,但基本业务(语音通话)得以继续,保障了业务连续性。
Q3:P-CSCF 收到 UE 始发的独立事务请求(如 MESSAGE 或 OPTIONS)时,需要进行哪些路由和身份校验?如果校验失败,将返回什么状态码?
A3: P-CSCF 对独立事务请求(与当前对话无关)进行严格校验:
- 路由校验:P-CSCF 应确认
Service-Route头中的 URI 列表是否也以相同的顺序存在于收到的请求所带的Route头域中。 - 身份断言:如果请求中含有
P-Preferred-Identity,则 P-CSCF 应删除该头域并插入P-Asserted-Identity,其值为请求的发起者。 - 计费锚定:对于非
INVITE对话,P-CSCF 应在P-Charging-Vector中增加icid参数。 - 异常响应:如果
Service-Route中的 URI 列表校验失败,则 P-CSCF 应回复400 (Bad Request)响应且不再继续处理请求。或者,P-CSCF 可以选择用最新注册消息中的Service-Route头替换请求消息的Route头。如果没有发现存在对应的对话,则 P-CSCF 应回复403 (Forbidden)响应。