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
pic_01

路由建立

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

pic_02

【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 

pic_03

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。

pic_04





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章