SIP协议学习笔记_SIP



友情提示:初次接触SIP(Session Initiation Protocol)协议的同学,强烈建议先将文末参考文章中的链接,先看至少二遍!


 


一、SIP协议是一个文本协议


言外之意:不同于二进制难以阅读,SIP是仅凭肉眼就能看懂大意的协议。来一个示例:


 


INVITE的请求示例:





INIVTE sip:jerry@california.tel.com
Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1
Route:<sip:[5555::a:b:c:d];lr>
Route:<sip:telcomx@scscf1.tel.com;lr>
Contact:<sip:[4444::2:3:4:5]:1537>
From:<sip: tom@telcomx.tel.com>;tag=6e87wa9
To:<sip: jerry@california.tel.com>
Call-ID: apb03a0s09dkjdfoaidy49555
CSeq: 1 INVITE
Max-Forwards: 70
Content-Length:183
(必须的空行)
(SDP 请求消息体)


注:类似HTTP协议有GET/POST/PUT/DELETE等基本操作一样,SIP中有INVITE/BYE/REGISTER等操作,INVITE通常用于A向B发起呼叫。

第2行,表示是这SIP协议,版本为2.0,采用UDP协议传输。

 

INVITE的响应示例:



SIP/2.0 183 Session in Progress 
Via: SIP/2.0/UDP scscf2.california.tel.com;branch=12fd3
Via: SIP/2.0/UDP icscf2.california.tel.com;branch=24re3
Via: SIP/2.0/UDP scscf1.tel.com;branch=64w32
Via: SIP/2.0/UDP pcscf1.tel.com;branch=412d2
Via: SIP/2.0/UDP[4444::2:3:4:5];branch=8ulse1
Route-Route:<sip pcscf2.california.tel.com;lr>
Route-Route:<sip scscf2.california.tel.com;lr>
Route-Route:<sip scscf1.tel.com;lr>
Route-Route:<sip pcscf1.tel.com;lr>
Route:<sip:telcomx@scscf1.tel.com;lr>
Contact:<sip:[4444:5:6:7:8]:1078>
From:<sip: jerry@california.tel.com>;tag=e42q14d
To:<sip: tom@telcomx.tel.com>;tag=6e87wa9
Call-ID: apb03a0s09dkjdfoaidy49555
CSeq: 2 183
Max-Forwards: 70
Content-Length:165
(必须的空行)
(SDP 请求消息体)


 

二、SIP协议所处的位置

下面是从网上淘来的一张图

SIP协议学习笔记_ip协议_02

可以看到,SIP跟HTTP一样,属于应用层协议。SIP下层即可使用UDP,也可以使用TCP。

 

三、相关术语

3.1 UAC/UAS

UAC 即User Agent Client 通常指发起呼叫的应用。UAS 即User Agent Server 通常指被叫端,主要负责接受、重定向或者拒绝请求,给到来的请求发送响应。UAC与UAS是一个相对的概念,当某个SIP终端(比如:软电话应用)向外拨打时,它就是UAC,而反过来,对方打电话给它,它变成被叫时,就是UAS。

3.2 Register Server 

通常SIP终端(不管是软电话还是硬话机)使用前,要先向某个服务器,发出REGISTER请求注册自己,负责处理REGISTER请求的服务器,即为Register Server。

打个比方:某老板很忙,是一个空中飞人,经常来去不定,每次出行前只告诉助理自己的联系方式,别人要找他,必须先问助理:老板在哪?怎么联系?助理相当于就是Register Server.

3.3 Location Server

用于跟踪用户位置,Location Server与Register Server只是逻辑上的划分,通常都由一个物理实体充当2种角色。

3.4 Proxy Server

负责接收和转发 SIP 请求,如果有需要,也可以解析并修改SIP部分信息,但是不允许影响请求或会话的状态。

打个比方:张三要追李四的闺蜜,但是不知道怎么联系,李四说对他说,你写个情书,我帮你转交给她,这事儿包在我身上,这时候李四就是张三的Proxy Server.

3.5 Redirect Server

将请求的地址映射成新地址,对请求进行重定向,与Proxy Server的区别在于不转发INVITE。

还是刚才那个比方:张三要追李四的闺蜜,不知道怎么联系,李四说,我把闺蜜的微信号给你,你自己去加好友吧,成不成得靠你自己,我只能帮你到这儿了。这时候李四只是张三的Redirect Server,最终INVITE发起请求,还是张三自己来。

3.6 B2BUA

所谓的Back To Back User Agent (背靠背用户代理)。简单点讲,这是UAC+UAS的合体,FreeSwitch就是一个B2BUA的经典案例。

SIP协议学习笔记_重定向_03

把上述术语都画到一张图里,感受下:

SIP协议学习笔记_freeswitch_04

 

四、SIP请求方法列表及响应码含义

请求名称

含义

参考协议

REGISTER

将URI注册到Location服务器

 ​​RFC 3261​

INVITE

 发起电话呼叫

 ​​RFC 3261​

ACK

 确认INVITE请求

 ​​RFC 3261​​ 

BYE

 挂断电话

 ​​RFC 3261​

CANCEL

 取消Pending中的请求

 ​​RFC 3261​

OPTIONS

 

 ​​RFC 3261​

SUBSCRIBE

 订阅事件

 RFC 6665

NOTIFY

 通知事件

 RFC 6665

PRACK

 临时确认

 RFC 3262

UPDATE

 

 RFC 3311

MESSAGE

发送文本消息

 RFC 3428

REFER

 

 RFC 3515

PUBLISH

 

 RFC 3903

INFO

 

 RFC 6086

 

 常见响应码:

分类

代码

含义

 最终状态?

1xx

 

临时应答 

 No

 

100

试呼叫(Trying)

 

 

180

振铃(Ringing)

 

 

181

呼叫正在前转(Call is Being Forwarded)

 

2xx

 

会话成功 

Yes

 

200

成功响应(OK)

 

3XX

 

重定向 

Yes 

 

302

临时迁移(Moved Temporarily)

 

4xx

 

请求失败

Yes 

 

400

错误请求(Bad Request)

 

 

401

未授权(Unauthorized)

 

 

403

禁止(Forbidden)

 

 

404

用户不存在(Not Found)

 

 

408

请求超时(Request Timeout)

 

 

480

暂时无人接听(Temporarily Unavailable)

 

 

486

线路忙(Busy Here)

 

5xx

 

服务器错误

Yes 

 

 504

服务器超时(Server Time-out)

 

6xx

 

全局错误

Yes 

 

 600

全忙(Busy Everywhere)

 

 



作者:菩提树下的杨过

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。