首页 > 其他分享 >SIP协议学习笔记

SIP协议学习笔记

时间:2023-02-07 18:25:35浏览次数:56  
标签:协议 SIP 请求 Route 笔记 Server RFC com

友情提示:初次接触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

相关文章

  • freeswitch笔记(9)-esl outbound中如何放音采集按键?
    关于这个功能,esl-client上给出的源码示例极具误导性,根本跑不起来,见: https://github.com/esl-client/esl-client/blob/master/src/test/java/OutboundTest.java 正确姿......
  • freeswitch笔记(8)-esl outbound 填坑笔记
    github上的esl-client已经N年未更新了,上面有一堆bug,记录一下: 一、内存泄露org.freeswitch.esl.client.transport.message.EslFrameDecoder这个类,使用了netty的ByteBuf......
  • freeswitch笔记(7)-放音控制
    来电时,播放音乐是一个很常用的功能,下面是一些相关的命令:一、单次播放playback1originateuser/1000 &playback(ivr/8000/ivr-welcome_to_freeswitch.wav)......
  • freeswitch笔记(6)-会议功能简介
    电话会议是一个常用功能,freeswitch当然支持,下面是基本用法:一、发起会议1conference test bgdialuser/1004上面的命令表示,发起1个名为test的会话,......
  • freeswitch笔记(5)-小型呼叫中心设计思路
    这一篇用esl实战一把,利用eslclient来实现一个小型呼叫中心的原型,先看看下面这张图: 企业通常会对外公布一个400之类的服务电话,当用户拨打这个电话时,实际上背后是一堆客......
  • freeswitch笔记(4)-esl inbound模式的重连及内存泄露问题
    eslinboundclient,内部有一个canSend()方法:123publicbooleancanSend(){    return channel!=null&&channel.isConnected()&&authenticated......
  • java_html笔记
    颜色color字体大小 1.数值+单位 2.关键字-px-em字体(可以写多个,但不是全都生效只生效存在的如果全都不存在则使用默认字体)font-family:"abccde",......
  • python笔记1
    1.python转义符\"输出等于“\n换行\r覆盖,后面覆盖前面 \b删除前面一个字节\t制表符:插入四个空格,但是会自动补齐\\两个斜杠表示一个斜杠r在前面写个r表示转义字符......
  • 《可能性的艺术》——读书笔记
    2023.2.3序言①米兰达警告:你有保持沉默的权利,但是你所说的每句话都将成为呈堂证供第一讲:政治比较的维度②智慧的本质就是对事物比例的公正判断2023.2.7第二讲:和......
  • 思源笔记用Python+quicker实现自动添加标题编号
    实现原理:通过Python访问笔记的源文件,将标题前面增加编号+tab键,在写回源文件为防止重复写入,每次编号前会清理之前编号清除,清理原理为将标题行用tab键分割,......