专栏首页通信SIP协议笔记
原创

SIP协议笔记

一、协议介绍

SIP(SessionInitiationProtocol,会话发起协议)是由IETF提出的IP电话信令协议.它的主要目的是为了解决IP网中的信令控制,以及同软交换的通信,从而构成下一代的增值业务平台,对电信、银行、金融等行业提供更好的增值业务。

SIP协议是一种基于文本的类似于HTTP的协议,报文结构与HTTP也一样,即包括请求行,头域字段,body。报文结构如下:

start-line
message-header
CRLF
[ message-body ]

1、 start-line

分请求行和状态行。

请求行由请求类型、请求目的地址和协议版本号构成。

请求类型有:INVITE,ACK,OPTIONS,BYE,CANCEL和REGISTER。

状态行是被叫方向主叫方返回的状态信息,如1xx,2xx,3xx,4xx,5xx,6xx。

请求类型:

INVITE:用于发起呼叫请求。INVITE消息包括消息头和数据区两部分。INVITE 消息头包含主、被呼叫的地址,呼叫主题和呼叫优先级等信息。数据区则是关于会话媒体的信息,可由会话描述协议SDP 来实现。

BYE:当一个用户决定中止会话时,可以使用BYE 来结束会话。

OPTIONS:用于询问被叫端的能力信息,但OPTIONS 本身并不能发起呼叫。

ACK:对已收到的消息进行确认应答。

REGISTER:用于用户向SIP服务器传送位置信息或地址信息。

CANCEL:取消当前的请求,但它并不能中止已经建立的连接。

状态类型:

1xx:临时消息:表示表示请求消息已经收到,后面将继续处理该请求。

2xx:成功消息:表示请求已经被成功的理解、接受或执行。

3xx:重定向消息:表示为了完成请求还需采取更进一步的动作。

4xx:客户机错误:表示该请求含有语法错误或在这个服务器上不能被满足。

5xx:服务器错误:表示该服务器不能处理一个明显有效的请求。

6xx:全局性故障:表示该请求在任何服务器上都不能被实现。

2、message-header

常见消息头说明:

TO:格式:TO:显示名<接收者URI>;tag=n;显示名和tag可选。接收者URI是SIP网络种唯一标识接收终端的标识符。例:TO:DENNY<SIP:caller@WORK.COM>;TAG=11111 或 TO:sip:caller@work.com

FROM: 消息头FROM给出标识会话发起者的URI。比如:FROM:sip:caller@work.com;tag=hyh8。tag是必需的。

CALL-ID: 用于全局唯一标识正在建立的会话的标识符。 随机数加UAC标识信息。

CSeq: 用于标识同一会话中不同事务的序号,通常由一个用作序号的整型数和消息类型组成。整个会话操作过程由不同的事务组成,每一事务所涉及的消息的CSeq序号必须相同。

Via:为响应消息提供传输路径,当请求消息经过每一跳节点时,每一跳节点都把自身的IP地址信息放入顶层Via中。响应消息则沿着请求消息记录下的传输路径反向传输,首先移走指明自身IP地址信息的顶层消息头

3、 message-body

SIP协议一个最主要的作用就是协商媒体信息。媒体信息通过message-body携带,基于SDP会话描述协议。

对于PSTN语音编码格式,主要有G711A、G711U、G729等。

SIP协商中主叫方会带上自己支持的所有音频编码列表到被叫方,被叫方一般在回铃时从主叫支持的类型中选出一种或多种自己支持的编码,返回主叫后,双人按顺序选出第一个支持的编码。

二、流程举例

sip注册和呼叫流程

(1) UAC发起register请求到UAS

(2) UAS如果需要验证账号信息,响应一个401 Unauthorized,其中包含用于密码加密的随机字符串

(3) UAC收到401后携带自己的账号信息(其中密码经过md5加密)重新发起一个register请求

(4) 服务器校验通过后返回200OK

(5) UAC发起invite请求,其中携带了主被叫等信息(From、To头域等)

(6) UAS一般会马上响应100trying告诉UAC正在尝试呼叫被叫

(7) 被叫响应后UAS返回180到UAC,其中可能携带彩铃媒体信息到UAC

(8) 被叫接听后返回200给UAC,其中可能携带会话媒体信息到UAC

(9) UAC返回ack到UAS确认收到200

三、重要头域解释

对于UAC或UAS来说,Sip协议是一种有状态的协议,同一个会话的前后相关的信令必须送到相同的UAC或UAS。Sip协议的via、record-route头域正是用于用来指示路由的字段。

其中几个相关字段说明如下:

via用于指示response返回的路径,不会影响后续request。

record-route用于指示同一callid后续请求的路径。

rport是接收方收到via为内网的请求时,加上 自己看到的发送方的ip(received)和端口(rport),用于NAT。

四、Sip测试工具

SIPp是sip协议栈的一个免费开源的测试工具, 它模拟了一些基本的uac和uas功能,并建立和释放多个调用的INVITE和BYE的方法,可以读取xml和csv文件生成注册或呼叫流程,可以动态显示统计信息和动态调整呼叫速率。

模拟UAS:./sipp -sn uas -i 192.168.1.249 -p 5077 //监听5077端口

模拟UAC:./sipp -sn uac 192.168.1.249:5077 -i 192.168.1.249 -p 5078 -r 50 -rp 1000 //每1000ms发送50个呼叫

SIPp还支持使用脚本文件来自定义模拟的UAC或UAS的行为,具体可参考官网文档:http://sipp.sourceforge.net/index.html

五、协议开发

常见协议栈有:

1、pjsip:http://www.pjsip.org/

2、sofia:http://sofia-sip.sourceforge.net/

3、osip:https://www.gnu.org/software/osip/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python爬虫的实践技巧

    如今已然是大数据时代,数据正在驱动着业务开发,驱动着运营手段,有了数据的支撑可以对用户进行用户画像,个性化定制,数据可以指明方案设计和决策优化方向,所以互联网产...

    一墨编程学习
  • p2p在视频下载等大文件分发领域有哪些优势呢?

    P2P分发加速技​‌‌术,可实现加速下载和节省带宽的作用,非常适合网游、视频、大文件等资源分发领域,尤其是在端游领域,可以用于定制属于自己的游戏下载器launc...

    点量小崔
  • 知道这几点,用微信小程序留住海量客户不是问题

    什么是小程序? 小程序就是依托微信、功能强大的一种应用,它不像APP单独存在,占用空间内存;不浪费流量,需要安装下载。说白了就是微信的一个附属功能,完全依靠微信...

    企鹅号小编
  • [转]Python 守护进程

    守护进程:通常被定义为一个后台进程,而且它不属于任何一个终端会话(terminal session)。许多系统服务由守护程序实施;如网络服务,打印等。  下面...

    py3study
  • TypeLoadException: 找不到 Windows 运行时类型“Xaml.Controls.Binding

    奇怪的问题,我以为是我不小心添加了什么标签导致的,后来发现。。。坑爹,把项目名字改一下,然后移除掉,接着再加载一下就可以了。。。。。。。崩溃了,,,,事实证明=...

    逸鹏
  • Django Rest Framework 解析器(下)

    ① 仅处理请求头 content-type 为 application/json 的请求体

    小团子
  • 为什么说美团点评合并之后百度成O2O最大变量?

    这几天朋友圈被美团和大众点评合并的事刷了个遍,大多文章评论都无法避开第三者:百度。作为O2O市场原来的老三,百度自然会成为被关注的焦点,不少观点认为百度会承受更...

    罗超频道
  • 用C++代码轻松实现:手机发短信特效,很实用的系统软件

    个比较早的C++发送手机短信的程序,程序将调用dllforvc.dll程序,使用前请设置好相关参数:端口号、波特率、机器号码、授权号码、发送短信的接收方号码、发...

    诸葛青云
  • 中国企业O2O化服务模式研究报告(66PPT)

    大数据文摘
  • 二战时图灵机破译的Enigma密码,现在AI仅需13分钟便可破译

    来源:bt.com 作者:Laura Stevens 编译:Cecilia 【新智元导读】Enigma在二战时一直被当做是不可破译的密码,英国花费大量时间精力方...

    新智元

扫码关注云+社区

领取腾讯云代金券