路由


路由
注册路由

一、UE未协带鉴权发起注册

该小节讲述注册过程中,各网元路由走向,及路由相关的特定字段,并不详细描述注册机制的细节(如AKA鉴权将在AKAj鉴权小节进行描述)。

 

  • UEP-CSCF

 

UE获取P-CSCF的方式有三种:

  • 针对移动终端通过GPRS接入,在UE进行PDP上下文建立过程中,GGSN可以在PDP上下文激活请求的应答中返回P-CSCF地址信息。

  • UE也可以通过DHCP获取指定的P-CSCF地址信息。

  • UE也可以手工配置指定的P-CSCF地址信息,当前我们使用这种方式。

 

1UE P-CSCF发起注册请求:

 

REGISTER         sip:open-ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Contact:<sip: 1.1.1.1>; expires=600

Route:<sip:1.1.1.2;lr>

 

  • 请求URL指明需要注册到open-ims.test的归属域中。

  • VIA告诉P-CSCF,针对这次注册事务请求的应答,应该发向哪里。

  • Contact告诉P-CSCF,后续如果想主动给UE发起事务请求,应该发向哪里。

  • Route头域为下一跳地址,这里指明当前注册请求下一跳要发给P-CSCF的地址。注意当前我们设备在处理下一跳过程中,没有使用预置Route的机制,而是使用了outband的机制,所以当前设备在注册过程中不会出现Route头域信息。

 

  • P-CSCFI-CSCF

2P-CSCFI-CSCF转发注册请求

 

P-CSCF收到注册请求后,如果有Route头域,并且第一个Route头域是自身时则去除该条头域信息,之后如果发现没有其它Route头域信息,则通过请求URL中的信息进行DNS查询,假设这里DNS查询成功,对应的IP 地址为I-CSCF的地址,则P-CSCF将该注册请求转发到I-CSCF,在转发之前P-CSCF还将自己地址加入到Via消息头中,以便让回来的注册应答经过它。

 

同时P-CSCF还添加一个比较关键的头域Path,该头域主要用于告诉S-CSCF,当前该关联帐号经过的P-CSCF地址信息,之后S-CSCF在收到该注册请求后,会记录Path头域的值,用于以后该用户做为被叫时,S-CSCF知道将呼叫请求发向该用户关联的哪个P-CSCF

 

REGISTER         sip:open-ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Path:<sip:1.1.1.2;lr>

Contact:<sip: 1.1.1.1>; expires=600

 

  • I-CSCFS-CSCF

 

34I-CSCFHSS中获取指定的S-CSCF

 

I-CSCF查询HSS来找到为该注册服务提供服务的S-CSCF地址信息,如果该用户帐号在之前配置时没有指定S-CSCF,则I-CSCF为其选择一个默认的S-CSCF地址信息。

 

5I-CSCFS-CSCF转发注册请求

 

I-CSCF将自己地址信息加入到VIA头域,之后将注册请求转发到S-CSCF

 

REGISTER         sip:open-ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.3; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Path:<sip:1.1.1.2;lr>

Contact:<sip: 1.1.1.1>; expires=600

 

  • S-CSCFI-CSCF

 

S-CSCF收到注册请求后,发现含有Path头域,则将该值进行存储,用于以后该用户做为被叫时,S-CSCF知道将呼叫请求发向该用户关联的哪个P-CSCF

 

67S-CSCFHSS中获取鉴权向量

 

当注册请求没有包含完整注册信息时,S-CSCFHSS获取鉴权向量,之后向用户发起鉴权挑战,即发送401消息。

 

8S-CSCFI-CSCF发送注册应答

 

S-CSCF通过之前注册请求的VIA列表,找到最顶端Via头域做为目标地址进行转发。

 

SIP/2.0 401Unauthorized

Via: SIP/2.0/UDP1.1.1.3; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • I-CSCFP-CSCF

 

9I-CSCFP-CSCF转发注册应答

 

I-CSCF收到注册应答后,发现最顶端Via头域为自身的地址信息,删除该头域信息,并将注册应答转发到下一Via头域。

 

  • P-CSCFUE

 

10P-CSCFUE转发注册应答

 

P-CSCF收到注册应答后,发现最顶端Via头域为自身的地址信息,删除该头域信息,并将注册应答转发到下一Via头域。

 

二、UE协带鉴权发起第二次注册

UE协带鉴权发起第二次注册的路由走向机制和第一次是一模一样的,这里仅简单说明图中红色标注的差异部分。

 

S-CSCF收到UE的鉴权请求,并且验证鉴权正确后,S-CSCF更新HSS中的数据为注册成功,同时从HSS中获取用户服务配置信息。

 

之后S-CSCF添加比较关键的信令头域Service-Route,该头域值通常为S-CSCF地址信息,主要避免后续每次从UE发来的信令请求都要经过I-CSCF查找S-CSCF,该头域信息最终经过I-CSCFP-CSCF转发到终端侧,终端侧发现注册响应中含有Service-Route头域,则将其保存在本端,待后续向IMS网络发起信令请求时,做为预置路由设置到信令的Route头域。

 

SIP/2.0200 OK

Service-Route:<sip:1.1.1.4; lr>

会话路由

呼叫归属网内用户

这里假设UE_A通过P-CSCF1)注册到S-CSCF上,UE_B通过P-CSCF2)注册到S-CSCF上,P-CSCF1)和P-CSCF2)都属于归属网内的网元,这样UE_AUE_B就都在同一个归属网内。

 

  • UE_AP-CSCF1)的Invite请求

 

INVITEsip:UE_B@ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route:<sip:1.1.1.2;lr>

Route:<sip:1.1.1.4;lr>

 

  • 请求URL指明需要呼叫发送到在UE_B

  • VIA告诉P-CSCF,针对这次事务请求的应答,应该发向哪里。

  • 这里有两条Route头域,其中第一条是终端已知的P-CSCF1)地址,表示下一跳首先发给P-CSCF1),第二条Route头域是S-CSCF的地址,该地址信息就是在之前向S-CSCF注册过程中,由S-CSCF200 OK里协带的Service-Route头域值(参考UE协带鉴权发起第二次注册小节)。

 

备注:

终端在进行路由头域添加时,如果有手工配置的预置路由条目,则一定要将该路由条目添加到由Service-Route导入的路由条目之前。

另外,我们设备在处理下一跳过程中,没有使用预置Route的机制,而是使用了outband的机制,所以当前设备在Invite信令处理时应该仅出现S-CSCF那条路由,不会出现P-CSCF那条路由。

 

  • P-CSCF1)到S-CSCFInvite请求

 

P-CSCF1)收到Invite请求后,如果Route头域的顶端含有自己的地址,则将该Route头域删除,将自己的址址添加到Via头域中,用于该请求的应答可以经过自身,之后查看如果还有Route头域,并且该址址为松散路由类型,则将呼叫转发到下一跳路由头域地址。

 

INVITEsip:UE_B@ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route:<sip:1.1.1.4;lr>

 

  • S-CSCFASInvite请求

 

这里假设UE_A的服务信息中配置了如下触发规则:

  • 匹配启始呼叫

  • 并且需要匹配INVITE方法

 

S-CSCF通过UE_AIFC规则匹配成功后(该触发规则是注册成功时,S-CSCFHSS中下载下来的),根据IFC中配置指定的AS地址信息,将呼叫转发到AS,在转发呼叫请求之前,S-CSCF做如下处理:

 

  • 将自己的地址添加到Via头域,用于后续请求事务的应答还经过自身

  • 将自己的地址添加到Route头域顶端,用于AS收到该请求后,可以再将请求发回给S-CSCF

 

INVITE sip:UE_B@ims.testSIP/2.0

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route:<sip:1.1.1.4;lr>

 

  • ASS-CSCFInvite请求

 

这里假设AS不做任何特殊业务处理,仅仅是将呼叫请求进行转发,AS查找含有Route头域,第一个Route头域为松散路由,则将呼叫转到下一跳路由。在转发请求之前,AS将自己的地址添加到VIA头域中。

 

INVITEsip:UE_B@ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.5; brach=1115

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route:<sip:1.1.1.4;lr>

 

  • S-CSCFP-CSCF2)的Invite请求

 

S-CSCF再次收到INVITE请求后,继续检查是否还有其它IFC规则可以匹配,如果找不到,则执行正常的处理流程。

 

如果Route头域顶端为自身地址,则将该Route头域进行删除,之后没有任何Route头域时,S-CSCF查询请求URL,它发现被叫信息在当前归属域中,并且与P-CSCF2)有关联(注:P-CSCF2)地址信息是之前P-CSCF2)向S-CSCF转发注册流程时候,通过Path头域协带的,S-CSCF将该Path值进行保存,参考《注册路由》小节),则将Invite请求转到P-CSCF2),在转发请求之前S-CSCF做如下处理:

  • 将自己的地址添加到VIA头域中

  • 同时因为S-CSCFUE_B的注册登记服务器,它知道UE_B的实际联系地址,则在请求URL中,替换为UE_B的真实地址。

 

INVITEsip:UE_B@2.2.2.2 SIP/2.0

Via: SIP/2.0/UDP1.1.1.4; brach=1116

Via: SIP/2.0/UDP1.1.1.5; brach=1115

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • P-CSCF2)到UE_BInvite请求

 

P-CSCF2)收到该请求后,根据请求URL中的信息,将Invite请求转给UE_B,在转发之前,将自己的地址信息加入到VIA头域。

 

INVITEsip:UE_B@2.2.2.2 SIP/2.0

Via: SIP/2.0/UDP1.1.1.6; brach=1117

Via: SIP/2.0/UDP1.1.1.4; brach=1116

Via: SIP/2.0/UDP1.1.1.5; brach=1115

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • UE_BP-CSCF2)的Invite应答

 

UE_B收到请求后,进行应答处理,将顶端VIA头域做为目标地址进行发送。

 

SIP/2.0 180 Ring

Via: SIP/2.0/UDP1.1.1.6; brach=1117

Via: SIP/2.0/UDP1.1.1.4; brach=1116

Via: SIP/2.0/UDP1.1.1.5; brach=1115

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • P-CSCF2)到S-CSCFInvite应答

 

P-CSCF2)收到应答后,去除顶端VIA为自身地址的头域,取下一VIA头域做为目标地址进行发送。

SIP/2.0 180 Ring

Via: SIP/2.0/UDP1.1.1.4; brach=1116

Via: SIP/2.0/UDP1.1.1.5; brach=1115

Via: SIP/2.0/UDP1.1.1.4; brach=1114

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • S-CSCFAS、从ASS-CSCF、从S-CSCFP-CSCF1)、从P-CSCF(1)UE_AInvite应答

这几个流程处理都相同,都是检查顶端VIA是否含有自身的地址,如果含有则去顶该头域,并取下一VIA头域做为目标地址进行发送,最终180应答按原路返回到UE_A

 

呼叫拜访网内用户

上图为了简化复杂度,在拜访网及归属网中都没有涉及AS服务模块,这里假设两个网络的用户都没有配置任何IFC业务触发规则。

 

这里假设UE_A的归属域为aaa.ims.testUE_B的归属域为bbb.ims.test

 

  • UE_AP-CSCF

 

INVITEsip:UE_B@bbb.ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route:<sip:1.1.1.2;lr>

Route:<sip:1.1.1.4;lr>

 

  • 请求URL指明需要呼叫发送到在UE_B

  • VIA告诉P-CSCF,针对这次事务请求的应答,应该发向哪里。

  • 这里有两条Route头域,其中第一条是终端已知的P-CSCF地址,表示下一跳首先发给P-CSCF,第二条Route头域是UE_AS-CSCF的地址,该地址信息就是在之前UE_AS-CSCF注册过程中,由S-CSCF200 OK里协带的Service-Route头域值(参考UE协带鉴权发起第二次注册小节)。

 

备注:

终端在进行路由头域添加时,如果有手工配置的预置路由条目,则一定要将该路由条目添加到由Service-Route导入的路由条目之前。

另外,我们设备在处理下一跳过程中,没有使用预置Route的机制,而是使用了outband的机制,所以当前设备在Invite信令处理时应该仅出现S-CSCF那条路由,不会出现P-CSCF那条路由。

 

  • P-CSCFS-CSCF

 

P-CSCF收到Invite请求后,如果Route头域的顶端含有自己的地址,则将该Route头域删除,将自己的址址添加到Via头域中,用于该请求的应答可以经过自身,之后查看如果还有Route头域,并且该址址为松散路由类型,则将呼叫转发到下一跳路由头域地址。

 

INVITE sip:UE_B@bbb.ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

Route: <sip:1.1.1.4;lr>

 

  • aaa.ims.test归属域的S-CSCFbbb.ims.test归属域的I-CSCF

 

S-CSCF收到Invite请求后,如果Route头域的顶端含有自己的地址,则将该Route头域删除,将自己的地址添加到Via头域中,之后没有Route头域了,则S-CSCF分析请求URL中的域信息,发现不属于自身域,则通过DNS查询bbb.ims.test的地址信息(当前为UE_B域中的I-CSCF),将该呼叫发向解析后的地址信息。

 

INVITE sip:UE_B@bbb.ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.4; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • I-CSCF通过HSS查询指定的S-CSCF

 

I-CSCF查询HSS来找到为UE_B提供服务的S-CSCF地址信息,如果该用户帐号在之前配置时没有指定S-CSCF,则I-CSCF为其选择一个默认的S-CSCF地址信息。

 

I-CSCF将自己地址信息加入到VIA头域,之后将注册请求转发到S-CSCF

 

INVITE sip:UE_B@bbb.ims.test SIP/2.0

Via: SIP/2.0/UDP1.1.1.5 ;brach=1114

Via: SIP/2.0/UDP1.1.1.4; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • bbb.ims.test归属域的S-CSCFbbb.ims.test归属域的P-CSCF

 

S-CSCF查询请求URL,它发现被叫信息在当前归属域中,并且与P-CSCF有关联(注:P-CSCF地址信息是之前P-CSCFS-CSCF转发注册流程时候,通过Path头域协带的,S-CSCF将该Path值进行保存,参考《注册路由》小节),则将Invite请求转到P-CSCF,在转发请求之前S-CSCF做如下处理:

  • 将自己的地址添加到VIA头域中

  • 同时因为S-CSCFUE_B的注册登记服务器,它知道UE_B的实际联系地址,则在请求URL中,替换为UE_B的真实地址。

 

INVITEsip:UE_B@2.2.2.2 SIP/2.0

Via: SIP/2.0/UDP1.1.1.6 ;brach=1115

Via: SIP/2.0/UDP1.1.1.5 ;brach=1114

Via: SIP/2.0/UDP1.1.1.4; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • bbb.ims.test归属域的的P-CSCFUE_B

 

P-CSCF收到该请求后,根据请求URL中的信息,将Invite请求转给UE_B,在转发之前,将自己的地址信息加入到VIA头域。

 

INVITEsip:UE_B@2.2.2.2 SIP/2.0

Via: SIP/2.0/UDP1.1.1.7 ;brach=1116

Via: SIP/2.0/UDP1.1.1.6 ;brach=1115

Via: SIP/2.0/UDP1.1.1.5 ;brach=1114

Via: SIP/2.0/UDP1.1.1.4; brach=1113

Via: SIP/2.0/UDP1.1.1.2; brach=1112

Via: SIP/2.0/UDP1.1.1.1; brach=1111

 

  • UE_B将应答沿路返回到UE_A

 

UE_B回应180应答,一路流程都基本相同,都是检查顶端VIA是否含有自身的地址,如果含有则去顶该头域,并取下一VIA头域做为目标地址进行发送,最终180应答按原路返回到UE_A

 

呼叫PSTN用户

针对呼叫PSTN用户的流程,不做很细节的信令描述,关于信令流程可以参考以上呼叫归属网内用户呼叫拜访网内用户小节描述,这里仅对一些关键点进行描述说明。

 

UE的呼叫发送到S-CSCF时,S-CSCF判别当前呼叫指向PSTN网络,则将呼叫转发给出口网关控制服务器(BGCF),BGCF根据本地策略发现当前呼叫的目的PSTN属于本地域(当前图例假设为本地域,如果目的PSTN非本地域,则BGCF将呼叫转发给另一网络的BGCF),则将呼叫转发给对应的媒体网关控制服务器MGCF,之后MGCF控制媒体网关(MGW)将呼叫转换到PSTN网络。

 

参考文档:

《中国电信IMS网络SIP协议总体技术要求》

RFC3608

《中国联通IMS设备规范 第二分册:用户数据管理类设备》

IMS-移动领域的IP多媒体概念和服务》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值