<h4>一、SIP簡介</h4>
<h6>1. 什么是SIP?</h6>
會話初始化協(xié)議
SIP( Session Initiation Protocol ,RFC3261)
是一個基于文本的處于應用層的控制協(xié)議,可以用來創(chuàng)建,修改和終止會話。具有簡練、開放、兼容和可擴展等特性。
2. SIP的作用?
SIP并不能提供具體的服務,它只是在多媒體框架中的一部分,它與實時
數(shù)據(jù)傳輸協(xié)議(RTP)
、實時流協(xié)議(RSTP)
、會話描述協(xié)議(SDP)
等其他協(xié)議一起組成一個完整的多媒體架構,在這個多媒體架構中SIP相當于交通工具。
3. SIP是如何傳輸?shù)模?/strong>
SIP是基于TCP/IP協(xié)議進行數(shù)據(jù)傳輸?shù)模虼丝梢酝ㄟ^UDP傳輸(較常用),也可以同TCP傳輸。
4. SIP的組成結構
從結構上來說SIP協(xié)議由一組相對無關的處理層次組成,這些層次之間只有松散的關系。 事務用戶層(Transaction User)->事物層(Transaction)->傳輸層(Transport)->語法和編碼層(Syntax and Encoding)
<h4>二、SIP常用術語</h4>
1.常用術語概述
** <1>會話(Session)**,就是一個多媒體發(fā)送方和接收方組成的集合。通常意義下可以理解為一次打電話從摘機、撥號、通話、掛機這一系列動作包含的所有信號集合。
<2>對話(Dialog),一個對話是持續(xù)一段時間的兩個UA之間的端到端的SIP關系。用Call-ID,local tag(本地tag),remote tag(對方tag)來標志一個對話。
<3>事務(Transaction),是在客戶端和服務端的事件,包括了從第一個由客戶端發(fā)送到服務端的請求,到最后一個(非1xx)服務端向客戶端發(fā)出的終結應答。一般通過Via頭域中的branch參數(shù)和Cseq頭域的方法參數(shù)來標志一個事務。
<4>用戶代理 UA(User Agent ),一個邏輯實體的概念,包含UAC和UAS,僅存在于事務中。UAC( User Agent Client ):用戶代理客戶端,用于發(fā)送SIP請求。UAS( User Agent Server ):用戶代理服務器,用于對SIP請求做響應的。
<5>背靠背的用戶代理 B2BUA(Back-to-Back UserAgent),是直接的UAC和UAS的串連,要接收和處理請求,為了決定如何處理這個請求,又要發(fā)出一個請求,同時需要維持對話狀態(tài)。
<6>呼叫(Call),它是指在端點之間一些通訊行為,通常用于建立多媒體對話。
<7>請求(Request),一個由客戶端發(fā)到服務端得SIP信息,用于執(zhí)行特定的功能。
<8> 應答(Response),一個由服務端發(fā)到客戶端得SIP信息。用來標志從客戶端發(fā)往服務端得請求處理的情況。
<9>消息(Message),SIP元素之間傳送的協(xié)議數(shù)據(jù)就是消息。
<10> 方法(Method),是向服務器請求處理的主要功能。
<h4>三、協(xié)議信息</h4>
1.請求信息類型
INVITE
:發(fā)起會話請求,邀請用戶加入一個會話,會話描述含于信息體中。
BYE
:結束會話
ACK
:用于對請求消息的響應消息進行確認。
OPTIONS
:用于請求能力信息。
CANCEL
:用于釋放未建立的呼叫。
REGISTER
:用戶SIP網(wǎng)絡服務器登記用戶位置。
2.響應消息狀態(tài)碼
1xx:臨時響應,表示已經(jīng)接受到請求信息,正對其進行處理;
2xx:成功響應,表示請求已經(jīng)被接受、處理并被成功受理;
3xx:重定向響應,表示為完成請求信息需要采取進一步的行動;
4xx:客戶機錯誤,表示請求消息中包含語法錯誤或者SIP服務器不能完成對該請求消息的處理;
5xx:服務器錯誤,表示SIP服務器故障不能完成對正確消息的處理。
6xx:全局故障,表示請求不嗯給你在任何SIP服務器上實現(xiàn)。
3.請求消息和響應消息的格式
SIP一般消息 = 起始行
*消息頭
CRLF(空行)
[消息體]
起始行=請求行/狀態(tài)行(SIP請求消息起始行是請求行(Request-Line),響應消息起始行是狀態(tài)行(Status-Line))。
請求消息頭至少包括From
、To
、CSeq
、Call
、Max-Forwards
、Via
六個字段他們是構建SIP消息的基本單元。
消息體一般采用SDP(Session Description Protocol)
協(xié)議,會話描述協(xié)議。
4.SIP請求實例
INVITE sip:5120@192.168.36.180 SIP/2.0
Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
From: sip:5121@192.168.6.21;tag=1928301774
To: sip:5120@192.168.36.180
Call-ID: c2943000-e0563-2a1ce-2e323931@192.168.6.21
CSeq: 100 INVITE
Max-Forwards: 70
Contact: sip:5121@192.168.6.21:5060
Content-Type: application/sdp
Content-Length: 142
Body(略)
其中Request Line包括方法名,Request URL,協(xié)議版本
下面的為頭域部分,每個頭域格式為,域名+“:”+域值。
頭域后面加一個空行,然后是消息體部分(如果有的話)
需要注意幾點
一個合法的SIP請求的頭域部分必須至少包含如下6個頭域:Via,F(xiàn)rom,To,Call-ID,Cseq,Max-Forwards。
整個消息中每行都是以回車換行(CRLF)結束。
頭域的域名是大小寫不敏感的,一般習慣第一個字母大寫;域值也是大小寫不敏感的,除非用引號引起來。
冒號左右對加多少空格沒有限制,一般建議在冒號和值之間加一個空格(SP)即可。
在沒有body時,頭域的后面也要加一個空行。
5.SIP應答實例
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.6.21:5060;branch=z9hG4bK776asdhds
From: sip:5121@192.168.6.21;tag=1928301774
To: sip:5120@192.168.36.180;tag=34246673
Call-ID: c2943000-e0563-2a1ce-2e323931@192.168.6.21
CSeq: 100 INVITE
Max-Forwards: 70
Contact: sip:5120@192.168.36.180:5060
Content-Type: application/sdp
Content-Length: 164
Body(略)
其中Status Line包括協(xié)議版本,狀態(tài)碼,狀態(tài)說明
其他的頭域除了Contact要改為自己的地址端口,Content-Length的值
為自己實際的body大小意外,其他可從收到的請求中復制。