sip协议原理分析及总结.docx
- 文档编号:28153669
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:18
- 大小:162.38KB
sip协议原理分析及总结.docx
《sip协议原理分析及总结.docx》由会员分享,可在线阅读,更多相关《sip协议原理分析及总结.docx(18页珍藏版)》请在冰豆网上搜索。
sip协议原理分析及总结
SIP协议学习总结
1、SIP协议定义
SIP(SessionInitiationProtocol,即初始会话协议)是IETF提出的基于文本编码的IP电话/多媒体会议协议。
用于建立、修改并终止多媒体会话。
SIP协议可用于发起会话,也可以用于邀请成员加入已经用其它方式建立的会话。
多媒体会话可以是点到点的话音通信或视频通信,也可以是多点参与的话音或视频会议等。
SIP协议透明地支持名字映射和重定向服务,便于实现ISDN,智能网以及个人移动业务。
SIP协议可以用多点控制单元(MCU)或全互连的方式代替组播发起多方呼叫。
与PSTN相连的IP电话网关也可以用SIP协议来建立普通电话用户之间的呼叫。
SIP协议在IETF多媒体数据及控制体系协议栈结构的位置
SIP协议支持多媒体通信的五个方面:
◆用户定位:
确定用于通信的终端系统;
◆用户能力:
确定通信媒体和媒体的使用参数;
◆用户有效性:
确定被叫加入通信的意愿;
◆会话建立:
建立主叫和被叫的呼叫参数;
◆会话管理:
包括呼叫转移和呼叫终止;
SIP协议的结构
SIP是一个分层的协议,也就是说SIP协议由一组相当无关的处理层次组成,
这些层次之间只有松散的关系。
SIP最底层的是它的语法和编码层。
编码方式是采用扩展的Backus-Naur
Formgrammar(BNF范式)。
第二层是传输层。
它定义了一个客户端发送请求和接收应答的方式,以及一
个服务器接收请求和发送应答的方式。
所有的SIP要素都包含一个通讯层。
第三层是事务层。
事务是SIP的基本组成部分。
一个事务是UAC向UAS发送的一个请求以及UAS向UAC发送的一系列应答。
事务层处理应用服务层的重发,匹配请求的应答,以及应用服务层的超时。
任何一个用户代理客户端完成的事情都是由一组事务构成的。
用户代理与有状态的代理服务器都包含一个事务层,无状态的代理服务器并不包含事务层。
事务层包含一个客户元素(可以认为是一个客户事务)和一个服务器元素(可以认为是一个服务器事务),他们都可以用一个有限状态机来处理特定的请求。
在事务层之上是事务用户(TransactionUserTU)。
每一个SIP实体,除了
无状态代理,都是一个事务用户。
当一个TU发出一个请求,它首先创建一个客户事务实例并将目标IP地址、端口号、以及发送请求的设备信息一起发送。
事务用户可以创建客户事务,也可以取消客户事务。
当客户取消一个事务,它请求服务器终止正在处理的事务,并且回滚状态到该事务开始前的状态,并且产生指定的该事务的错误报告。
这是由CANCEL请求完成的,这个请求有自己的事务,并且包含一个被取消的事务。
2、SIP协议主要概念模型
2.1实体模型概述
SIP协议模型定义了UserAgent(用户代理)和Server(服务器)等两类主要实体。
SIP协议把UserAgent(即UA)分为两个部分:
UserAgentClient和UserAgentServer。
呼叫方(称UserAgentClient)发出邀请(或呼叫),被叫方(称UserAgentServer)接受或拒绝邀请(或呼叫)。
分组终端设备、媒体网关/媒体设备通常是包括UserAgentClient和UserAgentServer在内的UserAgent。
另外,下面所说的ProxyServer也要实现UserAgent功能。
SIP协议定义了ProxyServer、RedirectServer和RegisterServer等三类主要Server。
RegisterServer:
主要用于登记分组终端的当前位置和位置服务的原始数据。
ProxyServer:
作为UserAgentClient和UserAgentServer间的中间媒体,它转发UserAgentClient来的的邀请,在转发之前,根据被叫标识请求位置服务器获得被叫的可能位置,然后分别向它们发出邀请;
RedirectServer:
接受UserAgentClient来的邀请,根据被叫标识请求位置服务器获得被叫的可能位置,把这些信息返回给邀请的发起者(UserAgentClient),和ProxyServer的不同之处就在于它不转发邀请,邀请由主叫终端自己完成。
Sip协议基本网络模型,如下图所示:
2.2SIP协议相关概念
呼叫(Call):
一个呼叫是由一个会议中被同一个发起者邀请加入的所有成员组成的。
一个SIP呼叫用全局唯一呼叫标识符(CALL_ID)来识别。
因此,如果一个用户被不同的人邀请参加同一个多点会议,每个邀请都有一个唯一的呼叫。
一个点对点因特网电话交谈也被认为是一个SIP呼叫。
在一个基于多点控制单元(MCU)的电话交谈节目中,每个参与者都用一个独立的呼叫与MCU相连。
呼叫支路(Callleg):
一个呼叫支路由Call-ID、To以及From之中的addr-spec和tag共同标识。
只有addr-spec中的user和hostport部分有意义。
在同一个Call-ID中,从A到B的请求与从B到A的请求都属于同一个呼叫支路。
呼叫支路也可以说是一次呼叫里消息经过的路径。
会议(Conference):
一个多媒体会话,由公共的会话描述来标识。
一个会议可由零个或多个成员组成,可以是多点会议,全互连会议,点对点会议,或者是它们的组合。
可以用任意数目的呼叫来建立一个会议。
发起者、主叫(Initiator,Caller):
发起会议邀请的一方。
注意,发起者不一定是会议的建立者。
被邀请者、被叫(Invitee,Callee):
被主叫方邀请参加会话的一方。
邀请(Invitation):
要求用户加入会话的请求。
一个成功的SIP邀请包括2个事务:
一个INVITE请求,后面跟一个ACK请求。
同构请求/响应(Isomorphicrequestorresponse):
两个含有相同Call-ID、To、From和CSeq头域的请求/响应。
此外,同构请求还必须含有相同的Rquest-URI。
并行查询(Parallelsearch):
在一个并行查询中,代理收到请求后向可能的被叫用户发出多个请求。
并行查询在发出请求时并不等待以前所发请求的响应。
最终响应(Finalresponse):
用于结束SIP事务的响应,与临时响应相对。
所有的2XX,3XX,4XX,5XX和6XX响应都是最终响应。
临时响应(Provisionalresponse):
服务器用来表示工作进展,并不结束SIP事务的一种响应。
编码为1XX的响应是临时响应,其他响应都是最终响应。
会话(Session):
根据SDP(会话描述协议)规范的定义:
“多媒体会话是由多媒体发送者,接收者以及从发送者到接收者的数据流组成的集合。
SIPTransaction(SIP事务):
一个SIP事务是发生在客户和服务器之间的,包括从客户向服务器发出的第一个请求直到服务器发给客户一个最终响应这期间所有的消息。
事务是由一个呼叫支路(Callleg)中的Cseq顺序号来标识的。
一个ACK请求与对应的INVITE请求拥有相同的CSeq,构成自己的事务;
B2BUA(背靠背用户代理):
B2BUA是接收请求并作为用户代理服务器的一个逻辑实体。
为了确定应该如何响应请求,它作为一个用户代理客户(UAC)发出请求。
与代理服务器不同的是它维护对话状态并必须参与所有在已建立的对话上所发的请求。
由于它是一个串联UAC和UAS,对于它的行为无须作显式定义。
Address-of-Record(记录地址):
一个address-of-record(AOR)是一个SIP或者SIPSURI它指向了一个具有定位服务的主机,这个主机可以把URI映射成为用户真正物理位置的URI。
通常情况下,定位服务器是通过登记服务来建立的。
一个AOR经常被认为是一个用户的”公共地址”。
Message(消息):
SIP元素之间传送的协议数据就是消息。
SIP消息既可以是请求也可以是应答。
Method(方法):
方法是在服务器请求处理的主要功能。
方法是请求消息自身携带的。
典型的方法就是INVITE和BYE。
Request:
(请求):
一个由客户端发到服务端的SIP信息,用于执行特定的功能。
Response(应答):
一个由服务端发到客户端的SIP信息。
用来标志从客户端发往服务端的请求处理的情况。
Ringback(回铃音):
回铃音是一个信号音。
是给呼叫方的一个信号表示被叫方正在振铃(Ringing)。
RouteSet(路由集):
路由集合是一个顺序的SIP或者SIPSURI。
这些URI描述了传递一个请求所必须经历的代理列表。
一个路由集可以是自适应的,因为包头中包含了Record-Route(记录路由),也可以是依赖配置得到的。
3、SIP协议主要消息
3.1SIP消息分类
SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切。
SIP协议将Server和UserAgent之间的通讯的消息分为两类:
请求消息和响应消息。
请求消息:
客户端为了激活特定操作而发给服务器的SIP消息,包括INVITE、ACK、BYE、CANCEL、OPTION和UPDATE消息。
响应消息:
服务器向客户反馈对应请求的处理结果的SIP消息,包括1xx、2xx、3xx、4xx、5xx、6xx响应
3.2SIP消息结构
请求消息和响应消息都包括SIP消息头字段和SIP消息体字段。
SIP消息头主要用来指明本消息是有由谁发起和由谁接受,经过多少跳转等基本信息;SIP消息体主要用来描述本次会话具体实现方式。
3.2.1SIP消息头类型
在SIP消息中,有四种类型的头字段:
通用头字段
请求头字段
响应头请求
实体头字段
SIP消息头的通用结构
<头字段的名字>:
<字段值>
层次和在消息头中所有行的层次相同
对于客户机/服务器都不能理解的头字段仅仅是被忽略,而不移除.
常见的头字段如下表
GeneralHeader
EntityHeader
RequestHeader
ResponseHeader
Accept
Content-Encoding
Authorization
Allow
Accept-Encoding
Content-Length
Contact
Proxy-Authenticate
CallID
Conten-Type
Hide
Retry-After
Contact
Max-Forwards
Server
CommandSequence
Organization
Unsupported
Encryption
Proxy-Authorization
WWW-Authenticate
Expires
Proxy-Require
From
Route
Record-Route
Require
Timestamp
Response-Key
To
Subject
Via
UserAgents
Date
Priority
Waming
一些重要的通用头
◆Call-Id:
统一独特的呼叫标识
◆Cseq:
请求命令顺序号
◆Via:
用于记录一个请求传送的路径
◆From:
存在于每个SIP消息中,包含请求发起者的显示名和地址。
SIP响应的From域是请求中From域的拷贝。
◆To:
存在于每个SIP消息中,表示一个请求的预期目的地。
SIP响应中的To域是请求中To域的拷贝。
◆Max-Forwards:
字段表示request到达UAS的跳数的限制,是一个整数,经过每一跳时减去一。
◆Contact:
为后续请求提供了访问特定UA实例的联系方法,即SIP或者SIPSURI。
◆Content-Type:
描述消息体内容的媒体类型。
如:
Content-Type:
application/sdp。
◆Content-Length:
标识了消息体的大小,采用十进制数字表示。
呼叫和呼叫者的标识头
Subject:
呼叫,短消息主题
Organization:
主叫和被叫,代理服务器可能重填
Date:
呼叫的日期
Server:
处理请求消息的服务器消息
User-Agent:
发起请求消息的用户代理服务器信息
Accept-Language:
优选语言
Priority:
呼叫优先级(普通,紧急,…)
In-Reply-To:
与早期呼叫的关联
内容描述头
Content-Disposition:
消息解析的方式
Content-Encoding:
压缩(gzip)
Content-language:
语言选择
Content-length:
消息体长度
Content-Type:
媒体类型(application/sdp)
能力头
Allow:
Request-URI支持的方法
Accept:
响应消息接受的媒体类型,如application/sdp,text/html
Accept-Encoding:
响应消息接受的压缩方式
Accept-Language:
响应消息接受的语言
Supported:
服务器或代理支持的特性(如100rel)
Require:
服务器要求支持的特性(100rel)
Unsupported:
代理不支持的特性
3.2.2SIP消息体
SIP消息体部分则是通过另外一种协议来描述的,就是SDP协议。
SDP协议也是一种基于文本的协议,英文全称为SessionDescriptionProtocol,称为会话描述协议,它是在RFC2327中定义的。
SDP描述的信息封装在传送协议中发送,典型的会话传送协议包括:
会话公告协议(SAP)、SIP、RTSP、HTTP和使用MIME(MultipurposeInternetMailExtensions)的E-mail。
采用SIP传送时,SDP主要用来描述参与SIP会话通信交流各方的媒体资源信息,主要包括以下几类信息:
会话名称和目的;
◆会话激活的时间区段;
◆构成会话的媒体;
◆接收这些媒体所需的信息(地址、端口、编码格式等)
◆会话所用的带宽信息(可选);
◆会话负责人的联系信息(可选);
媒体信息的具体内容包括:
◆媒体类型(视频、音频等);
◆传送协议(RTP/UDP等);
◆媒体格式(H.261视频、MPEG视频等);
◆媒体地址和端口;
时间信息的具体内容包括:
◆会话的开始和结束时间,可用多组时间段;
◆对于每个时间段,可以指定重复时间;
SDP协议描述SIP消息包体是采用文本形式的UTF-8编码的IS010646字符集。
SDP会话描述由许多文本行组成,每个文本行的格式均为:
其中,
“=”符号两侧不允许有空格。
会话描述包括两个部分:
会话级描述和媒体级描述。
会话级描述部分给出适用于整个会话和所有媒体流的描述信息,它以“v=”文本行开始。
媒体级描述部分给出只适用于该媒体流的信息,它以“m=”文本行开始。
一个会话描述可以包含零个或多个媒体级描述。
如果在媒体级描述中没有重新定义,会话级描述给定的值就是所有媒体的缺省值。
会话描述的一般格式为:
v=协议版本
o=会话拥有者/创建者和会话标识符
s=会话名称
i=(可选)会话信息
u=(可选)URI描述
e=(可选)Email地址
p=(可选)电话号码
c=(可选)连接信息
b=(任选)带宽信息
一个或多个时间描述
z=(可选)时区调整
k=(可选)密钥
a=(可选)零个或者多个会话属性行
零个或多个媒体描述
注意:
各类文本行必须严格按上述次序排列,以便简化语法分析和检错。
其中,时间描述格式为:
t=会话激活的时间区段
r=(可选)零个或多个重复时间
媒体描述的格式为:
m=媒体名和传送地址
i=(可选)媒体名称
c=(可选)连接信息:
如果已含于会话级描述则为任选项
b=(可选)带宽信息
k=(可选)加密密钥
a=(可选)零个或多个媒体属性行
SDP定义的类型(type)字母很少。
如果SDP语法分析器不能识别描述中的某一类型
字母,则应将整个描述丢弃。
属性机制(“a=”行)供SDP扩展其应用或媒体范围,可
根据应用、媒体或会话的需要增加属性值。
如果按收方不理解某属性值,则予以丢弃。
SDP参数实例说明
▪V=0:
指出SDP协议的版本
▪O=wangyu28908445262890842807INIP4126.16.64.4
用户名会话ID版本网络类型地址类型地址
▪S=SDPSeminar
会话名
▪I=ASeminaronthesessiondescriptionprotocol
会话描述
▪U=http:
//www.alcatel-
关于本会议的附加信息指针
▪e=*************************.cn
邮件地址
▪c=INIP4224.2.17.12/127
网络类型地址类型连接的地址
▪t=28733974962873404696
开始时间终止时间
a=recvonly
本会话仅仅是个receive会话过程
▪m=audio49170RTP/AVP0
▪a=rtpmap:
0PCMU/8000
▪描述其音频编码格式为PCMU采样频率为8000
▪a=rtpmap:
8PCMA/8000
▪a=sendonly
3.3消息格式
3.3.1请求消息格式
SIP请求消息的格式,由SIP消息头和一组参数行组成,通过换行符区分命令行和每一条参数行。
注意:
参数行的顺序不是固定的。
SIP请求消息实例:
INVITEsip:
**********.0.1:
5060;User=phoneSIP/2.0
命令消息对端sip实体的URI端口用户名sip版本号
Call-ID:
***********************.0.1(统一呼叫标识)
Via:
SIP/2.0/UDP127.0.0.1:
5061(响应路由)
From:
************.0.1: 5061;User=phone>;tag=29005358336B534F610A000(请求源地址,带有tag标志) To: **********.0.1: 5060;User=phone>(目的地址) Contact: sip: ************.0.1: 5061(后续联系的地址和端口号,INVITE消息必须) CSeq: 1INVITE(请求命令顺序号) Max-Forwards: 70(最大经过sip服务器跳跃数) Content-Type: application/SDP(媒体类型) Content-Length: 168(消息体大小) v=0 o=UserA28908445262890844526INIP4 s=SessionSDP c=INIP4192.0.0.1 t=00 m=audio49172RTP/AVP08 a=rtpmap: 0PCMU/8000 a=rtpmap: 8PCMA/8000 a=sendonly 3.3.2响应消息格式 SIP响应消息的格式,由SIP消息头和一组参数行组成,通过换行符区分命令行和每一条参数行。 SIP响应消息实例: SIP/2.0200OK(200OK消息SIP响应消息的一种) Content-Type: application/SDP Via: SIP/2.0/UDP127.0.0.1: 5061 Call-ID: ***************************.0.1 CSeq: 1INVITE From: ************.0.1: 5061;User=phone>;tag=29005358336B534F610A000 To: **********.0.1: 5060;User=phone>;tag=5358336B534F2900CD1B0000 Contact: **********.0.1: 55061> Content-Length: 156 v=0 o=HuaweiSoftX300010737418241073741824INIP4127.0.0.1 s=SipCall c=INIP4110.111.112.113 t=00 m=audio5060RTP/AVP0 a=rtpmap: 0PCMU/8000 3.4SIP协议主要响应码 3.4.1响应码分类 SIP响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。 不同类的响应消息由状态码来区分,状态码包含三位整数,状态码的第一位用于定义响应类型,另外两位用于进一步对响应进行更加详细的说明。 响应消息的分类如下表所示。 1XX 进展响应 临时响应 2XX 成功 最终响应 3XX 重定向响应 最终响应 4XX 客户端响应 最终响应 5XX 服务端响应 最终响应 6XX 全局错误 最终响应 上述消息中,临时响应用于指示呼叫正在进行,最终响应用于结束请求消息。 3.4.2主要响应码举例 100待处理 180回铃 181呼叫被转发 182排队 200OK 301永久转移 302临时转移 400非法请求 404未找到 405方法不允许 500服务器内部错误 504服务器超时 600忙 603拒绝 SIP协议中定义了40多种状态码,已经考虑到了通信过程中可能会碰到的所有的状态。 在一般的正常SIP呼叫中只会用到其中很少的一部分。 SIP响应码是可扩展的。 不要求SIP应用程序理解所有已注册状态码的含义,但是它必须理解所有状态码的类别。 不能识别的状态码则作为X00处理,此时,用户代理应向用户显示该响应的消息体,该消息体一般含有能理解该异常状态的可读信息。 4、SIP呼叫过程实例 主叫UA1通过代理服务器P-S1和P-S2呼叫UA2流程图 图表1SIP通过代理服务器的呼叫过程 主叫UA1发起INVITE请求,该请求中提供了足够的信息以便被叫能够参加该会话,包括媒体流的类型和格式以及地址和端口的信息,INVITE请求被送到本地的SIP代理服务器P-S1。 本地的SIP代理服务器查询,得到处理该SIP请求的代理服务器的传输层地址(IP地址和端口号),并将接收到的请求转发到该服务器。 该服务器通过查询,得到被叫UA2的传输层地址(IP地址和端口号),并将接收到的INVI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sip 协议 原理 分析 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)