简便的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

posted @ 2020-04-27 09:02  福尔  阅读(1342)  评论(0编辑  收藏  举报