SIP學習筆記----包

學習 SIP 協議最快捷的方法是經過範例來學習,服務器

找到了一個完整的呼叫流程,let's go網絡

 

 

INVITE app

主叫方Tesla首先發起 INVITE 消息到被叫方MarconiINVITE 消息包含會話類型和一些呼叫所必須的參數。會話類型多是單純的語音,也多是網絡會議所用的多媒體視頻,還多是遊戲會話。下面是消息體範例,咱們來詳細分析各個字段的意義。學習

INVITE sip:marconi@radio.org SIP/2.0
    < 請求方法、請求地址(RequestURI)、SIP 版本號(目前都是 SIP/2.0
        < 請求地址通常就是被叫方地址,跟 MSN 中好友 eMail 地址相似
測試

Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b
    <SIP 版本號(2.0)、傳輸類型(UDP)、呼叫地址、
        <branch是一隨機碼,它被看做傳輸標識
        <Via 字段中地址是消息發送方或代理轉發方設備地址,通常由主機地址和端口號組成
        <=傳輸類型能夠爲 UDPTCPTLSSCTP
編碼

Max-Forwards: 70
    <=最大跳躍數,就是通過 SIP 服務器的跳躍次數,主要是防止循環跳躍
    <=每儘管一臺代理服務器,該整數減一
spa

To: G. Marconi
From: Nikola Tesla ;tag=76341

    <=表示請求消息的發送方和目標方
        <=若是裏面有用戶名標籤,地址要求用尖括號包起來
        <=對於 INVITE 消息,能夠在 From 字段中包含 tag,它也是個隨機碼
代理

Call-ID: 123456789@lab.high-voltage.org
    <=呼叫ID是由本地設備生成的,全局惟一值。每次呼叫該值惟一不變
        <=對於用戶代理髮送 INVITE 消息,本地將生成 From tag Call-ID 全局惟一碼,被叫方代理則生成 To tag 全局惟一碼。這三個隨機碼作爲整個對話中對話標識dialog indentifier)在通話雙方使用。
視頻

 

CSeq: 1 INVITE
    <CSeq,又叫命令隊列Command Seqence),每發送一個新的請求,該數自動加1
以上幾個字段是全部 SIP 消息體所必須的,其它頭字段有些是可選的,有些在特定請求也是必須
隊列

Subject: About That Power Outage...
Contact:

    <Contact INVITE 消息所必須的,它用來路由到被叫設備地址,也稱爲用戶代理(UA
Content-Type: application/sdp
Content-Length: 158

    <=最後兩位附屬字段說明消息體類型以及字段長度

 

v=0    <SDP版本號,目前都是 0
o=Tesla 2890844526 2890844526 IN IP4 lab.high-voltage.org    <=主叫源地址,類型等
s=Phone Call    <=主題
c=IN IP4 100.101.102.103    <=鏈接
t=0 0    < 時間戳
m=audio 49170 RTP/AVP 0   <=媒體
a=rtpmap:0 PCMU/8000    <=媒體屬性

    <=從上面 SDP 消息體咱們能夠得出下面信息
        <=鏈接 IP 地址:100.101.102.103
        <
=媒體格式:audio
        <
=端口號:49170
        <
=媒體傳輸類型:RTP
        <
=媒體編碼:PCM u Law
        <
=採樣率:8000 Hz

180 Ringing

當被叫方接收到 INVITE 請求消息後,將回復 180 Ringing。顧名思義,就是發回鈴音,提示主叫方電話已鏈接上了,正等待被叫應答。被叫方接收到 INVITE 消息後也會發生響鈴或者其它有呼入提示,這由被叫方設定(咱們能夠把它想象成咱們本身設定手機鈴聲)。對於 180 響應又被稱爲消息及時響應,它是一種用來測試被叫狀態的一種響應。所以它所包含的信息很少,具體 180 響應消息以下:

SIP/2.0 180 Ringing
Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b
;received=100.101.102.103   
<=這裏增長一個 received 參數,標識接收方 IP 地址
To: G. Marconi ;tag=a53e42    <=上已提到,To tag 作爲被叫方標識
From: Nikola Tesla ;tag=76341  <=要求很發送方 From tag 一致
Call-ID: 123456789@lab.high-voltage.org
CSeq: 1 INVITE
Contact:
Content-Length: 0

    <=對於 180 Ringing 響應,基本上就是將 INVITE ViaToFromCall-ID CSeq 內容複製過來,對於首行標出 SIP 版本號,響應代碼(180)和動做緣由(reason phrase
    <=注意這裏 From To 地址,由於它們用來指定呼叫方向,所以這裏的 200 OK 響應並無將地址對調,仍然保持原樣。一點不一樣的是 To 頭字段添加了由被叫方 Marconi 生成的 tag 標識

200 Ok

被叫響鈴後,若是被叫用戶 Marconi 接起電話,則發出 200 OK 響應。這個響應除了作爲接通指示以外,還有一個功能是用來指定被叫容許的鏈接媒體格式,讓主叫方確認是否能夠接收該媒體。
消息體以下

SIP/2.0 200 OK
Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bKfw19b
;received=100.101.102.103
To: G. Marconi ;tag=a53e42
From: Nikola Tesla ;tag=76341
Call-ID:
123456789@lab.high-voltage.org
CSeq: 1 INVITE
Contact:
Content-Type: application/sdp
Content-Length: 155

    <=頭字段部分基本同上

v=0
o=Marconi 2890844528 2890844528 IN IP4 tower.radio.org
s=Phone Call
c=IN IP4 200.201.202.203
t=0 0
m=audio 60000 RTP/AVP 0
a=rtpmap:0 PCMU/8000

    <=從上面 SDP 消息體咱們能夠得出下面信息
        <=終端 IP 地址:200.201.202.203
        <
=媒體格式:audio
        <
=端口號:60000
        <
=媒體傳輸類型:RTP
        <
=媒體編碼:PCM u Law
        <
=採樣率:8000 Hz

ACK

通話前最後一步是主叫方確認 200 OK響應。該項確認證實鏈接被容許,即將使用另外一種協議開始媒體鏈接。這另外一種協議是上面在 SDP 消息段中所協商好的 RTP 格式。該 ACK 響應內容以下:

ACK sip:marconi@tower.radio.org SIP/2.0
Via: SIP/2.0/UDP lab.high-voltage.org:5060;branch=z9hG4bK321g
Max-Forwards: 70
To: G. Marconi ;tag=a53e42
From: Nikola Tesla ;tag=76341
Call-ID:
123456789@lab.high-voltage.org
CSeq: 1 ACK
Content-Length: 0

BYE

通話完畢後,由被叫方 Marconi 首先掛機,發送 BYE 請求命令。注意這回由 Marconi 作爲主叫方了,所以 Via 字段和 FromTo INVITE 字段有所不一樣。其實也就是倒置。

BYE sip:n.tesla@lab.high-voltage.org SIP/2.0
Via: SIP/2.0/UDP tower.radio.org:5060;branch=z9hG4bK392kf
Max-Forwards: 70
To: Nikola Tesla ;tag=76341
From: G. Marconi ;tag=a53e42
Call-ID: 123456789@lab.high-voltage.org
CSeq: 1 BYE
Content-Length: 0

200 OK

BYE 以後,要求被叫方發 200 Ok 確認,也就是讓主叫知道被叫已經知道你掛斷了。(注意這裏所說的主被叫角色已經倒過來了)打個比方,通話以後,有一方要求掛機,另外一方須要知道它已經掛機了。

SIP/2.0 200 OK
Via: SIP/2.0/UDP tower.radio.org:5060;branch=z9hG4bK392kf
;received=200.201.202.203
To: Nikola Tesla ;tag=76341
From: G. Marconi ;tag=a53e42
Call-ID:
123456789@lab.high-voltage.org
CSeq: 1 BYE
Content-Length: 0

到此,就是最簡單的呼叫過程。該過程簡單在於兩個終端之間沒有其它設備,徹底的點對點鏈接,它們之間只須要知道對方 IP 地址便可。現實生活中這種呼叫形式是不多見的。

相關文章
相關標籤/搜索