【死磕opensips】sip协议解析
【死磕opensips】sip協(xié)議解析
- 閑話
-
- webrtc專欄
- opensips專欄
- 開始
-
- sip歷史
- 什么是sip
- sip 會話協(xié)議流程
- sip消息格式
-
- 請求行
- 狀態(tài)行
- 消息頭
- 結(jié)束
閑話
最近一直在跟一個關(guān)于音視頻通話的項目,之前從webrtc結(jié)合coturn打洞轉(zhuǎn)發(fā)思路,到現(xiàn)在關(guān)于opensips的思路,都是在慢慢摸索前進,當前期的研究不是沒有結(jié)果的,問題是想要根據(jù)那些做成產(chǎn)品有點天方夜譚了;畢竟要走的路還有很遠,坑還有很多,咱也不是怕折了腿的人,但是老總催的緊,咱不得不選擇一個比較成熟的技術(shù)打底,畢竟無到有很難,還是要交一些學費的。
下面是我之前的筆記,有興趣可以了解一下。
webrtc專欄
【webrtc專欄】
【java的P2P打洞通訊學習之路(一)- 整理思路】
【java的P2P打洞通訊學習之路(二)- 初識webRTC】
【java的P2P打洞通訊學習之路(三)- coturn服務(wù)器的搭建】
【海思3518ev200學習記錄(1)- 根據(jù)用戶手冊燒錄系統(tǒng)鏡像】
【海思3518ev200學習記錄(2) - 交叉編譯官方webRTC】
【海思3518ev200學習記錄(3) - 編譯 amazon-kinesis webrtc嵌入式實現(xiàn)】
【海思3518ev200學習記錄(4) - 基于海思源碼分段錄制音頻文件】
【海思 3518 ev 200編譯 報錯 collect2: 錯誤: ld 返回 1】
opensips專欄
【opensips專欄】
開始
回歸正題簡單介紹一下sip。
sip歷史
sipv1回話協(xié)議最早是在1996年由Mark Handley 和 Eve Schooler起草的,在1999年成為標準協(xié)議。后續(xù)經(jīng)過多為前輩的貢獻有了現(xiàn)在成熟sip技術(shù)。
什么是sip
SIP(Session Initiation Protocol,會話初始協(xié)議)可以支持并應(yīng)用于語音、視頻、數(shù)據(jù)等多媒體業(yè)務(wù)。sip提供了用戶地址信息(用戶終端地址),確定被叫方參與通訊的意愿,確定使用的介質(zhì)和介質(zhì)參數(shù),振鈴以及會話終止。sip 支持Presence(呈現(xiàn))、Instant Message(即時消息)等特斯業(yè)務(wù)可以說,有IP網(wǎng)絡(luò)的地方就有SIP協(xié)議的存在。
sip 會話協(xié)議流程
主叫方A呼叫被叫方B:
步驟1:主叫方A發(fā)送INVITE請求到代理服務(wù)器;
步驟2:代理服務(wù)器發(fā)送100 Trying 響應(yīng)主叫方A;
步驟3~6:代理服務(wù)器搜索被叫方B的地址,獲取地址后轉(zhuǎn)發(fā)INVITE請求;
步驟7~9:被叫方B生成的180 振鈴響應(yīng),返回給主叫方A;
步驟10~12:被叫方B生成的200 OK響應(yīng),返回給主叫方A;
步驟13~17:主叫方A收到被叫方B200 OK響應(yīng)后,向被叫方B發(fā)送一個ACK,會話建立;
步驟18~20:會話結(jié)束后,任何參與者(A或B)都可以發(fā)送一個BYE請求來終止會話;
步驟21~23:主叫方A發(fā)送200 OK響應(yīng)來確認BYE,會話終止。
sip消息格式
sip的消息格式與http類似,由三部分組成:
line 請求行(request-line) or 狀態(tài)行(status-line)
Several Headers 消息頭(header)
Message Body 消息正文(body)
請求行
- method: 確定請求的類型
- SIP URI: 確定請求的目的地
- SIP protocol version:SIP協(xié)議版本
例如:< METHOD> < Request-URI> SIP/2.0
SIP版本2.0中的六種基本方法INVITE,REGISTER,BYE,ACK,CANCEL,OPTIONS。
method的所有類型:
| Method | 類型說明 |
|---|---|
| INVITE | 啟動/修改會話 |
| ACK | 確認收到對邀請的最終回復(fù) |
| CANCEL | 取消掛起的邀請 |
| UPDATE | 更新掛起會話的參數(shù) |
| BYE | 結(jié)束會話 |
| OPTIONS | 請求支持的功能 |
| REGISTER | 將IP地址附加到SIP URI |
| REFER | 請求UA訪問URI或URL |
| SUBSCRIBE | 建立訂閱以接收有關(guān)事件的通知 |
| NOTIFY | 傳達特定事件發(fā)生的信息 |
| PRACK | 確認收到可靠傳輸?shù)呐R時響應(yīng) |
| MESSAGE | 使用SIP傳輸即時消息 |
| INFO | 將呼叫信令信息發(fā)送到另一個與其建立了媒體會話的用戶代理 |
狀態(tài)行
- SIP protocol version:SIP協(xié)議版本
例如: SIP/2.0 < Status-Code> < Reason-Phrase>
- status-code:數(shù)字響應(yīng)代碼
相應(yīng)代碼中第一個數(shù)字分為六種情況
| 狀態(tài)碼 | 說明 |
|---|---|
| 1xx | 臨時響應(yīng),表示消息正在處理 |
| 2xx | 成功響應(yīng),表示消息被成功接收 |
| 3xx | 重定向響應(yīng),表示臨時轉(zhuǎn)移或永久轉(zhuǎn)移 |
| 4xx | 客戶端錯誤,表示客戶端請求中有服務(wù)器無法理解的信息 |
| 5xx | 服務(wù)器錯誤,表示服務(wù)器無法完成請求,或服務(wù)器不可用 |
| 6xx | 全局故障,表示所有服務(wù)器都無法完成請求信息 |
所有狀態(tài)碼示例:
| 狀態(tài)碼 | 說明 |
|---|---|
| 100 | 嘗試呼叫 |
| 180 | 振鈴 |
| 181 | 正在轉(zhuǎn)接呼叫 |
| 182 | 排隊 |
| 183 | 會話進度 |
| 200 | 成功響應(yīng) |
| 202 | 認可 |
| 300 | 多項選擇 |
| 301 | 永久移除 |
| 302 | 臨時轉(zhuǎn)移 |
| 303 | 見其他 |
| 305 | 使用代理 |
| 380 | 代替服務(wù) |
| 400 | 錯誤請求 |
| 401 | 未授權(quán) |
| 402 | 需要付款 |
| 403 | 禁止 |
| 404 | 未找到服務(wù)器 |
| 405 | 方法不允許 |
| 406 | 請求不被接受 |
| 407 | 代理身份驗證 |
| 408 | 請求超時 |
| 409 | 請求沖突 |
| 410 | 請求不見了 |
| 411 | 請求所需長度 |
| 413 | 請求實體過大 |
| 414 | 請求URL過長 |
| 415 | 不支持的媒體類型 |
| 420 | 錯誤擴展 |
| 480 | 暫時不可用 |
| 481 | 呼叫分支/事務(wù)不存在 |
| 482 | 檢測到環(huán)路 |
| 483 | 跳太多了 |
| 484 | 地址不完整 |
| 485 | 請求不明確 |
| 486 | 這里很忙 |
| 487 | 請求已取消 |
| 488 | 這里不能接受 |
| 500 | 內(nèi)部服務(wù)器錯誤 |
| 501 | 未實施 |
| 502 | 壞網(wǎng)關(guān) |
| 503 | 服務(wù)不可用 |
| 504 | 網(wǎng)關(guān)超時 |
| 505 | 不支持SIP版本 |
| 600 | 全局故障 |
| 603 | 拒絕 |
| 604 | 在任何地方都不存在 |
| 606 | 不可接受 |
- reason phrase:理由短語
消息頭
示例:
INVITE sip:barbara@b.com SIP/2.0
Via: SIP/2.0/UDP 10.43.122.3;branch=1
From: sip:alice@a.com;tag=4ad340f
To: sip:barbara@b.com
Contact: <sip:alice@10.43.122.3>
Call-ID: 1874630@10.43.122.3
Cseq: 12442 INVITE
v=0
o=user 14341433 14341433 IP4 10.43.122.3
s=.
t=0 0
c=IN IP4 10.43.122.3
m=audio 13222 RTP/AVP 0
a=rtpmap:0 PCMU/8000
Header 字段含義說明:
| Header | 說明 |
|---|---|
| Call-ID | 用于唯一標識兩個用戶代理之間的調(diào)用 |
| Contact | 用于傳遞請求的原始資源或請求發(fā)起人的URL |
| CSeq | 命令序列識別順序錯誤的請求和重傳 |
| From | 標識請求的發(fā)起人 |
| To | 表示請求的收件人 |
| Subject | 表示媒體會話主題的可選標題 |
| Content-Length | 消息正文中的八位字節(jié)數(shù) |
| Content-Type | 表示Internet媒體類型。如果不存在,則假定應(yīng)用程序/SDP |
| User Agent | 提供有關(guān)用戶代理的附加信息,例如制造商 |
| Server | 提供有關(guān)用戶代理服務(wù)器的附加信息 |
| Via | 記錄請求所采用的路由,并用于路由響應(yīng) |
| Record-Route | 用于強制UAs之間的所有請求通過代理路由 |
| Route | 強制路由通過從記錄路由頭中提取的路徑 |
| Max-forwards | 限制一個請求在到達目的地的途中可以進行的跳數(shù)(70) |
| Authorization | 將用戶代理的憑據(jù)傳送到服務(wù)器 |
| Encryption | 用于指定SIP消息中已加密的部分 |
| Hide | 請求下一跳代理對Via頭進行加密 |
| Priority | 允許用戶代理設(shè)置請求的優(yōu)先級:例如緊急、緊急 |
| Supported | 列出一個或多個在用戶代理或服務(wù)器中實現(xiàn)的選項 |
| Unsupported | 表示服務(wù)器不支持的功能 |
結(jié)束
總結(jié)
以上是生活随笔為你收集整理的【死磕opensips】sip协议解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数学】异或(jzoj 2298)
- 下一篇: 纪中C组模拟赛总结(2019.8.9)