SIP Call Flow - Initiation of IMS Session

这里在 IMS 网络中,手机 abc会与另一部手机xyz建立起会话。
基本步骤:

  • 手机abc构造了一个INVITE消息,其中包含另一部手机xyz的 public user identity。
  • 所有的SIP消息需要通过P-CSCF和S-CSCF的转发
  • 手机和P-CSCF间的SIP消息都是通过IPSec完整性保护的
  • 手机和P-CSCF间的SIP都是经过压缩的
  • 手机间交互/协商媒体流的属性
  • UE各自按照协商结果分配资源
  • 响铃/接听电话
  • 通话开始

Call Flow
SIP Call Flow - Initiation of IMS Session_第1张图片

路由建立

Routing of IMS INVITE Requests

当手机abc想和手机xyz通话时,它并不清楚消息如何到达手机xyz。手机abc只有下面的信息:
  • 手机xyz的SIP URI
  • 手机abc相关的P-CSCF地址
  • 手机abc相关的S-CSCF地址

手机abc首先将INVITE通过P-CSCF发到S-CSCF,但这时S-CSCF也并不清楚手机xyz的具体位置。 但是通过地址解析 (DNS) abc的S-CSCF可以找到手机xyz的 I-CSCF,并将INVITE消息转发给 xyz的I-CSCF。 I-CSCF会向HSS查询手机xyz相关的S-CSCF的地址,并将INVITE消息转发到xyz的S-CSCF。 最后,手机xyz的P-CSCF会将INVITE通过IP Sec发送给手机xyz。

关于路由信息
所有的CSCF都会将他们的地址放在INVITE消息的Via头中,以便应答消息可以按照同样路径返回。 除了手机xyz的 I-CSCF,其他的CSCF都会将他们的地址加在Route-Record Header的最上面。 因为I-CSCF是负责第一次找到S-CSCF的,所以后面并不需要它将消息转发,所以也不需要将它的地址存入INVITE消息中。

The Route header field is used to force routing for a request through the listed set of proxies.

The Via header field indicates the path taken by the request so far  and indicates the path that should be followed in routing responses.
The branch ID parameter in the Via header field values serves as a  transaction identifier, and is used by proxies to detect loops.

The Record-Route header field is inserted by proxies in a request to  force future requests in the dialog to be routed through the proxy.


From abc UE to the P-CSCF

INVITE sip: [email protected] SIP/2.0
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Route: <sip:[5555::a:b:c:d]:7531;lr>
Route: <sip: [email protected];lr>
Contact: sip:[5555::1:2:3:4]:1357

<=
手机abc向它自身的P-CSCF发送INVITE消息
Request-URI是对端手机 xyz 的URI 
Route header表示这个消息要强制的通过列表中的2个代理。
             P-CSCF:    sip:[5555::a:b:c:d]:7531;lr
             S-CSCF:    sip:[email protected];lr
=>



From abc P-CSCF to the S-CSCF

INVITE sip: [email protected] SIP/2.0
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Record-Route: <sip:pcscf1.visited1.fi;lr>
Route: <sip: [email protected];lr>
Contact: <sip:[5555::1:2:3:4]:1357>

<=
手机abc的P-CSCF向S-CSCF发送INVITE消息
abc的 P-CSCF 增加了一个 Via header ,表示该INVITE消息已经经过了P-CSCF
abc的 P-CSCF 增加了一个 Record-Route header :  表示
abc的 P-CSCF 去掉了 Route header中它自己的地址
             P-CSCF:    sip:[5555::a:b:c:d]:7531;lr   删除
             S-CSCF:    sip:[email protected];lr
=>



From abc S-CSCF to Theresa’s (I-CSCF)

INVITE sip: [email protected] SIP/2.0
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::1:2:3:4]:1357>

<=
手机 abc 的S-CSCF向手机 xyz 的I-CSCF发送INVITE消息
abc的 S-CSCF 增加了一个 Via header ,表示该INVITE消息已经经过了S-CSCF
abc的 S-CSCF 增加了一个 Record-Route header :  表示
abc的 S-CSCF 去掉了 Route header中它自己的地址
             S-CSCF:    sip:[email protected];lr  删除
=>



From the I-CSCF to xyz S-CSCF

INVITE sip: [email protected] SIP/2.0
Via: SIP/2.0/UDP icscf1.home2.hu;branch=bicth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::1:2:3:4]:1357>

<=
手机 xyz 的I-CSCF向 S-CSCF发送INVITE消息
xyz 的 I-CSCF 增加了一个 Via header ,表示该INVITE消息已经经过了I-CSCF
xyz 的  I -CSCF  没有 增加 Record-Route header ,因为后面的消息转发中并不需要xyz的I-CSCF进行参与了
xyz 的 I-CSCF 增加 Route header中xyz对应的 S-CSCF 地址,要求消息转发一定要经过这个地址
             xyz的S-CSCF:   Route: <sip:scscf2.home2.hu;lr>
=>



From xyz S-CSCF to the P-CSCF

INVITE sip:[5555::5:6:7:8]:1006 SIP/2.0
Via: SIP/2.0/UDP scscf2.home2.hu;branch=cscth
Via: SIP/2.0/UDP icscf1.home2.hu;branch=bicth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Route: <sip:pcscf2.home2.hu;lr>
Record-Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::1:2:3:4]:1357>


<=
手机 xyz 的S-CSCF向 P-CSCF发送INVITE消息
xyz 的 S-CSCF 增加了一个 Via header ,表示该INVITE消息已经经过了S-CSCF
xyz 的  S -CSCF   增加 Record-Route header的记录,将它自己的地址放在了最上面
xyz 的 S-CSCF 增加 Route header中xyz对应的 P -CSCF 地址,要求消息转发一定要经过这个地址
                         删除了Route header中它自身的地址
             xyz的P-CSCF:   Route: <sip:pcscf2.home2.hu;lr>    新增
             xyz的S-CSCF:   Route: <sip:scscf2.home2.hu;lr>     删除
=>



From the P-CSCF to xyz UE

INVITE sip:[5555::5:6:7:8]:1006 SIP/2.0
Via: SIP/2.0/UDP pcscf2.home2.hu:1511;branch=dpcth
Via: SIP/2.0/UDP scscf2.home2.hu;branch=cscth
Via: SIP/2.0/UDP icscf1.home2.hu;branch=bicth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Route: <sip:pcscf2.home2.hu:1511;lr>
Record-Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::1:2:3:4]:1357>

<=
手机  xyz   的P-CSCF向 手机  xyz  发送INVITE消息
xyz 的 P-CSCF 增加了一个 Via header ,表示该INVITE消息已经经过了P-CSCF
xyz 的 P-CSCF 修改了 Route header中xyz对应的 P -CSCF 地址,要求消息转发一定要经过这个地址
             xyz的P-CSCF:   Route: <sip:pcscf2.home2.hu:1511;lr>    修改
=>


Routing of the first response

返回消息是个Via header做减法的过程。每个节点都会在Via header中减去自己相应的地址,并将消息发送给下一个节点。

From xyz UE to the P-CSCF

SIP/2.0 183 Session in Progress
Via: SIP/2.0/UDP pcscf2.home2.hu:1511;branch=dpcth
Via: SIP/2.0/UDP scscf2.home2.hu;branch=cscth
Via: SIP/2.0/UDP icscf1.home2.hu;branch=bicth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Record-Route: <sip:pcscf2.home2.hu:1511;lr>
Record-Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::5:6:7:8]:1006>



From xyz P-CSCF onward to abc P-CSCF via xyz and abc S-CSCFs

SIP/2.0 183 Session in Progress
Via: SIP/2.0/UDP scscf2.home2.hu;branch=cscth
Via: SIP/2.0/UDP icscf1.home2.hu;branch=bicth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=asctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=9pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Record-Route: <sip:pcscf2.home2.hu;lr>
Record-Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi;lr>
Contact: <sip:[5555::5:6:7:8]:1006>


From abc P-CSCF to his UE

SIP/2.0 183 Session in Progress
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=8uetb
Record-Route: <sip:pcscf2.home2.hu;lr>
Record-Route: <sip:scscf2.home2.hu;lr>
Record-Route: <sip:scscf1.home1.fr;lr>
Record-Route: <sip:pcscf1.visited1.fi:7531;lr>
Contact: <sip:[5555::5:6:7:8]:1006>


这样经过了INVITE和第一个 183 Response,两个手机间的路由信息便建立起来了。
PRACK消息中有了明确的路由信息

PRACK sip:[5555::5:6:7:8]:1006 SIP/2.0
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=82uetb
Route: <sip:pcscf1.visited1.fi:7531;lr>
Route: <sip:scscf1.home1.fr;lr>
Route: <sip:scscf2.home2.hu;lr>
Route: <sip:pcscf2.home2.hu;lr>

SIP/2.0 200 OK
Via: SIP/2.0/UDP scscf2.home2.hu;branch=c2scth
Via: SIP/2.0/UDP scscf1.home1.fr;branch=a2sctb
Via: SIP/2.0/UDP pcscf1.visited1.fi;branch=92pctb
Via: SIP/2.0/UDP [5555::1:2:3:4]:1357;branch=82uetb


Media Negotiation

在正在建立会话前,手机间要交换/协商媒体信息。这里采用SDP的offer/answer机制来协商媒体信息。

第一次的 Offer 和 Answer

SIP Call Flow - Initiation of IMS Session_第2张图片

【c】  标识了建立media session 的自己的地址
【m】 标识了建立media session 的类型,
            手机 abc 的offer要在端口3458 建立audio连接 ;在端口3400建立第一个video连接,端口3456建立第二个video
            手机 xyz  的answer要在端口4011 建立audio连接 ;在端口4012建立第一个video;但无法建立第二个video连接,所以用m=video 0 RTP/AVP 98来回应。
answer 必须回应offer中所有的 m 属性。


第二次的 Offer 和 Answer
当手机abc收到第一个answer后,它需要作出决定,如何建立media session,这里开始第二轮的offer和answer。
既然手机xyz无法建立第二个video连接,所以手机abc决定放弃第二个video连接: m=video 0 RTP/AVP 98  

SIP Call Flow - Initiation of IMS Session_第3张图片

Resource reservation

Media Session 的协商过程是通过SIP/SDP协议完成的。当协商完成后,手机还需要各自建立他们的Media PDP Context,用来传输media stream。
这个建立Media PDP Context的过程被称为 resource reservation。这个过程由两个手机分别各自完成,互不影响。
 resource reservation成功之前,无法保证会话连接一定能够安装offer/answer协商结果被建立起来, 所以在 resource reservation成功前,手机xyz也不会响铃去通知他的用户。

手机间在offer/answer协商过程中,相互交换  preconditions 来通知对方resource reservation的状态。
  • 手机abc在resource reservation成功后,向手机xyz发送UPDATE。
  • 手机xyz在收到UPDATE后,响铃,并向手机abc发送 200 OK。

SIP Call Flow - Initiation of IMS Session_第4张图片





你可能感兴趣的:(SIP Call Flow - Initiation of IMS Session)