好的,专家讲师。我将继续为您撰写SIP协议深度解析系列的第五篇。本篇将专注于 SIP 地址模型的两大核心要素:逻辑身份(From, To)与物理地址(Contact),结合某运营商和某运营商的IMS规范,深入分析 P-CSCF 等网元如何利用这些头域,在复杂的 IMS 拓扑中实现精确的会话锚定和寻址。
VoLTE高清语音技术精要(五):SIP路由机制(二):From, To 与 Contact 的逻辑和物理地址分离
1. 导论:逻辑身份与物理地址的二元对立
在上一篇中,我们探讨了 Via、Request-URI 和 Record-Route 如何共同完成 SIP 消息的逐跳路由和对话路径锚定。然而,这些头域主要解决“请求如何通过网络”的问题,而没有解决“请求的接收者在哪里”的核心问题。
SIP 地址模型基于一个哲学原则:逻辑身份与物理地址的严格分离。
- 逻辑身份(Logical Identity):即用户的公共标识(Public User Identity, PUI)或地址记录(Address of Record, AOR)。它回答了“你是谁”的问题,用于会话的逻辑归属和对话的识别。这主要由
From和To头域承载。 - 物理地址(Physical Location):即用户终端当前真正可达的 IP 地址和端口。它回答了“你在哪”的问题,用于 SIP 代理将消息最终送达终端。这主要由
Contact头域承载。
在 IMS 网络中,这种分离机制是实现用户移动性和会话连续性的基石。网络通过复杂的注册机制,将用户的逻辑身份(From/To)永久绑定到其动态变化的物理地址(Contact),并由 P-CSCF 和 S-CSCF 负责维护这种映射关系。
2. 逻辑身份的载体:From 与 To 头域
From 和 To 头域是 SIP 协议中不可或缺的头域,它们定义了 SIP 请求的逻辑发起方和逻辑目标方。
2.1 格式与内容:IMPU 的承载
在 IMS/VoLTE 环境中,From 和 To 头域承载的通常是用户的 IMPU(IP Multimedia Public User Identity,IP多媒体公有用户标识),通常以 SIP URI 或 TEL URI 的形式出现。
示例:
From: "张三" <sip:[email protected]>;tag=a48sTo: <sip:[email protected]>
关键组成部分:
- 显示名称 (Display Name):例如
"张三",这是可选的,用于显示给用户,对路由没有影响。 - 地址记录 (AOR/PUI):
<sip:[email protected]>,这是逻辑身份,也是路由决策和业务触发的依据。 - 标签 (Tag):
tag=a48s或tag=b77t。
2.2 对话标识的基石:标签(Tag)参数
From 和 To 头域中携带的 tag 参数是它们在会话控制中的核心作用。正如我们在第三篇所述,SIP 对话(Dialog)由 Call-ID、**From 标签(Local Tag)**和 **To 标签(Remote Tag)**三元组唯一标识。
| 头域 | 标签状态(请求) | 标签状态(响应) | 作用 | 来源 |
|---|---|---|---|---|
| From | 必选携带 tag | 保持不变 | 标识 UAC 侧的对话部分(Local Tag)。 | UAC (请求发起方) |
| To | 不携带 tag | 首次添加 tag | 标识 UAS 侧的对话部分(Remote Tag)。 | UAS (响应接收方) |
专家解读: From 和 To 确保了即使请求经过多个代理并被重写(例如 Request-URI 被修改),对话的逻辑上下文依然能够被准确识别和维护,这对于后续的 BYE、UPDATE 消息的正确路由至关重要。
3. 物理地址的锚定:Contact 头域
Contact 头域用于指定用户代理(UA)在接收后续请求时的直接地址,是实现终端可达性的关键。
3.1 注册中的 Contact:地址绑定(Registration Binding)
在 IMS 网络中,Contact 最重要的应用在于 REGISTER 消息。
- 发送 REGISTER:终端在 REGISTER 请求中携带
Contact头域,其中包含自己的 IP 地址和端口。- 示例:
Contact: <sip:[email protected]:5060;expires=3600>
- 示例:
- 注册结果:S-CSCF 收到 REGISTER 请求后,将
From/To中的用户逻辑身份(IMPU)与Contact中的物理地址进行绑定,并将这个绑定信息(包括 Path 和 Service-Route)存储起来,用于后续的被叫路由。 - 有效期:
Expires参数定义了该绑定地址的有效期(以秒计)。
3.2 呼叫中的 Contact:请求重定向目标
在对话建立请求(如 INVITE)中,Contact 头域的作用是告知对端 UA:如果后续有对话刷新或媒体修改的请求发给我,请发送到这个 Contact 地址。
- UAC 侧 Contact:UAC 在 INVITE 请求中携带 Contact,用于 UAS 在未来向 UAC 发送
Re-INVITE或UPDATE时使用。 - UAS 侧 Contact:UAS 在
200 OK响应中携带 Contact,用于 UAC 在未来向 UAS 发送Re-INVITE或UPDATE时使用。 - 重定向(3xx):在呼叫前转业务中,
302 Moved Temporarily响应会要求请求方使用Contact头域中提供的新地址重新发起请求。
4. P-CSCF 的地址状态维护与校验(运营商要求)
在 IMS 架构中,P-CSCF 位于接入网络的边界,负责终端的身份验证和SIP 地址状态的维护。某运营商等运营商的规范对 P-CSCF 如何处理 Contact、CSeq 和 Record-Route 的一致性提出了严格要求。
4.1 对话初始请求(UE → P-CSCF)
对于 UE 发起的初始对话请求(如 INVITE),P-CSCF 的路由锚定过程涉及 Contact 的记录:
| SIP 头域/参数 | P-CSCF 操作 | 目的 | 来源 |
|---|---|---|---|
| Record-Route | P-CSCF 将自身的 SIP URI 添加到 Record-Route 列表最顶端。 | 确保后续对话请求能沿原路径返回 P-CSCF。 | |
| Contact | P-CSCF 记录请求中的 Contact 地址,用于后续会话控制。 | 记录 UE 的物理地址,用于终结方请求的路由(如 BYE)。 | |
| CSeq | P-CSCF 记录请求中的 CSeq 字段值。 | 用于对话内请求的序列控制。 |
4.2 目标刷新请求的校验与更新
目标刷新请求(如 Re-INVITE 或 UPDATE)发生在已建立的对话中,用于修改会话参数或执行周期性刷新。由于 UE 的 IP 地址可能发生变化(例如,由于 IP 保持或移动性事件),P-CSCF 必须更新其保存的地址信息。
| P-CSCF 处理动作 | 描述 | 来源 |
|---|---|---|
| Route 校验 | P-CSCF 必须确认请求中的 Route 头域列表是否与同一对话中保存下来的 Record-Route 头域列表相匹配。 | |
| Via 更新 | 如果匹配,P-CSCF 在 Via 头域最顶端增加自己的地址。 | |
| Contact 替换 | P-CSCF 应用请求消息中的 Contact 头字段的值替换原来保存的值。 | 确保网络保存的 UE 地址是当前最新的可达地址。 |
| CSeq 替换 | P-CSCF 应用请求消息中的 CSeq 头字段的值替换原来保存的值。 | 维护对话的序列号,保证请求的有序性。 |
| 响应处理 | 当 P-CSCF 收到目标刷新请求的 1xx 或 2xx 响应时,P-CSCF 应该用响应消息的 Contact 头字段的值替换原来保存的值。 | 确保 P-CSCF 记录的是双方最新的 Contact 地址。 |
异常处理:
- 如果 UE 发起的任何请求,没有发现存在对应的对话,P-CSCF 应回复
403 (Forbidden)响应,且不再转发该请求。 - 如果
Service-Route或Route中的 URI 列表校验失败,P-CSCF 应回复400 (Bad Request)响应且不再继续处理请求,或用最新注册消息中的Service-Route头替换请求消息的Route头。
4.3 终结请求的处理(发往 UE 的请求)
对于发往 UE 的对话初始请求(如被叫 INVITE),P-CSCF 的主要职责是将核心网的路由信息(Record-Route)转换成 UE 可识别的逐跳路由信息(Route),并记录 UE 的 Contact 地址。
| SIP 头域/参数 | P-CSCF 操作 | 来源 |
|---|---|---|
| Record-Route / Route 转换 | P-CSCF 将 Record-Route 列表信息转换为 Route 列表信息,并保存 Route 列表。 | |
| Contact | P-CSCF 必须保存 INVITE 请求中的 Contact 头域。 | |
| 响应处理 | 当 P-CSCF 收到被叫侧的 1xx 或 2xx 响应时,P-CSCF 应保存响应中的 Contact、To、From 和 Record-Route 头域的值。 |
这些详细的状态维护动作,确保了即使在终端频繁移动和 IP 地址变动的 VoLTE/VoNR 环境中,对话状态仍能保持连续和准确。
5. 信令日志实战分析:Contact 地址的绑定与更新
我们将通过一个简化的 REGISTER 流程和一个 Re-INVITE 流程,观察 From, To, Contact 三个地址头域如何协同工作。
5.1 场景一:初始注册(IMS 地址绑定)
目标: 将逻辑身份 sip:[email protected] 绑定到物理地址 192.168.1.10:5060。
| 消息方向 | SIP 头域 | 示例值 | 逻辑/物理地址作用 | 来源 |
|---|---|---|---|---|
| UE S-CSCF (REGISTER) | From | <sip:[email protected]>;tag=reg123 | 逻辑身份:用户公有标识(PUI),携带 From-tag。 | |
| To | <sip:[email protected]> | 逻辑身份:目标注册的 PUI。 | ||
| Contact | <sip:192.168.1.10:5060>;expires=3600 | 物理地址:UE 的可达 IP/端口,expires 定义有效期。 | ||
| Path | <sip:pcscf.visited.net;lr> | 路由:P-CSCF 插入 Path,记录 S-CSCF 到 P-CSCF 的路径。 | ||
| S-CSCF UE (200 OK) | From | <sip:[email protected]>;tag=reg123 | 对话:保持 From-tag 不变。 | |
| To | <sip:[email protected]>;tag=scscf456 | 对话:S-CSCF 添加 To-tag,注册对话建立。 | ||
| Contact | <sip:192.168.1.10:5060>;expires=3600 | 确认:确认已绑定的物理地址和有效期。 | ||
| Service-Route | <sip:scscf.home.net;lr> | 路由:S-CSCF 插入 Service-Route,记录 UE 后续请求应发往的 S-CSCF 地址。 |
分析要点: S-CSCF 正是通过 REGISTER 消息中的 Contact,完成了逻辑身份 (From/To) 与物理地址的映射,并将 Service-Route 告知 UE 用于后续始呼路由。
5.2 场景二:目标刷新请求(Contact/CSeq 更新)
背景: 用户 A 在通话中,由于 IP 地址变动,发起 Re-INVITE 刷新会话。假设 P-CSCF 已保存的 Contact 是 192.168.1.10,新的 IP 是 192.168.1.20。
| 消息方向 | SIP 头域 | 示例值 | P-CSCF 处理动作 | 来源 |
|---|---|---|---|---|
| UE P-CSCF (Re-INVITE) | Contact | <sip:[email protected]:5060> | P-CSCF 用此新值替换本地保存的 Contact。 | |
| CSeq | 3 INVITE | P-CSCF 用此 CSeq 序列号替换本地保存的值。 | ||
| Route | <sip:scscf.home.net;lr> | P-CSCF 验证此 Route 列表是否与保存的 Record-Route 匹配。 | ||
| P-CSCF S-CSCF (Re-INVITE) | Via | (添加 P-CSCF 地址) | P-CSCF 在 Via 最顶端增加自己的地址。 | |
| Record-Route | (P-CSCF 地址在顶端) | P-CSCF 在 Record-Route 最顶端增加自己的 URI。 | ||
| UAS P-CSCF (200 OK) | Contact | <sip:[email protected]:5060> | P-CSCF 用此值替换本地保存的被叫方 Contact。 |
分析要点: P-CSCF 的核心任务在于确保当 UE 的实际可达地址 (Contact) 发生变化时,网络能及时感知并更新保存的状态。这避免了因地址过期或变更导致的“幽灵会话”或被叫失败。同时,P-CSCF 必须严格验证 Route 列表,确保请求是沿着会话建立时确定的路径返回的。
6. 本章小结
SIP 协议通过 From 和 To 承载用户的逻辑身份(AOR/PUI),并通过 **标签(tag)**参数定义会话的信令上下文(对话)。
而 Contact 头域则承载用户的动态物理地址。在 IMS 中,P-CSCF 是管理这种逻辑-物理地址映射关系的关键网元。
运营商规范强调 P-CSCF 必须:
- 保存和校验 初始对话和后续对话请求中的
Contact、CSeq和Record-Route值。 - 对于 目标刷新请求(reINVITE/UPDATE),必须更新本地保存的
Contact和CSeq值,以适应终端移动带来的地址变化。 - 严格校验 UE 发起的后续请求中的
Route列表是否与Record-Route匹配,否则应回复400 (Bad Request)或403 (Forbidden)。
IMS 网元对这些头域的精细化处理,是保证 VoLTE/VoNR 高质量、高可靠业务连续性的关键。
工程师进阶思考 (FAQ)
Q1:在 IMS 网络中,为什么 P-CSCF 在处理发往 UE 的对话初始请求(MT INVITE)时,需要将 Record-Route 转换成 Route 列表信息?
A1: 这是 SIP 路由机制的要求和 P-CSCF 终结侧(UE 侧)处理的特点决定的。
- Record-Route 记录锚点:上游网元(如 S-CSCF, I-CSCF, AS)在 INVITE 请求中插入
Record-Route,是为了确保它们能参与后续对话内请求(如BYE,UPDATE)的路由。 - Route 指导当前请求:当 P-CSCF 收到发给 UE 的 INVITE 请求时,它是对话路由链的终点。P-CSCF 必须将上游网元希望记录的
Record-Route列表逆序转换为Route列表,并将其保存下来。 - UE 侧 Route:当 P-CSCF 将请求转发给 UE 时,通常需要确保 UE 的响应能够回到 P-CSCF。此外,P-CSCF 保存 Route 列表是为了在 UE 收到
200 OK建立对话后,如果 UE 向 S-CSCF 发起后续请求(如BYE),UE 能够使用这个保存的 Route 列表作为其发出的请求的路由指引。
Q2:IMS 呼叫中,P-CSCF 收到 UE 的请求后,何时会删除 P-Preferred-Identity 头域并插入 P-Asserted-Identity 头域?这两者有什么用途上的差异?
A2: P-CSCF 是身份断言的强制执行者。
- 处理时机:P-CSCF 接收到 UE 发起的独立事务请求(如
MESSAGE,OPTIONS)或未知方法请求,并且请求中含有P-Preferred-Identity头域时,P-CSCF 应删除P-Preferred-Identity,并插入P-Asserted-Identity。在容灾接管场景中,备用 P-CSCF2 发现没有用户注册数据时,也会在 INVITE 消息中提取 PPI 或 FROM 域的主叫号码构造 PAI。 - 用途差异:
P-Preferred-Identity(PPI) 承载用户期望的主叫号码,是终端偏好。而P-Asserted-Identity(PAI) 承载的是 IMS 信任域内经过网络鉴权的真实身份。PAI 是计费和业务触发的权威依据。P-CSCF 确保只有经过认证的身份才能在核心网(信任域)内传输。
Q3:P-CSCF 在会话释放过程中收到关于对话的请求(如 BYE 或 UPDATE)时,应该如何处理?这样做的目的是什么?
A3: P-CSCF 必须中止该请求并返回错误响应。
- 处理要求:当 P-CSCF 正在执行会话释放流程时(例如,已发起
BYE流程或因超时删除会话),如果收到了与该对话相关的请求(例如BYE收到200 OK之前),P-CSCF 应该中止该请求,并向发送方回送响应481 (对话或者事务不存在)。 - 目的:目的是为了避免在资源正在被删除或对话上下文已失效的情况下,请求继续在核心网中流转,导致状态不一致或资源泄漏。这确保了 IMS 核心网元能够彻底、干净地释放与对话相关的状态和资源。