sip协议是由IETF提出的IP电话信令协议,主要目的是为了解决ip网络中的信令控制,以及同软交换通信。

sip协议类似http协议:

报文结构:

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:对已收到的消息进行确认应答。

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

二:举例:

(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/

SIP协议简单介绍的更多相关文章

  1. TCP/IP协议简单介绍

    TCP/IP协议族总共分为四层,分别为:          应用层:应用层协议有Telnet(远程登入协议).FTP(文件传输协议).SMTP(简单邮件传送协议).SNMP(简单网络管理协议).HTT ...

  2. 【网络协议】TCP协议简单介绍

        本文仅仅是对TCP协议做个简要的介绍.     TCP协议,即传输控制协议.与UDP协议同处于传输层,相同使用相同的网络层,但TCP提供了一种可靠的.面向连接的传输数据服务,它会在两个使用TC ...

  3. arp协议简单介绍

    1. 什么是ARP? ARP (Address Resolution Protocol) 是个地址解析协议.最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供 ...

  4. iOS蓝牙4.0协议简单介绍

    iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...

  5. WSDL协议简单介绍

    WSDL – WebService Description Language – Web服务描述语言 通过XML形式说明服务在什么地方-地址. 通过XML形式说明服务提供什么样的方法 – 如何调用. ...

  6. 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍

    **************************************************************************************************** ...

  7. HTTP协议系列(3)---包括WebSocket简单介绍

    一.HTTPS     HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼? 1.通信使用的明文(不加密),内容 ...

  8. HTTP协议的简单介绍

    前传:HTTP协议的演变过程 HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是 ...

  9. iOS开发拓展篇-XMPP简单介绍

    iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...

随机推荐

  1. 11.2vue(3)

    2018-11-2 19:00:33 明天周末,又可以愉快整理博客啦! 越努力,越幸运!永远不要高估自己!!! 接着学vue 感觉好强大! 用这个组件的好处就是,不需要手动刷新,文件只要把保存就自动刷 ...

  2. I - The lazy programmer 贪心+优先队列

    来源poj2970 A new web-design studio, called SMART (Simply Masters of ART), employs two people. The fir ...

  3. mobx 添加 isEmpty 装饰器

    避免 obj.xxx && obj.xxx.length 这样的写法 store import * as u from "lodash"; function isE ...

  4. thymeleaf(一)

    (一)Thymeleaf 是个什么?      简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下 ...

  5. ajax里post 设置请求头的编码格式

    我们常用的ajax形式就是post和get.post需要设置请求头,那么问题来了: 首先,为什么get不需要设置编码格式? 其次:不设置post请求头编码格式可以吗? 还有:常用的请求头编码格式有哪些 ...

  6. django 初始命令

    1.安装django pip3 install django 2.创建一个Django对象 django-admin.py startproject 项目名称 django-admin.py star ...

  7. HTML调用PC摄像头【申明:来源于网络】

    HTML调用PC摄像头[申明:来源于网络] ---- 地址:http://www.oschina.net/code/snippet_2440934_55195 <!DOCTYPE html> ...

  8. HDU 1010生成树

    求起点到终点的最短权值和

  9. python------接口(get请求、post请求), 图片、歌曲下载,网页返回,上传文件

    接口(get请求.post请求 --json), 图片.歌曲下载(context),网页返回(text),上传文件   import requests######################### ...

  10. Django之中间件&信号&缓存&form上传

    中间件 1.中间件是什么? 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用, ...