前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SIP协议学习笔记

SIP协议学习笔记

作者头像
菩提树下的杨过
发布2020-12-07 15:39:50
2K0
发布2020-12-07 15:39:50
举报

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

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

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

INVITE的请求示例:

代码语言:javascript
复制
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的响应示例:

代码语言:javascript
复制
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跟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请求方法列表及响应码含义

请求名称

含义

参考协议

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)

参考文章:

1. https://www.ibm.com/developerworks/cn/opensource/os-cn-sip-intro/index.html

2. https://en.wikipedia.org/wiki/Session_Initiation_Protocol#Requests

3. https://www.jianshu.com/p/bb21032b3bb2

4. https://baike.baidu.com/item/SIP/33921?fromtitle=SIP%E5%8D%8F%E8%AE%AE&fromid=1179615&fr=aladdin

5. http://www.faqs.org/rfcs/rfc3261.html

6. https://www.cnblogs.com/4rock/archive/2007/04/19/2380177.html

7. https://hub.packtpub.com/how-to-attack-an-infrastructure-using-voip-exploitation-tutorial/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-12-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档