友情提示:初次接触SIP(Session Initiation Protocol)协议的同学,强烈建议先将文末参考文章中的链接,先看至少二遍! 一、SIP协议是一个文本协议 言外之意:不同于二进制难以阅读,SIP是仅凭肉眼就能看懂大意的协议。来一个示例: INVITE的请求示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
INIVTE sip:[email protected]
Via: SIP /2 .0 /UDP [4444::2:3:4:5];branch=8ulse1
Route:<sip:[5555::a:b:c:d];lr>
Route:<sip:[email protected];lr>
Contact:<sip:[4444::2:3:4:5]:1537>
From:<sip: [email protected]>;tag=6e87wa9
To:<sip: [email protected]>
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的响应示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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:[email protected];lr>
Contact:<sip:[4444:5:6:7:8]:1078>
From:<sip: [email protected]>;tag=e42q14d
To:<sip: [email protected]>;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/ 标签:协议,SIP,请求,Route,笔记,Server,RFC,com From: https://www.cnblogs.com/kn-zheng/p/17099401.html