簡便的SIP消息--我們來看看SIP消息的格式


疫情期間,學校停課,北京的學校都在家上網絡課堂,大家使用的不是騰訊視頻會議便是釘釘視頻會議。

 

疫情對大部分企業都造成了損失,然而視頻會議市場卻迎來生機。

 

今天咱們來談談視頻會議中使用的SIP協議是什么樣子的。

 

咱們立刻用SIP終端發起一個呼叫,然后抓取網絡包如下,我們看到它包含很多A:B這種格式的數據,這些就叫SIP Header,和HTTP Header差不多。

 

下面是發起呼叫的invite  SIP消息

INVITE sip:6999 SIP/2.0

From: <sip:112826@136.123.127.49>;tag=1b7ffa38-6800a8c0-13c4-60011-8ca1-5ce4ed6e-8ca1

To: <sip:6999>

Call-ID: 1b855600-6800a8c0-13c4-60011-8ca1-614dc2d0-8ca1

CSeq: 1 INVITE

Via: SIP/2.0/UDP 136.123.127.49:5060;rport;branch=z9hG4bK-8ca1-2255705-7fc7db28-1b7c8d00

Max-Forwards: 70

Supported: replaces,timer,100rel

Allow: INVITE, ACK, BYE, REFER, NOTIFY, INFO, CANCEL

User-Agent: Sherlock 3.2.0.8

Contact: <sip: 112826@136.123.127.49>

Session-Expires: 1800;refresher=uac

 

咱們再看看被邀請的一方返回的SIP消息

SIP/2.0 200 OK

From: <sip: 112826@136.123.127.49>;tag=1b7ffa38-6800a8c0-13c4-60011-8ca1-5ce4ed6e-8ca1

To: <sip:6999>;tag=7f231e4ff028-e46b820a-13c4-55022-22b3fa-3ca0854f-22b3fa

Call-ID: 1b855600-6800a8c0-13c4-60011-8ca1-614dc2d0-8ca1

CSeq: 1 INVITE

 

SIP消息包含了很多SIP Headers,它很容易看懂,咱們挑幾個看一下

  1. 1.       INVITE sip:6999 SIP/2.0

它的意思是,這是一個invite消息,呼叫的對象是sip:6999,SIP協議版本是2.0

  1. 2.       From: <sip:112826@136.123.127.49>;tag=1b7ffa38-6800a8c0-13c4-60011-8ca1-5ce4ed6e-8ca1

它的意思是這個invite消息來自誰,tag用來標識這個誰

  1. 3.       To: <sip:6999>

它的意思很明顯,就是發送給誰

  1. 4.       Call-ID: 1b855600-6800a8c0-13c4-60011-8ca1-614dc2d0-8ca1

它的意思也很明顯,就是呼叫的ID,用來標識這次呼叫

  1. 5.       CSeq: 1 INVITE

1 是個序列號,一個對話包含很多請求,一般情況下每次發起一個新的請求,這個序列號會+1

INVITE 這個是請求的名字。

這個CSeq有好幾個用途

1)       解決失序問題

比如一個request發送到了遠端,遠端也有序列號,如果遠端發現新過來的request里的序列號比自己的序列號低,就認為這個請求順序亂了,就會返回一個500的內部錯誤(Server Internal Error)。

2)       用來區分是新請求還是重新發送的請求

比如re-Invite請求是個新請求,序列號會+1

retransmitted invite就只是重傳原來的請求,序號不會+1

遠端根據這個序列號就能知道,這是一個新請求,還是重新發送的請求。

3)       用來判斷response對應哪個request.

比如UAC先發了一個invite request, 緊接着發送一個cancel request. 這兩個request 都可能發送回來200OK response,UAC怎么知道到底這個200OK response是invite request的,還是cancel request的?就靠CSeq里的請求名字。

比如我們前面的例子里的200OK的消息,它里面的CSeq是這樣的:

CSeq: 1 INVITE

這說明這個200OK的response是對應invite request的。

 

是不是很簡單,比H323簡單多了。現在視頻會議大都通過SIP消息來控制會議,H323協議慢慢被淘汰了。

 

不知道釘釘和騰訊使用什么協議,也有可能是使用自己的私有協議,但最大可能是使用SIP,在網絡上抓個包,立刻就能知道了。

 

Reference: https://tools.ietf.org/html/rfc3261


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM