好的,通信学院的专家讲师。我已经完成了 28 篇深度解析。根据您的指令,我将继续为您撰写 SIP 协议深度解析系列的第二十九篇。本篇将作为本系列的总结篇之一,聚焦于 IMS 核心网元对身份和路由的最终校验与合规要求,并系统回顾 P-CSCF 对 SIP 消息头域的精确操作,特别是涉及到 SIP 事务的完整性保证。

拆解进度更新: 我们目前已完成了 28 篇深度解析。根据现有资料和主题覆盖范围,预计还需要拆解 1 篇核心文章(即下一篇,第三十篇),即可完成对整个 IMS 规范体系的系统性解读。


VoLTE高清语音技术精要(二十九):IMS 信令的最终合规性:P-CSCF 的身份、Via 与路由头的强制校验

1. 导论:合规性——电信级服务的基石

IMS 网络中的每一个 SIP 消息都必须经过严格的合规性(Compliance)检查,以保障网络的安全、可控和精确计费。P-CSCFS-CSCF 是执行这些合规性检查的核心网元。P-CSCF 负责在终端(非信任域)和核心网(信任域)之间设置防火墙和会话锚点,通过对私有头域(P-Headers)和核心路由头域(ViaRoute)的精确处理,维持会话的完整性。

本章将系统回顾 P-CSCF 在处理各种 SIP 消息类型时(始发请求、终结请求、后续请求、独立事务)必须遵守的身份断言、路由校验和 Via 列表匹配规则,并总结在校验失败时返回的 SIP 状态码。

2. P-CSCF 对会话请求的路由与身份校验

P-CSCF 必须根据请求的类型(对话内/对话外,始发/终结),执行不同的身份和路由操作。

2.1 始发请求和后续请求的校验

对于 UE 发起的请求,P-CSCF 需要校验路由的合法性和身份的权威性:

  1. 目标刷新请求(reINVITE/UPDATE:P-CSCF 应确认请求中的 Route 列表是否与同一对话中保存下来的 Record-Route 列表匹配。如果校验失败,应回复 400(Bad Request)响应
  2. 其他后续请求(如 BYE, PRACK:P-CSCF 应该确认请求是否和一个涉及该请求的发起者的对话有关,并确认请求中的 Route 列表是否与同一对话中保存下来的 Record-Route 列表匹配
  3. 独立事务请求(如 MESSAGE, OPTIONS:如果存在 Service-Route 列表与请求的发起者相对应,则 P-CSCF 应确认 Service-Route 头中的 URI 列表是否也以相同的顺序存在于收到的请求所带的 Route 头域中
  4. 身份断言:对于 UE 发起的未知方法请求(与当前的对话无关),如果请求中含有 P-Preferred-Identity,则 P-CSCF 应删除该头域插入 P-Asserted-Identity,其值为请求的发起者。
  5. CSeq 更新:对于 INVITE 对话,P-CSCF 应该用收到的请求消息中的 CSeq 字段的值替换原来保存的值

2.2 终结请求(MT INVITE)的预转发处理

对于发往 UE 的对话初始请求(例如 INVITE),P-CSCF 在转发之前必须执行以下备份和转换功能:

  • 路由转换与保存转换 Record-Route 列表信息到 Route 列表信息中,并保存 Route 列表
  • 状态备份保存请求中的 Contact、CSeq 和 Record-Route 字段并备份
  • Via/Record-Route 插入:将 P-CSCF 的 SIP URI 填加到 Record-Route 头域最顶端并保存列表;将 P-CSCF 地址填加到 Via 头域最顶端并保存该列表
  • 计费/身份备份删除并保存 P-Charging-Function-Addresses 和 P-Charging-Vector 中的 icid备份 P-Called-Party-ID

3. P-CSCF 对响应消息的 Via 列表校验

Via 头域列表是 SIP 响应消息确保原路返回的关键。P-CSCF 必须对所有收到的响应消息(包括 1xx/2xx/4xx 等)执行严格的 Via 列表匹配校验。

3.1 Via 校验要求

无论是 UE 终结请求的响应,还是其他后续请求的响应,P-CSCF 均应确认 Via 列表是否与同一对话的请求消息中保存的 Via 列表匹配

3.2 Via 校验失败的异常处理

当 P-CSCF 收到请求的任何响应,发现 Via 列表与同一对话的请求消息中保存的 Via 列表不匹配时,P-CSCF 应丢弃 Via 头,或者替换成保存的 Via 列表

3.3 终结请求响应的身份断言

P-CSCF 收到 MT 初始请求的 1xx2xx 响应时,如果响应中有 P-Preferred-Identity,P-CSCF 应删除该头域插入 P-Asserted-Identity,其内容为收到请求时保存下来的 P-Called-Party-ID

4. IMS 核心网元的会话冲突与异常状态码

P-CSCF 和 S-CSCF 必须通过精确的 SIP 状态码,来指示终端和上游网元会话状态的异常。

4.1 会话不存在的拒绝(403 Forbidden)

对于 P-CSCF 收到 UE 发起的后续请求或独立请求,如果没有发现存在对应的对话,P-CSCF 应回复 403(Forbidden)响应,且不再转发该请求。

4.2 释放冲突的指示(481 Dialog/Transaction Does Not Exist)

481 响应用于处理会话释放过程中的信令冲突。当 P-CSCF 在释放对话的过程中收到关于对话的请求时,P-CSCF 应该中止该请求,并回送响应 481(对话或者事务不存在)

S-CSCF 发起会话释放时,如果又接收到该会话的其他请求消息,S-CSCF 应终止接受请求并返回一个 481 响应

4.3 P-CSCF 主动发起的 CANCEL(503 Service Unavailable)

当 P-CSCF 在正在建立的多媒体会话中,因申请资源失败(例如收到失去无线覆盖的指示、NAT 端口申请失败、QoS 授权申请失败等)或内部原因导致呼叫失败时,P-CSCF 应向 UE 发送 CANCEL 消息以释放会话,并包含原因值为 503(Service Unavailable)

5. AS 订阅与计费信息的携带

AS 在向用户订阅注册状态信息时,必须携带计费关联信息。

  • AS SUBSCRIBE:AS 对向它注册的 public user identity 发送订阅请求,订阅其更多的注册信息。
  • 计费头域:AS 发送 Subscribe 消息时,必须包含 P-Charging-Vector 消息头,内容包括 icidorig-ioi(type 3)

6. 本章小结

IMS 信令的合规性依赖于 P-CSCF 对身份、路由和事务状态的严格管理。P-CSCF 负责:

  1. SIP 头域操作:精确删除 PPI、插入 PAI、备份 P-Called-Party-IDicid
  2. 路由和状态校验:确保 Route 列表与保存的 Record-Route/Service-Route 匹配。
  3. 冲突处理:在不同场景下返回 400(路由非法)、403(对话丢失)、481(释放冲突) 等状态码。
  4. 资源同步:通过主动发送 CANCEL/BYE 消息(携带原因值如 503 或 488)来应对资源失败和策略不匹配。

7. 工程师进阶思考 (FAQ)

Q1:CDR 话单关闭原因(Cause-For-Record-Closing)字段中,值 3 和值 4 分别代表什么含义?它们在实际计费中有何用途?

A1: Cause-For-Record-Closing 字段由 CCF 填写,用于描述话单关闭的原因。

  • 值 3:代表到达话单分割时间(time-Limit)。
  • 值 4:代表媒体切换导致话单分割(service-Change)。

这两种值都属于部分话单的分割标志。在实际计费中,当因超时或媒体切换(例如语音到视频)导致话单分割时,CCF 会为该会话的每个部分话单分配 Record-Sequence-Number,从 1 开始递增。这使得计费系统能够判断一次会话是否存在部分话单丢失。

Q2:在 S-CSCF 容灾接管的始发流程中,如果 P-CSCF/BAC 检测到 S-CSCF1 故障,它如何通知终端进行切换?

A2: 当 P-CSCF/BAC 转发请求至 VoLTE 终端已注册的 S-CSCF1,没有收到 S-CSCF1 返回的任何响应,并确认 S-CSCF1 故障后,P-CSCF/BAC 会向终端返回 504 响应

  • 该 504 响应的消息体中,XML 的 <alternative-service><type>restoration<action>initial-registration
  • 此举通知终端进行重新注册,终端重新注册至池内的其他 S-CSCF 后恢复始发业务。

Q3:AS 在处理用户的呼叫保持(Call Hold)业务时,如何利用 SDP 的媒体流方向属性来控制保持音的播放和通话的恢复?

A3: AS 作为 B2BUA,通过 reINVITEUPDATE 消息和 SDP 属性控制媒体流。

  1. 呼叫保持:用户 A 发送 reINVITE(或 UPDATE),SDP 属性的 a 行通常设置为 sendonly。AS 收到用户 B 的 200 OK 响应后,给用户 A 回送 reINVITE 200 OK 消息,SDP 属性的 a 行携带了 a=recvonly,指示用户 A 只能接收媒体流(保持音)。同时,AS 给 MRF 回 200 OK 带用户 B 的媒体并下 INFO 指示放保持音
  2. 呼叫恢复:AS 收到用户 A 发的 reINVITE 消息中 SDP 属性的 a 行携带了 a=sendrecv(恢复通话)后,会 BYE 掉 MRF,并给用户 B 发送 reINVITE 消息(改向),让用户 A 与 B 恢复通话。

我们已完成 28 篇深度解析。根据估算,还剩下 1 篇核心内容待拆解。请发出“请继续”指令。