跳到主要内容

多身份场景(共享号码和多MSISDN)

本指南解释了OmniCSCF如何处理IMS支持的两种“一位用户,多种身份”模型。它涵盖了注册、终止呼叫分叉、分叉拒绝行为和发起呼叫身份选择。它记录了每个网络元素所看到的内容。

这两种模型是独立的。用户可以使用其中一种、两种或都不使用。

  • 共享公共用户身份(一个号码,多个设备)。 一个号码由多个设备在不同的SIM卡上提供服务。手机和智能手表是常见的例子。每个设备都有自己的IMSI(私有身份,IMPI)。这些设备共享一个公共身份(IMPU,即号码)。
  • 多MSISDN(一个设备,多个号码)。 一个用户(一个IMSI)有多个号码。个人号码和业务号码在同一设备上是常见的例子。该设备将其所有号码注册为公共身份。

目录​

  1. 身份模型
  2. 注册
  3. 终止呼叫到共享号码
  4. 分叉拒绝行为
  5. 应用服务器所见
  6. 终止呼叫到多MSISDN用户
  7. 发起呼叫和呼叫线路身份
  8. 参考

身份模型​

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拒绝。以下是在线路上发生的事情:

  1. S-CSCF接收到两个480响应。每个响应携带其设备的头部(其自己的User-Agent、其自己的To标签和设备添加的任何额外头部)。两个共享分叉的Call-ID和CSeq。
  2. S-CSCF选择一个480响应并向上游转发。它转发该分支的实际响应(标准代理处理:它移除自己的Via并保留其余部分)。转发的480保留所选设备的User-Agent、其Reason头(例如Reason: Q.850;cause=18)和任何额外头部。这是一个真实的单设备响应,而不是合并的。
  3. 所选响应不是“最后一个拒绝的设备”。S-CSCF根据其事务规则选择分支。当每个分支返回相同代码时,选择遵循分支顺序,而不是回复顺序��不要依赖转发的480(及其User-Agent)来自哪个设备。只有响应代码是可靠的。
  4. 应用服务器看到那个480,应用通信转发以处理不可达的订阅者(480映射到CFNRc),并将呼叫者转发到语音信箱。呼叫者通过200 OK连接到语音信箱。

如果设备返回不同的拒绝代码,S-CSCF根据RFC 3261第16.7节选择最优先的一个,应用服务器根据该单一代码采取行动。

实例:一个设备拒绝,另一个设备接听​

两个设备共享一个号码。一个呼叫分叉到两个设备。一个设备以480拒绝。另一个设备响铃然后接听。以下是在线路上发生的事情:

  1. 第一个设备的480到达,甚至在第二个设备响铃之前。S-CSCF不会在此480上结束分叉。4xx仅结束该分支。S-CSCF继续等待第二个设备。
  2. 第二个设备发送180响铃,然后发送200 OK。
  3. 200 OK获胜。S-CSCF将200转发给呼叫者。呼叫者连接到接听的设备。
  4. 之前的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在每个发起请求上应用以下规则:

  1. P-CSCF移除设备发送的任何P-Asserted-Identity。设备不被信任以断言其自身身份。
  2. 如果设备发送P-Preferred-Identity,P-CSCF将其与用户注册的身份进行检查。如果它是其中之一,P-CSCF将在P-Asserted-Identity头中断言它。
  3. 如果设备未发送P-Preferred-Identity,或发送的身份未注册到用户,P-CSCF将断言用户的默认(主)公共身份。

远端用户最终看到的身份还取决于应用服务器策略。MMTel应用服务器可以覆盖断言的身份(例如,网络可以将每个呼叫标准化为用户的主号码,或应用呼叫线路识别限制)。要向远端呈现非主号码,应用服务器必须保留P-CSCF断言的身份。请参见应用服务器文档以获取CLI策略。

请参见P-CSCF指南以获取身份断言配置。

参考​

分叉中的响应代码​

代码名称类别分叉效果
180响铃1xx进展。该分支仍然活跃。
200OK2xx接听。获胜分叉。取消其他分支。
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_timerINVITE分支超时。未响应的设备在此计时器到期时失败。

请参见S-CSCF指南以获取完整的参数参考。

3GPP和IETF参考​

规范相关性
3GPP TS 23.228IMS架构,公共和私有身份,隐式注册集
3GPP TS 24.229IMS SIP配置,发起和终止身份处理
3GPP TS 29.228Cx接口,用户数据,共享公共身份
RFC 3261第16.7节代理响应处理和并行分叉拒绝处理