2008年3月14日 星期五

SIP Intro --- 第二部 (part 2)

開個頭SIP Intro --- 第二部 (part 2)將接續 SIP Intro --- 第二部 (part 1)的介紹,開始說明Message structure的第二個section --- Message-Header。

位觀看前面兩個部分的人,可至下面連結觀看
SIP Intro --- 第一部
SIP Intro --- 第二部 (part 1)


Header fielders的format有定義在RFC3261(7.2)裡面,主要在描述field允許的格式(如:能否有空行或空格,要怎麼分隔欄位等等的規定),這裡就不說明這部分了,因為這部分蠻死的,直接參考RFC就可以了。(有參考到的RFC文件都放在我的個人空間裡,右方側邊攔)

接著進入正題!
在part 1的最後提到了一個例子,並也引出了第一個SIP message,分別如下

Alice                  Bob
|                        |
|       INVITE F1        |
|----------------------->|   (送出邀請,詢問是否參與通訊)
|     180 Ringing F2     |
|<-----------------------|   (告知邀請者,我在考慮或處理中...)
|                        |
|        200 OK F3       |   (告知邀請者,我願意接受通訊)
|<-----------------------|
|         ACK F4         |
|----------------------->|   (告知受邀者,邀請者以確認妳的意願)
|   Both Way RTP Media   |
|<======================>|   (開始通訊囉!!)
|                        |
|         BYE F5         |   (有一方要結束通訊,並告知對方)
|----------------------->|
|       200 OK F6        |
|<-----------------------|   (回應結束方的告知)
|                        |
F1 INVITE Alice -> Bob INVITE sip:bob@biloxi.example.com SIP/2.0 Via: SIP/2.0/TCP client.atlanta.example.com:5060;branch=z9hG4bK74bf9 Max-Forwards: 70 From: Alice ;tag=9fxced76sl To: Bob Call-ID: 3848276298220188511@atlanta.example.com CSeq: 1 INVITE Contact: Content-Type: application/sdp Content-Length: 151 v=0 o=alice 2890844526 2890844526 IN IP4 client.atlanta.example.com s=- c=IN IP4 192.0.2.101 t=0 0 m=audio 49172 RTP/AVP 0 a=rtpmap:0 PCMU/8000 我們也了解first line的意思,至於第二部分的message-header,基本上在request這部分,主要有下面幾個header fields,
To
From
Call-ID
CSeq
Max-Forwards
Via
Contact
Supported
Require
ok,再來一一說明各個header field的功能,這些header fields的定義在RFC3261裡都有,以下是我節錄出重點,並且簡化一些尚未提到的概念(Dialog,Register等等),以免增加理解難度,畢竟本系列主要是介紹concepts,而不是implementation,所以並不會一開始就深入介紹。 To: 此header field是用來指出request的對象是誰,而header field的值要符合SIP(or SIP URI),或是其他URI(Uniform Resource Identifier) schemes。 From: 這個欄位用來指出發送這個request的人,這個header field也是跟To一樣格式(SIP URI),例子就看上面的message就對啦。而此header field允許使用user的名稱(如: Alice),至於tags則是一個parameter。 parameter是屬於header field底下的一個參數值,用來輔助header field不足的地方。而現在From裡的這個tags的功能是屬於"Dialog的建立"這部分,在此只先稍微提一下,request的From裡的tags和response裡的tags分別由requester和respondent產生(以下我將用requester代表一開始建立並發送request的人,即為Alice。同理,respondent則為Bob),並用以此來建立一個屬於他們(requester與respondent)的dialog ID,dialog解釋成對話框或許可以比較能了解,以上就是tags的用處(詳細說明在RFC3261 19.3裡有說明)。 Call-ID: 此ID用來是別是否屬於現在這一個通話(dialog),以這個例子來說,也就是說用來判別這個packet是否是屬於Alice與Bob這個通訊裡的packet。 CSeq: 此header field用來辨別message的順序,對於non-REGISTER的request,此sequence number有可能任意的值。 Max-Forwards: 很明顯的,這是用來限制這個request最遠只能傳送經過多少個hops,每經過一個hops就會減一。假如此header field已經為0時,卻還未到達destination,此時就會回覆一個483的response(Too Many Hops)給requester。 Via: 這個欄位提供資訊用來判斷response該往哪裡送,當request建立之初,UAC(即requester,亦即Alice)必須放入protocol anme與protocol version在此header field(分別是SIP與2.0,請看上面例子),另外此header field必須要有一個叫branch的parameter,這個parameter用來識別UAC與UAS(requester與respondent也就是Alice與Bob)所建立的transaction。所以此parameter對於每一個request是unique的(只有在兩個地方使用時是例外,CANCEL與ACK) 又碰到一個新名詞,姑且先叫解釋為一個Call好了,只是算是"狹義"的Call,這部分在後面會把Transaction、Dialog、Call`Session都做一次精確的定義,所以目前先勉強想成是一個狹義的Call。 Contact: 此header field用來指出接下來的subsequent request會是誰發的,在此例中即為Alice。另外,在REGISTER這個message裡使用時,有額外定義了幾個parameter,此部分會在介紹Registration時說明。 最後是Supported 與 Require這兩個header fields 這兩個header fields算是額外的功能延伸,可能在通訊方面有額外的支援或需求,就可以定義在此提供給對方知道。這部分因為在本篇並不是重點,而且不想把焦點分散掉,所以就不在這裡多做說明。 呼~終於一口氣把message-header中較為重要的、必須的header field帶過一遍... 有了以上的基礎後,我們來看接下來的SIP message會輕鬆很多~ 不妙,看來要延到part 3...=.= (個人不喜歡長度太長的文章...) 好吧~ Part 2 end.請接著看 SIP Intro --- 第二部 (part 3)

9 則留言:

匿名 提到...

Thank you, that was extremely valuable and interesting...I will be back again to read more on this topic.

匿名 提到...

Thanks for sharing the link, but unfortunately it seems to be offline... Does anybody have a mirror or another source? Please reply to my post if you do!

I would appreciate if a staff member here at uniq-uniq.blogspot.com could post it.

Thanks,
Daniel

BreadRD 提到...

Hi,
Thanks for visiting my site~
Which link you indicate in my article?

匿名 提到...

Awesome website, I hadn't noticed uniq-uniq.blogspot.com earlier in my searches!
Carry on the great work!

匿名 提到...

Hi there,

I have a message for the webmaster/admin here at uniq-uniq.blogspot.com.

May I use part of the information from this blog post right above if I provide a link back to your website?

Thanks,
Jules

BreadRD 提到...

To Jules
OK!

匿名 提到...

Have you considered the fact that this might work another way? I am wondering if anyone else has come across something
similar in the past? Let me know your thoughts...

匿名 提到...

Greetings,

I have a question for the webmaster/admin here at uniq-uniq.blogspot.com.

May I use part of the information from your blog post above if I give a link back to your site?

Thanks,
Charlie

匿名 提到...

Hi - I am certainly glad to discover this. cool job!

搜尋此網誌