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. Centos 7内核3升级到4

    步骤 1:检查已安装的内核版本 让我们安装了一个发行版,它包含了一个特定版本的内核.为了展示当前系统中已安装的版本,我们可以: # uname -sr 下面的图片展示了在一台 CentOS 7 服务器 ...

  2. hdu 1704 Rank (floyd闭包)

    Rank Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 最新版的Chrome不能设置网页编码怎么解?

    添加一个Google插件https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlm ...

  4. Java 批量下载excel,并对excel赋值,压缩为zip文件(POI版)

    package com.neusoft.nda.servlet; import java.io.File;import java.io.FileInputStream;import java.io.F ...

  5. JavaScript基础知识(字符串的方法)

    字符串的方法 1.字符串: 在js中被单引号或双引号包起来的内容都是字符串: var t = "true"; console.log(typeof t);// "stri ...

  6. ML.NET 0.10特性简介

    IDataView被单独作为一个类库包 IDataView组件为表格式数据提供了非常高效的处理方式,尤其是用于机器学习和高级分析应用.它被设计为可以高效地处理高维数据和大型数据集.并且也适合处理属于更 ...

  7. java.net.UnknownHostException 异常处理

    修改hosts文件: 1.把机器名和ip写在下面 2.hosts文件生效   soure /etc/hosts

  8. SpringBoot-将servlet容器变成undertow测试tomcat吞吐量

    将Servlet容器变成Undertow 默认情况下,Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器 可以将 Web 服务器切换到 Undertow 来提高应用性能.U ...

  9. Jmeter学习之-从数据库取出数据并且校验数据是否准确

    https://www.cnblogs.com/wuyonghuan/p/7479582.html 应用场景:调用某个接口像数据库中插入数据,需要在接口调用完成后查看数据更新或插入的数据是否正确的时候 ...

  10. expect-调试模式的使用

    1.expect简介 Expect是一种TCL扩展性的语言,主要用于完成系统交互方面的功能,比如SSH.FTP等,这些程序都需要手工与它们进行互动,而使用Expect就可以模拟人手工互动的过程,是一种 ...