日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【死磕opensips】sip协议解析

發布時間:2023/12/3 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 【死磕opensips】sip协议解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【死磕opensips】sip協議解析

  • 閑話
    • webrtc專欄
    • opensips專欄
  • 開始
    • sip歷史
    • 什么是sip
    • sip 會話協議流程
    • sip消息格式
      • 請求行
      • 狀態行
      • 消息頭
  • 結束

閑話

最近一直在跟一個關于音視頻通話的項目,之前從webrtc結合coturn打洞轉發思路,到現在關于opensips的思路,都是在慢慢摸索前進,當前期的研究不是沒有結果的,問題是想要根據那些做成產品有點天方夜譚了;畢竟要走的路還有很遠,坑還有很多,咱也不是怕折了腿的人,但是老總催的緊,咱不得不選擇一個比較成熟的技術打底,畢竟無到有很難,還是要交一些學費的。
下面是我之前的筆記,有興趣可以了解一下。

webrtc專欄

【webrtc專欄】
【java的P2P打洞通訊學習之路(一)- 整理思路】
【java的P2P打洞通訊學習之路(二)- 初識webRTC】
【java的P2P打洞通訊學習之路(三)- coturn服務器的搭建】

【海思3518ev200學習記錄(1)- 根據用戶手冊燒錄系統鏡像】
【海思3518ev200學習記錄(2) - 交叉編譯官方webRTC】
【海思3518ev200學習記錄(3) - 編譯 amazon-kinesis webrtc嵌入式實現】
【海思3518ev200學習記錄(4) - 基于海思源碼分段錄制音頻文件】
【海思 3518 ev 200編譯 報錯 collect2: 錯誤: ld 返回 1】

opensips專欄

【opensips專欄】

開始

回歸正題簡單介紹一下sip。

sip歷史

sipv1回話協議最早是在1996年由Mark Handley 和 Eve Schooler起草的,在1999年成為標準協議。后續經過多為前輩的貢獻有了現在成熟sip技術。

什么是sip

SIP(Session Initiation Protocol,會話初始協議)可以支持并應用于語音、視頻、數據等多媒體業務。sip提供了用戶地址信息(用戶終端地址),確定被叫方參與通訊的意愿,確定使用的介質和介質參數,振鈴以及會話終止。sip 支持Presence(呈現)、Instant Message(即時消息)等特斯業務可以說,有IP網絡的地方就有SIP協議的存在。

sip 會話協議流程


主叫方A呼叫被叫方B:

步驟1:主叫方A發送INVITE請求到代理服務器;
步驟2:代理服務器發送100 Trying 響應主叫方A;
步驟3~6:代理服務器搜索被叫方B的地址,獲取地址后轉發INVITE請求;
步驟7~9:被叫方B生成的180 振鈴響應,返回給主叫方A;
步驟10~12:被叫方B生成的200 OK響應,返回給主叫方A;
步驟13~17:主叫方A收到被叫方B200 OK響應后,向被叫方B發送一個ACK,會話建立;
步驟18~20:會話結束后,任何參與者(A或B)都可以發送一個BYE請求來終止會話;
步驟21~23:主叫方A發送200 OK響應來確認BYE,會話終止。

sip消息格式

sip的消息格式與http類似,由三部分組成:
line 請求行(request-line) or 狀態行(status-line)
Several Headers 消息頭(header)
Message Body 消息正文(body)

請求行

  • method: 確定請求的類型
  • SIP URI: 確定請求的目的地
  • SIP protocol version:SIP協議版本
    例如:< METHOD> < Request-URI> SIP/2.0
    SIP版本2.0中的六種基本方法INVITE,REGISTER,BYE,ACK,CANCEL,OPTIONS
    method的所有類型:
Method 類型說明
INVITE 啟動/修改會話
ACK 確認收到對邀請的最終回復
CANCEL 取消掛起的邀請
UPDATE 更新掛起會話的參數
BYE 結束會話
OPTIONS 請求支持的功能
REGISTER 將IP地址附加到SIP URI
REFER 請求UA訪問URI或URL
SUBSCRIBE 建立訂閱以接收有關事件的通知
NOTIFY 傳達特定事件發生的信息
PRACK 確認收到可靠傳輸的臨時響應
MESSAGE 使用SIP傳輸即時消息
INFO 將呼叫信令信息發送到另一個與其建立了媒體會話的用戶代理

狀態行

  • SIP protocol version:SIP協議版本

例如: SIP/2.0 < Status-Code> < Reason-Phrase>

  • status-code:數字響應代碼
    相應代碼中第一個數字分為六種情況
狀態碼 說明
1xx 臨時響應,表示消息正在處理
2xx 成功響應,表示消息被成功接收
3xx 重定向響應,表示臨時轉移或永久轉移
4xx 客戶端錯誤,表示客戶端請求中有服務器無法理解的信息
5xx 服務器錯誤,表示服務器無法完成請求,或服務器不可用
6xx 全局故障,表示所有服務器都無法完成請求信息

所有狀態碼示例:

狀態碼 說明
100 嘗試呼叫
180 振鈴
181 正在轉接呼叫
182 排隊
183 會話進度
200 成功響應
202 認可
300 多項選擇
301 永久移除
302 臨時轉移
303 見其他
305 使用代理
380 代替服務
400 錯誤請求
401 未授權
402 需要付款
403 禁止
404 未找到服務器
405 方法不允許
406 請求不被接受
407 代理身份驗證
408 請求超時
409 請求沖突
410 請求不見了
411 請求所需長度
413 請求實體過大
414 請求URL過長
415 不支持的媒體類型
420 錯誤擴展
480 暫時不可用
481 呼叫分支/事務不存在
482 檢測到環路
483 跳太多了
484 地址不完整
485 請求不明確
486 這里很忙
487 請求已取消
488 這里不能接受
500 內部服務器錯誤
501 未實施
502 壞網關
503 服務不可用
504 網關超時
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 用于唯一標識兩個用戶代理之間的調用
Contact 用于傳遞請求的原始資源或請求發起人的URL
CSeq 命令序列識別順序錯誤的請求和重傳
From 標識請求的發起人
To 表示請求的收件人
Subject 表示媒體會話主題的可選標題
Content-Length 消息正文中的八位字節數
Content-Type 表示Internet媒體類型。如果不存在,則假定應用程序/SDP
User Agent 提供有關用戶代理的附加信息,例如制造商
Server 提供有關用戶代理服務器的附加信息
Via 記錄請求所采用的路由,并用于路由響應
Record-Route 用于強制UAs之間的所有請求通過代理路由
Route 強制路由通過從記錄路由頭中提取的路徑
Max-forwards 限制一個請求在到達目的地的途中可以進行的跳數(70)
Authorization 將用戶代理的憑據傳送到服務器
Encryption 用于指定SIP消息中已加密的部分
Hide 請求下一跳代理對Via頭進行加密
Priority 允許用戶代理設置請求的優先級:例如緊急、緊急
Supported 列出一個或多個在用戶代理或服務器中實現的選項
Unsupported 表示服務器不支持的功能

結束

總結

以上是生活随笔為你收集整理的【死磕opensips】sip协议解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。