多身份场景(共享号码和多MSISDN)
本指南解释了OmniCSCF如何处理IMS支持的两种“一位用户,多种身份”模型。它涵盖了注册、终止呼叫分叉、分叉拒绝行为和发起呼叫身份选择。它记录了每个网络元素所看到的内容。
这两种模型是独立的。用户可以使用其中一种、两种或都不使用。
- 共享公共用户身份(一个号码,多个设备)。 一个号码由多个设备在不同的SIM卡上提供服务。手机和智能手表是常见的例子。每个设备都有自己的IMSI(私有身份,IMPI)。这些设备共享一个公共身份(IMPU,即号码)。
- 多MSISDN(一个设备,多个号码)。 一个用户(一个IMSI)有多个号码。个人号码和业务号码在同一设备上是常见的例子。该设备将其所有号码注册为公共身份。
目录
身份模型
3GPP TS 23.228定义了IMS身份模型。私有身份(IMPI)用于识别用于身份验证的订阅。公共身份(IMPU)是其他用户拨打的号码或SIP URI。一个订阅可以持有多个公共身份。多个私有身份可以共享一个公共身份。
HSS持有该模型。S-CSCF在注册时通过用户数据下载它(Cx服务器分配,TS 29.228)。一起注册的公共身份集合是隐式注册集(TS 23.228)。
注册
每个设备使用其自己的私有身份进行身份验证。S-CSCF对每��REGISTER进行挑战,并根据Cx身份验证向量验证响应(请参见S-CSCF指南)。成功后,S-CSCF为每个设备存储一个联系绑定。
对REGISTER的200 OK携带一个P-Associated-URI头。该头列出了用户隐式注册集中每个公共身份。设备从该头中学习其号码。
- 共享号码。 每个设备使用自己的私有身份在同一公共身份下注册。S-CSCF为每个设备保留一个联系。S-CSCF通过联系URI匹配联系人,因此设备不会相互覆盖。S-CSCF为每个公共身份最多保留
maxcontact个联系人。将maxcontact设置为共享号码的设备的最大数量。 - 多MSISDN。 设备使用其一个私有身份进行注册。200 OK P-Associated-URI列出用户的所有号码。对任何号码的终止呼叫都到达该设备。
终止呼叫到共享号码
对共享号码的呼叫必须响铃每个设备。S-CSCF进行分叉。当S-CSCF通过lookup("location")解析终止位置时,append_branches参数将每个注册的联系人作为并行分支附加。S-CSCF同时向所有设备发送INVITE(并行分叉,TS 24.229和RFC 3261第16节)。
第一个回答的设备获胜。S-CSCF将该设备的200 OK转发给呼叫者。S-CSCF向每个其他分支发送CANCEL。其他设备停止响铃。
S-CSCF指南记录了append_branches和maxcontact参数。
分叉拒绝行为
设备可以拒绝分叉呼叫而不是接听。响应代码决定其他设备是否继续响铃。这遵循RFC 3261第16.7节中的并行分叉响应规则。S-CSCF事务层应用这些规则。
| 设备响应 | 意义 | 对其他设备的影响 | 呼叫者结果 |
|---|---|---|---|
| 200 OK | 设备已接听 | S-CSCF向其他设备发送CANCEL。它们停止响铃。 | 呼叫连接到第一个接听的设备。 |
| 4xx(例如 486 Busy Here, 480 Temporarily Unavailable) | 该设备无法接听呼叫 | 其他设备继续响铃。该分支退出。 | 呼叫者在每个设备失败后才看到失败。然后S-CSCF转发最优先的最终响应。 |
| 5xx(例如 500 Server Internal Error) | 该分支上的服务器错误 | 其他设备继续响铃。该分支退出。 | 同4xx:只有在每个分支失败后,失败才到达呼叫者。 |
| 6xx(例如 603 Decline, 600 Busy Everywhere) | 对整个身份的拒绝,而不仅仅是一个设备 | S-CSCF向其他设备发送CANCEL。它们停止响铃。 | 呼叫者收到6xx。 |
| 无响应(超时) | 设备无法访问 | 其他设备继续响铃。该分支超时(fr_inv_timer)。 | 同4xx:只有在每个分支失败后,失败才到达呼叫者。 |
关键区别在于6xx与4xx/5xx。4xx或5xx仅是一个分支的失败,因此分叉继续。6xx是对身份的全局拒绝,因此S-CSCF取消整个分叉。要在所有用户设备上同时拒绝呼叫,设备必须���送6xx。要在一个设备上拒绝而其他设备继续响铃,设备必须发送4xx。
应用服务器所见
MMTel应用服务器(TAS)位于分叉之前的终止路径中。S-CSCF通过终止初始过滤标准触发TAS。TAS应用其服务。然后TAS将会话返回给S-CSCF。S-CSCF解析联系人并进行分叉。
因此,TAS处理一个指向共享身份的终止会话。TAS看不到单个设备分支。分叉对它是透明的。TAS看到的是合并结果:
- 一个响铃指示,
- 然后是单个获胜的200 OK,或者
- 聚合的最终失败,或者
- 6xx拒绝。
TAS控制是否S-CSCF进行分叉。对于共享身份,TAS允许分叉,因此S-CSCF响铃每个设备。对于单设备身份,TAS设置Request-Disposition: no-fork,因此S-CSCF将呼叫发送到一个��系人。TAS根据共享身份中的成员数量做出此决定,它通过Sh从HSS读取该信息。每个设备的响应处理保持在S-CSCF内部。
拒绝和语音信箱决策
一个常见的问题是TAS是否看到一个设备拒绝呼叫,而其他设备仍然响铃,以便TAS可以将呼叫者转发到语音信箱。它不会。 TAS只看到整个分叉的最终结果。分叉在S-CSCF内部,位于TAS的下游。
- 发送486 Busy Here的一个设备不会单独到达TAS。其他设备继续响铃。S-CSCF保持事务开放。TAS没有被通知。
- TAS仅在分叉解析时接收最终响应。当设备接听(200)、每个设备都失败,或设备发送6xx时,分叉解析完成。
- 当每个设备失败时,S-CSCF为整个分叉选择一个最终响应。它在分支中选择最优先的响应(RFC 3261第16.7节)。S-CSCF将该代码返回给TAS。TAS看不到单独的每个设备代码。
- 然后,TAS将其通信转发逻辑应用于该最终代码。TAS根据其配置的条件将呼叫者转发到语音信箱(例如,486时的忙碌通信转发,或超时时的无回复)。因此,语音信箱在整个分叉失败时到达,而不是当一个设备拒绝时。
6xx(例如603 Decline)是不同的。发送6xx的设备取消整个分叉。S-CSCF将6xx返回给TAS。TAS���其视为对身份的明确拒绝。TAS是否转发到语音信箱取决于为拒绝呼叫配置的通信转发规则。
简而言之:每个设备的“该设备拒绝,因此在其他设备继续响铃的同时将呼叫者发送到语音信箱”的行为在网络分叉中是不可能的。语音信箱是整个共享身份的属性。呼叫者仅在整个分叉失败时到达它。
实例:每个设备返回480
两个设备共享一个号码。一个呼叫分叉到两个设备。两个设备在几毫秒内都以480 Temporarily Unavailable拒绝。以下是在线路上发生的事情:
- S-CSCF接收到两个480响应。每个响应携带其设备的头部(其自己的
User-Agent、其自己的To标签和设备添加的任何额外头部)。两个共享分叉的Call-ID和CSeq。 - S-CSCF选择一个480响应并向上游转发。它转发该分支的实际响应(标准代理处理:它移除自己的
Via并保留其余部分)。转发的480保留所选设备的User-Agent、其Reason头(例如Reason: Q.850;cause=18)和任何额外头部。这是一个真实的单设备响应,而不是合并的。 - 所选响应不是“最后一个拒绝的设备”。S-CSCF根据其事务规则选择分支。当每个分支返回相同代码时,选择遵循分支顺序,而不是回复顺序��不要依赖转发的480(及其
User-Agent)来自哪个设备。只有响应代码是可靠的。 - 应用服务器看到那个480,应用通信转发以处理不可达的订阅者(480映射到CFNRc),并将呼叫者转发到语音信箱。呼叫者通过200 OK连接到语音信箱。
如果设备返回不同的拒绝代码,S-CSCF根据RFC 3261第16.7节选择最优先的一个,应用服务器根据该单一代码采取行动。
实例:一个设备拒绝,另一个设备接听
两个设备共享一个号码。一个呼叫分叉到两个设备。一个设备以480拒绝。另一个设备响铃然后接听。以下是在线路上发生的事情:
- 第一个设备的480到达,甚至在第二个设备响铃之前。S-CSCF不会在此480上结束分叉。4xx仅结束该分支。S-CSCF继续等待第二个设备。
- 第二个设备发送180响铃,然后发送200 OK。
- 200 OK获胜。S-CSCF将200转发给呼叫者。呼叫者连接到接听的设备。
- 之前的480被丢弃。它是一个失败的分支。呼叫者从未看到它,呼叫不会转到语音信箱。
这确认了核心规则:以4xx拒绝的设备不能阻止其他设备接听。只有6xx(或每个分支失败)才能阻止呼叫连接。
终止呼叫到多MSISDN用户
多MSISDN用户有一个设备和多���号码。对任何号码的呼叫都到达该设备。呼叫者拨打的号码保留在请求URI中,因此设备可以向用户显示拨打的号码(例如,将业务呼叫与个人呼叫分开)。
所有号码属于一个隐式注册集。因此,每个号码解析到相同的设备联系人。S-CSCF以与其他呼叫相同的方式解析终止位置。没有分叉,因为只有一个设备。
要配置多MSISDN用户,将每个号码作为公共身份添加到HSS中的一个IMS订阅中。然后对REGISTER的200 OK列出P-Associated-URI中的每个号码。请参见HSS多MSISDN文档。
向共享号码发送消息
IMS上的SMS使用SIP MESSAGE请求(TS 24.341)。对共享号码的消息到达每个设备,方式���呼叫分叉到每个设备相同。S-CSCF解析注册的联系人并将消息发送给每个联系人。共享号码上的每个设备都接收到该消息。
对多MSISDN号码的消息到达该设备,方式与对其任何号码的呼叫到达该设备相同。
发起呼叫和呼叫线路身份
用户在发起呼叫时呈现呼叫线路身份(CLI)。多MSISDN用户可以呈现任何自己的号码。例如,用户在业务呼叫中呈现业务号码,在个人呼叫中呈现个人号码。设备在P-Preferred-Identity头中选择号码(TS 24.229)。
P-CSCF断言身份。设备不这样做。P-CSCF在每个发起请求上应用以下规则:
- P-CSCF移除设备发送的任何P-Asserted-Identity。设备不被信任以断言其自身身份。
- 如果设备发送P-Preferred-Identity,P-CSCF将其与用户注册的身份进行检查。如果它是其中之一,P-CSCF将在P-Asserted-Identity头中断言它。
- 如果设备未发送P-Preferred-Identity,或发送的身份未注册到用户,P-CSCF将断言用户的默认(主)公共身份。
远端用户最终看到的身份还取决于应用服务器策略。MMTel应用服务器可以覆盖断言的身份(例如,网络可以将每个呼叫标准化为用户的主号码,或应用呼叫线路识别限制)。要向远端呈现非主号码,应用服务器必须保留P-CSCF断言的身份。请参见应用服务器文档以获取CLI策略。
请参见P-CSCF指南以获取身份断言配置。
参考
分叉中的响应代码
| 代码 | 名称 | 类别 | 分叉效果 |
|---|---|---|---|
| 180 | 响铃 | 1xx | 进展。该分支仍然活跃。 |
| 200 | OK | 2xx | 接听。获胜分叉。取消其他分支。 |
| 486 | 此处忙 | 4xx | 该分支失败。其他设备继续响铃。 |
| 480 | 暂时不可用 | 4xx | 该分支失败。其他设备继续响铃。 |
| 408 | 请求超时 | 4xx | 该分支失败。其他设备继续响铃。 |
| 600 | 到处忙 | 6xx | 全局拒绝。取消整个分叉。 |
| 603 | 拒绝 | 6xx | 全局拒绝。取消整个分叉。 |
相关S-CSCF参数
| 参数 | 目的 |
|---|---|
ims_usrloc_scscf maxcontact | 每个公共身份保留的最大联系人。将其设置为共���号码的设备的最大数量。 |
ims_registrar_scscf append_branches | 设置为1时,终止lookup("location")并行分叉到每个注册的联系人。 |
tm fr_inv_timer | INVITE分支超时。未响应的设备在此计时器到期时失败。 |
请参见S-CSCF指南以获取完整的参数参考。
3GPP和IETF参考
| 规范 | 相关性 |
|---|---|
| 3GPP TS 23.228 | IMS架构,公共和私有身份,隐式注册集 |
| 3GPP TS 24.229 | IMS SIP配置,发起和终止身份处理 |
| 3GPP TS 29.228 | Cx接口,用户数据,共享公共身份 |
| RFC 3261第16.7节 | 代理响应处理和并行分叉拒绝处理 |