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跟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)  

 

 
参考文章:

posted @ 2020-12-03 23:22  菩提树下的杨过  阅读(2397)  评论(0编辑  收藏  举报