1、Sip 協議簡介
SIP(Session Initiation Protocol)會話初始協議
它是一個基於文本的應用層控制協議,用於創建、修改和釋放一個或多個參與者的會話。SIP 是一種源於互聯網的IP 語音會話控制協議,具有靈活、易於實現、便於擴展等特點
SIP(Session Initiation Protocol,會話初始協議)是由IETF(Internet Engineering Task Force,因特網工程任務組)制定的多媒體通信協議。廣泛應用於CS(Circuit Switched,電路交換)、NGN(Next Generation Network,下一代網絡)以及IMS(IP Multimedia Subsystem,IP多媒體子系統)的網絡中,可以支持並應用於語音、視頻、數據等多媒體業務
,同時也可以應用於Presence(呈現)、Instant Message(即時消息)等特色業務。可以說,有IP網絡的地方就有SIP協議的存在。
SIP是類似於HTTP
,SIP可以減少應用特別是高級應用的開發時間。由於基於IP協議的SIP利用了IP網絡
,固定網運營商也會逐漸認識到SIP技術對於他們的遠意義。
2、主要特點
- 獨立於TCP或者UDP,使用自己應用層協議保證消息的可靠傳送
- 消息體采用文本方式UTF-8
- 以客戶-服務器方式建立會話
- 靈活的尋址方式
- 是應用層的控制協議,可以建立、修改和結束多媒體會話
- SIP沒有媒體協商功能,往往需要集成SDP協議
- 可應用於視頻、語音、即時通信、在線游戲和虛擬現實等多媒體交互式用戶會話
- rfc3261為核心,但是擴展眾多,可滿足各種復雜應用
3、功能實體
User Agent(呼叫代理) 是SIP網絡的終端,具體的分為UserAgent Client和UserAgent Server。UAC是客戶端,表示主叫;UAS是服務端,表示被叫。
REGISTRAR SERVER(注冊服務器):接受客戶端的注冊請求,將用戶的地址信息寫入數據庫,並返回注冊狀態。
REDIRECT SERVER(重定向服務器): 接受SIP的請求,映射請求的原地址成零個或者多個IP地址,並且返回給客戶端。 由客戶端重新發起請求。
LOCATION SERVER(定位服務器): 管理若干數據庫,接受由Redirect Server或者Proxy Server的路由查詢。
Proxy Server(代理服務器):完成SIP消息的轉接和轉發功能,可以修改SIP消息內容。
4、消息的構成
請求:UAC -> UAS , 包括3個元素:請求行、消息頭、消息體
響應:UAS ->UAC :狀態行、消息頭、消息體
備注:UAC/UAS的是相對的概念,可倒換
5、
SIP -UAC 6種基本方法
- INVITE——邀請用戶加入呼叫
- BYE——終止一呼叫上的兩個用戶之間的呼叫
- OPTIONS——請求關於服務器能力的信息
- ACK——確認客戶機已經接收到對INVITE的最終響應
- REGISTER——SIP地址注冊,讓服務器知道SIP端點的聯系地址
- CANCEL——取消會話邀請
SIP -UAS 協議狀態響應
- 1xx 臨時響應 100 Trying 180 Ringing
- 2xx 成功響應 200 OK
- 3xx 重定向響應 302 Moved Temporarilly
- 4xx 客戶端錯誤響應 403 Forbidden 404 Not Found
- 5xx 服務器錯誤響應 500 Server internal Error
- 6xx 全局錯誤響應 600 Busy Everywhere
6、三個重要概念
Dialog (對話) 指的是兩個UA之間端到端的關系,它在Call ID、local tag和remote tag都產生之后被認為建立;
Transaction (事務)指的是一個請求的處理過程,當一個請求被發出,針對這個請求的響應也被處理之后,才是一個完整的事務,當然可能包含一個或多個臨時響應或一個或多個最終響應;
Session (會話) 是SDP方面的概念,表示多媒體發送者和接收者通過媒體流進行交互的過程。
7、SIP之GB28181注冊、注銷詳解
a) 1:SIP 代理向SIP 服務器發送 Register 請求;
b) 2:SIP 服務器向 SIP 代理發送響應401, 並在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
c) 3:SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證息;
d) 4:SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應
200 OK, 如果身份不合法則發送拒絕服務應答。
注:“SIP代理”這里指的UAC(User Agent Client) "SIP服務器"這里指的是UAS(User Agent Server)
當UAS接收到消息后,回送一個401消息“Unauthorized”在消息包頭添加如下字段
WWW-Authenticate:
Digest realm="3402000000",qop="auth",nonce="52d33cd23eea89a9563618cdf31d720a"
其中realm指的是域名(根據自己項目的實際情況填寫),Nonces是隨機數
UAC向UAS注冊,下面是注冊消息
REGISTER sip:34020000002000000001@36.103.240.124:5060 SIP/2.0
Via: SIP/2.0/UDP 10.10.0.10:7081;rport;branch=z9hG4bK460266740
From: <sip:34020000002000000001@10.10.0.10:7081>;tag=845016216
To: <sip:34020000002000000001@10.10.0.10:7081>
Call-ID: 1688820428
CSeq: 1 REGISTER
Contact: <sip:34020000002000000001@10.10.0.10:7081>
Max-Forwards: 70
User-Agent:
Expires: 3600
Content-Length: 0
字段說明:
請求起始行:表示UAC向IP地址為36.103.240.124的服務器發起注冊,SIP版本號為2.0
From字段:指明該REGISTER請求消息由UAS(IP地址:36.103.240.124)控制的UAC發起的。
To字段:指明REGISTER請求接收方的地址。此時REGISTER請求的接收方為IP地址為36.103.240.124的UAS。(這個值和To頭域的值相同,除非這個請求是第三方發起的注冊請求。)
Call-ID字段:UAC發出的給某個注冊服務器(registrar)的所有注冊請求都應該有相同的Call-ID頭域值。如果相同的客戶端用了不同的Call-ID值,注冊服務器(registrar)就不能檢測是否一個REGISTER請求由於延時的關系導致了故障。
Cseq字段:Cseq值保證了REGISTER請求的正確順序。一個UA為每一個具備相同的Call-ID的REGISTER請求順序遞增這個Cseq字段。
Contact字段:在REGISTER請求中的Contact字段指明用戶可達位置。
Expires字段:表示該登記生存期為3600s。
Content-Length字段:表明此請求消息消息體的長度為空,即此消息不帶會話描述。
備注:一個合法的SIP請求必須至少包含如下頭域:To、FROM、Cseq、Call-ID、Max-Forwards、Via
注銷流程圖描述如下:
a) 1:SIP 代理向SIP 服務器發送 Register 請求,Expires 字段的值為0, 表示SIP 代理要注銷;
b) 2:SIP 服務器向 SIP 代理發送響應401, 並在響應的消息頭 WWW_Authenticate 字段中給出適合SIP 代理的認證體制和參數;
c) 3:SIP 代理重新向SIP 服務器發送 Register 請求, 在請求的 Authorization 字段給出信任書,包含認證信息,Expires 字段的值為0;
d) 4:SIP 服務器對請求進行驗證, 如果檢查出 SIP 代理身份合法, 向 SIP 代理發送成功響應
200 OK, 如果身份不合法則發送拒絕服務應答。