SIP基础协议总结

SIP协议是一个用于建立,更改和终止多媒体会话的应用层控制协议,大量借鉴了成熟的HTTP协议(文本格式编码,Request消息中的method等),采用基于文本的UTF-8编码方式,可以承载与UDP或者TCP协议之上(首选UDP)。和Diameter协议类似,SIP也是有一个基础协议和很多扩展协议,基础协议在RFC3261中定义,本文主要概括SIP基础协议的要点。

1.  基本概念:

·         Session:Session简单的说就是一次通话,从摘机拨号开始到最终的挂机之间所有的SIP消息都属于一个Session,它们具有相同的Call-Id。

·         Dialog:基于Peer-to-Peer,描述了两端的User Agents在一段时间内的关联。Dialog用Dialog Id来表示,Dialog Id是由三部分组成的:Call-Id,from中的tag,to中的tag。只有对Invite消息响应的的2xx 和 101-199 消息才能建立一个Dialog。100 Trying相应无法建立Dialog,因为100 Trying中的To属性没有tag值。

·         Transaction:一个Transction是有一个Request消息和一个或者多个临时或者最终应答消息构成的。如果对Invite的应答是200 OK,则接下来的ACK消息认为是另一个transaction。

 

2.  SIP网络实体:

·         UA(User Agent):和用户直接交互的SIP设备,可以是硬件的SIP电话也可以是电脑上具有SIP电话功能的软件等;发送SIP Request消息的UA即UAC(User Agent Client), 接受SIP Request消息的UA即UAS(User Agent Server), 一个UA通常既是UAC又是UAS。

·         Proxy Server:进行消息转发,负责把消息转发给最终用户或者另一个Proxy Server。

·         Redirect Server:和Diameter的Redirect Server类似,不进行消息转发,而是给消息发送方回复一个或者多个地址,建议发送方把消息发往这些地址。Redirect Server返回的地址并不一定就是最终用户的地址,也有可能是另一个Proxy Server的地址。

·         Registrars: 因为SIP需要支持用户的移动性,所以当用户改变位置后需要对新位置的终端进行注册,Registrars接受SIP用户注册,从而得知可以从何处找打当前用户。Registrars通常位于SIP Server(Proxy Server 或者Redirect Server)中。

·         Location Server:不是SIP实体,之所以说它不是SIP实体是因为Location Server上面不必运行SIP协议栈,SIP Server和 Location Server之间的通信方式也不是用SIP(比如用LDAP)。Location Server的作用是保存SIP用户位置数据(IP 或者Hostname),比如当一个SIP用户向SIP Server注册之后,SIP Server将该SIP用户位置信息上传到Location Server中,当SIP Server收到需要发送给该SIP用户的消息时,SIP Server再向Location Server询问该用户位置信息(IP 或者Hostname)。

 

3.  SIP消息分类:

SIP消息分为如下两类:

·         请求消息:UAC发给UAS的消息,包括INVITE、ACK、BYE、CANCEL、OPTION和REGISTER消息。

·         响应消息:UAS回应给UAC的消息,包括1xx、2xx、3xx、4xx、5xx、6xx响应消息,每类消息的具体含义如下表:

1xx

进展相应

临时相应

2xx

成功

最终相应

3xx

重定向错误

最终相应

4xx

客户端错误

最终相应

5xx

服务端错误

最终相应

6xx

全局错误

最终相应

4.  SIP消息格式:

SIP由于是采用文本格式编码,所以消息格式很简单,是由Message Header加可选的Message body构成,Message Header 从第二行开始每一行都由“Tag :Valued”格式组成,每一行描述一个属性。 头部的属性有很多,基本协议中定义了一部分,扩展协议也定义了相应的头部属性。如果消息中携带了Message body,则Message Header和Message body之间用一个空行分割开来;Message body通常有“Content-Type”和“Content-Length”属性来对Message body进行解释,例如:
Content-Type: application/sdp
Content-Length: 212

SIP消息也可以携带多个Message body,比如可以带上SDP信息和主叫方的照片,这样被叫就能看到主叫方的头像了。

SIP消息在经过Proxy的时候,Proxy只关心Message Header,而不会检查Message body,所以说Message body对Proxy是透明的。

5.  SDP(Session Description Protocol):

在SIP的Message body中最常见的就是SDP,这里概述一下SDP。Session Description Protocol (SDP) 在RFC 2327中被定义;SDP中携带了一些必要信息,以供用户可以加入一个多媒体会话,比如IP地址,端口号,会话的日期时间等;这有点儿类似电视台的节目单,有了节目单,我们就可以在指定的时间切换到指定的频道收看到预期的节目。SDP是单独定义的,和SIP没有必然的联系,SDP信息可以通过各种途径传输比如Email,Webpage等,SIP只是众多传输SDP方式中的一种而已。

1)  SDP语法:

SDP也是用文本格式描述的,一个SDP Description可以包含很多行,每一行的格式如下:
Type = Value
Type只用一个字母来表示;一个SDP Description通常有一个Session-level和多个Media-level信息组成;Session-level信息用来描述整个Session,每个Media-level信息用来描述一个特定的媒体流。Session-level总以”v=0”开头,Media-level总已”m=<media type> <port number> <transport protocol> <media formats>”开头,。下面是一个SDP Description的例子,该例子中包含了三个Media-level信息:
v=0
o=Bob 2890844526 2890842807 IN IP4 131.160.1.112
s=SIP seminar
i=A Seminar on the Session Initiation Protocol
u=http://www.cs.columbia.edu/sip
e=bob@university.edu
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000

该例中o描述该session的发起者是Bob以及他的IP地址;s描述该session的名字;i描述了该session的一般信息;u说明可以从这个URL中获取和该session相关的更多信息;e描述了该session联系人的email。C和t描述了什么时间从哪里可以接收到该Session的multicast。m描述了一个媒体流的端口号,传输协议,媒体格式等信息。a可以用来对SDP进行扩展,比如双方如果协商音频的音量,可以用下面的SDP描述:
m=audio 49170 RTP/AVP 0
a=volume:8
前提是双方都需要理解volume的含义,如果对方不理解volume,也不会出错,只是将其忽略。

2)  SDP描述中常见属性:

v

Protocol version

b

Bandwidth information

o

Owner of the session and session identifier

z

Time zone adjustments

s

Name of the session

k

Encryption key

i

Information about the session

a

Attribute lines

u

URL containing a description of the session

t

Time when the session is active

e

E-mail address to obtain information about the session

r

Times when the session will be repeated

p

Phone number to obtain information about the session

m

Media line

c

Connection information

i

Information about a media line

6.  SIP呼叫流程实例分析:

下图是一个完整的SIP呼叫消息流示意图,这里重点关注SIP消息流,下一篇文中将给出一个稍微复杂的例子,那个例子中将重点关注SIP消息的路由和SIP常见头部字段的含义。

Laura要与Bob通话,Laura拨打Bob的的Public URI:sip:Bob.Johnson@company.com,给Bob一个Invite消息,在Invite消息中携带了SDP,表明Laura期望在UDP端口20002上收到包含PCM voice编码的RTP数据包。Proxy收到这个Invite消息后转发给Bob,同时给Laura回送一个100 Trying消息(Trying消息是Hop-to-Hop的,不会被转发)。Bob收到Invite消息后开始振铃,返回180 Ringing消息给Laura,Laura侧会听到回铃音。

 

INVITE sip:Bob.Johnson@company.com SIP/2.0

Via: SIP/2.0/UDP workstation1000.university.com:5060

From: Laura Brown <sip:Laura.Brown@university.com>

To: Bob Johnson sip:Bob.Johnson@company.com

Call-ID: 12345678@workstation1000.university.com

CSeq: 1 INVITE

Contact: Laura Brown <sip:Laura@workstation1000.university.com>

Content-Type: application/sdp

Content-Length: 154

v=0

o=Laura 2891234526 2891234526 IN IP4 workstation1000.university.com

s=Let us talk for a while

c=IN IP4 138.85.27.10

t=0 0

m=audio 20002 RTP/AVP 0

 

当Bob摘机后,一个200 OK的最终应答消息会被返回给Laura,消息中携带了一个SDP,表明Bob可以在UDP端口41000上接受数据包。Laura收到200 OK后给Bob发送一个ACK消息,确认已经收到200 OK。此时双方进入通话。

 

SIP/2.0 200 OK

Via: SIP/2.0/UDP 131.160.1.110

Via: SIP/2.0/UDP workstation1000.university.com:5060

From: Laura Brown <sip:Laura.Brown@university.com>

To: Bob Johnson <sip:Bob.Johnson@company.com>;tag=314159

Call-ID: 12345678@workstation1000.university.com

CSeq: 1 INVITE

Contact: Bob Johnson <sip:Bob@131.160.1.112>

Content-Type: application/sdp

Content-Length: 154

v=0

o=Bob 2891234321 2891234321 IN IP4 131.160.1.112

s=Let us talk for a while

c=IN IP4 131.160.1.112

t=0 0

m=audio 41000 RTP/AVP 0

 

当通话结束时,Bob发送一个Bye消息给Laura,Laura随后回应200 OK给Bob,至此通话结束。

 

参考资料:

1.  “RFC 3261”- Section 4,Section 12,Section 17,Section 24;

2.  “SIP Demystified”- Chapter 4, Chapter 5;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么在安卓布局里设置滚动字体_Get新技能|如何在手机上设置文字版拼音?

首先明确一点&#xff1a;安卓手机里的汉字带上拼音&#xff0c;是需要安装拼音字体&#xff0c;而不是拼音输入法。大部分安卓手机里的汉字带上拼音&#xff0c;可按如下步骤操作&#xff1a;注&#xff1a;视频后小总结1.对于大部分现在的手机来说&#xff0c;已经提供了换字…

HTTP、TCP、UDP、Socket (转)

先来一个讲TCP、UDP和HTTP关系的1、TCP/IP是个协议组&#xff0c;可分为三个层次&#xff1a;网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此&#x…

Asterisk学习进阶

Asterisk学习进阶 介绍篇 抛开所有概念&#xff0c;首先从单词学起。估计很多人和我一样没有明白这个词是什么意思&#xff0c;或许猜测他还可能是一个组合词。其实它就是“*”&#xff0c;作为搞程序的我们看到这个东东想到的也许会是乘号&#xff0c;当然有另外一大帮人想到的…

windows 禁用ipv6服务_39.Dism++ Windows系统简洁优化

Dism的特点Dism无需任何Dism组件&#xff0c;即可兼容高低版本所有系统&#xff01;而微软Dism则需要3个版本。Dism是Dism的交集&#xff0c;提供完全的图形化操作&#xff0c;几乎支持Dism的所有功能以及大量Dism原本所不支持的功能。管理更新、驱动、功能、Appx、可选功能、服…

windows功能_有 20 多种功能的 Windows 原生日历替代软件

Win 10 出来这么久了&#xff0c;不知道还有多少在用 XP 或者 Win 7 的朋友呢&#xff1f;今天小美要推荐的软件&#xff0c;是专门针对 Win 10 的&#xff0c;没有升级系统的小伙伴可能就无法使用了~这是一款用来替换 Windows 10 任务栏原生时间日历的软件&#xff0c;名字叫「…

小白学数据分析-----留存率是什么?

篇外话 前段时间比较忙碌&#xff0c;小白系列也因此停了一段时间&#xff0c;这期间做了不少分析&#xff0c;发现和总结了不少经验&#xff0c;自己觉得还是很有用&#xff0c;不过倒都是一些基础的东西。最近很多人都在问一些基础术语和计算方式&#xff0c;我懂得不多&…

Asterisk 学习进阶 2

Asterisk 学习进阶-2 这儿只是把添加的用户配置列出来。 [830] typefriend ; Friends place calls and receive calls context830 ; Context for incoming calls from this user ;secretblahpoly hostdynamic ; This peer regi…

nfc reader智能解码程序_更关注健康的高性价比智能手表 华米Amazfit Pop体验

现如今市面上有着种类繁多的智能手表产品&#xff0c;在软硬件各方面的体验上&#xff0c;华米的智能手表绝对是走在前列的&#xff0c;近期华米又发布了全新的智能手表&#xff1a;Amazfit Pop&#xff0c;双十一售价299元&#xff0c;这是一款专为爱运动&#xff0c;追求实用…

poj 3009 Curling 2.0 (dfs的应用)

http://poj.org/problem?id3009 &#xff08;1&#xff09;这是一个用球撞石头的游戏&#xff0c;撞到石头&#xff0c;石碎球停。在规定的10次抛球机会下&#xff0c;若求移动到终点就赢&#xff0c;否则算输了&#xff08;出界直接算输&#xff09;。 &#xff08;2&#xf…

Asterisk学习进阶-3

配置就先说那么一些&#xff0c;其他也都是类似的配置&#xff0c;只是熟练程度问题了&#xff0c;原理相通&#xff0c;接下来就不在赘述功能配置&#xff0c;我们得花些精力来分析功能模块以及他们之间的相互配合问题&#xff0c;因为自己这些东西看的时间也不久&#xff0c;…

移动app测试的多样性_快速搞定APP移动端自动化测试

1. 何为数据驱动什么是参数化&#xff1f;什么又是数据驱动&#xff1f;经常有人会搞不明白他们的关系&#xff0c;浅谈一下个人的理解&#xff0c;先来看两个测试中最常见的场景&#xff1a;登录&#xff1a;不同的用户名&#xff0c;不同的密码&#xff0c;不同的组合都需要做…

ui自动化测试框架_浅谈前端(UI)自动化测试

作为一名测试开发从业者&#xff0c;自动化测试好像是绕不开的话题...。结合最近接触到的一些测开应聘同学聊到关于前端自动化测试及自己的理解&#xff0c;分享一下自己对UI自动化测试的认识&#xff0c;大概如下。测试分层的自动化测试思想自动化测试分层思想所倡导的是对系统…

【转发】响应式Web设计?怎样进行?

什么是响应式Web设计&#xff1f;怎样进行&#xff1f;眼下&#xff0c;几乎每个新客户都希望他们的网站可以有专门的移动设备版本。最完美的情况呐&#xff0c;就是为iPhone、iPad、黑莓、Kindle…各自打造一款——页面分辨率还必须兼容任何设备。谁知道未来5年内我们还需要为…

cad坐标归零lisp_批量除一个数的lisp,请高手改成保留成设置小数位置。

我有一个在cad里批量除以一个数的LISP。其中《(setq newr (rtos (/ (atof old0) s0) 2 1))》的1就是决定小数点后保留1位的。请高手改一下&#xff0c;能否增加语句&#xff0c;能在cad里选择。现在&#xff0c;我是修改以后再加载&#xff0c;比较麻烦。lisp见下文。(加载命令…

基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能

说明&#xff1a; 本文档探讨基于Asterisk如何实现VoIP的一些基本功能&#xff0c;包括基本呼叫功能的方案选取、主叫号码透传、如何编写AsteriskAGI程序、Radius认证计费模块等。 本文档VoIP软终端使用X-Lite&#xff0c;其它终端均可以接入测试。 文章内容仅供参考,转载请注…

excel查重_发票查重工具,不止查重这么简单,你还可以体验这些新玩法

电子发票报销是目前所有行业的会计都要面对的一项重要工作&#xff0c;而目前电子发票报销的普遍方式都是打印报销&#xff0c;这样一来&#xff0c;会计就不得不面对企业员工将电子发票重复打印报销和篡改报销的风险&#xff0c;而其中&#xff0c;尤其以重复打印报销是会计不…

Android培训翻译_使你的程序感知位置

Dependencies and prerequisites Android 1.0 or higher (2.3 for the sample app)You should also read Location and Maps 位置和地图Try it out 下载示例代码(LocationAware.zip) Users bring their mobile devices with them almost everywhere. One of the unique feature…

python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)

在PDMS中使用python直接生成管口方位图(开源分享第三集)距离上一次发推送已有5个月之久&#xff0c;上周立了冬&#xff0c;这二季我为五斗米折了腰&#xff0c;最近才缓过气来。令我没想到的是&#xff0c;大家竟然对这个主题这么有兴趣&#xff0c;有关注者几次在私信询问我什…

基于Asterisk的VoIP开发指南(2)——Asterisk AGI程序编写指南

5. Asterisk AGI程序编写指南 5.1概述 很多时候&#xff0c;我们需要在拨号方案中做某些业务逻辑的判断或者外部数据库的查询&#xff0c;根据具体地需要&#xff0c;有几种做法&#xff1a; 1&#xff0e;使用Asterisk的通道变量、Goto函数、Gotoif函数等实现某些简单跳转…

win7关闭休眠_【科普】笔记本电脑,待机/睡眠/休眠有啥区别?(ACPI SPM S0-S5)...

本文聊聊笔记本电脑话题下&#xff0c;经常有人问到的内容——关机 睡眠 休眠 这三个选项有什么区别&#xff1f;电脑可以不关机只合上盖子吗&#xff1f;花了俩小时&#xff0c;求个赞&#xff0c;希望有专栏能收这篇内容~先说答案&#xff1a;快速唤醒&#xff1a;开盖/操作鼠…