IMS注册流程解析
有关IMS Registration详细流程,可查找网络上相关的文档资料。下图源自3GPP TS 24.228,以便后续问题说明:
1)初始注册(Initial Registration)和二次注册(Subsequent Registration)消息是属于不同的事务(transaction),但属于同一个对话(Dialog)吗?
这是从IMS Registration流程中抓取的log:1~4分别对应上图中的step 4, step 10, step 15, 和step 21。
根据RFC3261的定义,SIP消息中的Call-ID, From-tag, 和To-tag三个参数唯一确定一个对话。下图是这4个消息对应的SIP header内容以及比较(做了脱密处理):
- 初始注册(Initial Registration)和二次注册(Subsequent Registration)消息中Call-ID是相同的。
- CSeq号不同。
- SBC产生的Via头中branch ID不同。
- From-tag相同,但To-tag不同。
由上可知:
> 初始注册(Initial Registration)请求和“401 Unauthorized”响应是一个事务,而二次注册(Subsequent Registration)请求和“200 OK”响应构成另外一个事务:CSeq和branch ID的不同佐证了此点。
> 初始注册(Initial Registration)和二次注册(Subsequent Registration)也是属于不同的对话(Dialog):CSCF的响应中返回了不同的To-tag 。(注:实现方法各异,有的SBC产品可能也会产生不同的From-tag。)换个角度来说,二次注册的Request消息中也不带To-tag,没有重用初始注册时返回的To-tag,也说明了这点。
注:按照RFC 3261,严格意义上来说REGISTER流程不会建立Dialog,不看作是对话。
2)初始注册和二次注册流程中I-CSCF查询HSS时,返回的Diameter UAA消息中S-CSCF信息不同:
流程图中step 5,UAA消息中返回AVP Server-Capabilities,即S-CSCF的能力集;之后I-CSCF根据自身的配置,先进行S-CSCF的选择。
流程图中step 16,UAA消息中返回AVP Server-Name,即处理当前IMS用户注册的S-CSCF主机名;之后I-CSCF可能查询DNS直接获得S-CSCF的IP地址。
原因在于step 7中当S-CSCF向HSS进行鉴权时,HSS会记录下用户IMSI/IMPU和S-CSCF的绑定关系。
3)如何区分Initial Register和Re-Register(重注册)消息?
> 初始注册的Authorization域中相关的认证参数值是空的,如Nonce和Respnse,而重注册消息中携带上次注册成功返回的相关参数值。
> 重注册消息中Route域是初始注册成功时返回分配的service-route值。
4) 用户注册有效期expire参数:
用户UAC端有两种方法指示本次注册的有效期:一是SIP Message Header中的<Expires>域,另一个是<Contact>域中参数expires:
contact参数expires是针对对应的Contact,而<Expires>域是针对这次注册的所有Contact:当两个参数都存在时,以contact参数expires为准,不含expires参数的Contact则使用<Expires>的值。