SIP协议学习总结1、SIP协议定义SIP(Session Initiation Protocol,即初始会话协议)是IETF提出的基于文本编码的IP电话/多媒体会议协议。
用于建立、修改并终止多媒体会话。
SIP 协议可用于发起会话,也可以用于邀请成员加入已经用其它方式建立的会话。
多媒体会话可以是点到点的话音通信或视频通信,也可以是多点参与的话音或视频会议等。
SIP协议透明地支持名字映射和重定向服务,便于实现ISDN,智能网以及个人移动业务。
SIP协议可以用多点控制单元(MCU)或全互连的方式代替组播发起多方呼叫。
与PSTN相连的IP电话网关也可以用SIP协议来建立普通电话用户之间的呼叫。
SIP协议在IETF多媒体数据及控制体系协议栈结构的位置H.323SIP RTSP RSVP RTCPH.263 etc.RTP TCP UDPIPPPP Sonet AAL3/4AAL5ATM EthernetPPPV.34SIP协议支持多媒体通信的五个方面:◆用户定位:确定用于通信的终端系统;◆用户能力:确定通信媒体和媒体的使用参数;◆用户有效性:确定被叫加入通信的意愿;◆会话建立:建立主叫和被叫的呼叫参数;◆会话管理:包括呼叫转移和呼叫终止;SIP协议的结构SIP是一个分层的协议,也就是说SIP协议由一组相当无关的处理层次组成,这些层次之间只有松散的关系。
SIP最底层的是它的语法和编码层。
编码方式是采用扩展的Backus-Naur Form grammar (BNF范式)。
第二层是传输层。
它定义了一个客户端发送请求和接收应答的方式,以及一个服务器接收请求和发送应答的方式。
所有的SIP要素都包含一个通讯层。
第三层是事务层。
事务是SIP的基本组成部分。
一个事务是UAC向UAS发送的一个请求以及UAS向UAC发送的一系列应答。
事务层处理应用服务层的重发,匹配请求的应答,以及应用服务层的超时。
任何一个用户代理客户端完成的事情都是由一组事务构成的。
用户代理与有状态的代理服务器都包含一个事务层,无状态的代理服务器并不包含事务层。
事务层包含一个客户元素(可以认为是一个客户事务)和一个服务器元素(可以认为是一个服务器事务),他们都可以用一个有限状态机来处理特定的请求。
在事务层之上是事务用户(Transaction User TU )。
每一个SIP实体,除了无状态代理,都是一个事务用户。
当一个TU发出一个请求,它首先创建一个客户事务实例并将目标IP地址、端口号、以及发送请求的设备信息一起发送。
事务用户可以创建客户事务,也可以取消客户事务。
当客户取消一个事务,它请求服务器终止正在处理的事务,并且回滚状态到该事务开始前的状态,并且产生指定的该事务的错误报告。
这是由CANCEL请求完成的,这个请求有自己的事务,并且包含一个被取消的事务。
2、SIP协议主要概念模型2.1实体模型概述SIP协议模型定义了User Agent(用户代理)和Server(服务器)等两类主要实体。
SIP协议把User Agent(即UA)分为两个部分:User Agent Client和User Agent Server。
呼叫方(称User Agent Client)发出邀请(或呼叫),被叫方(称User Agent Server)接受或拒绝邀请(或呼叫)。
分组终端设备、媒体网关/ 媒体设备通常是包括User Agent Client和User Agent Server在内的User Agent。
另外,下面所说的Proxy Server也要实现User Agent功能。
SIP协议定义了Proxy Server、Redirect Server和Register Server等三类主要Server。
Register Server:主要用于登记分组终端的当前位置和位置服务的原始数据。
Proxy Server:作为User Agent Client和User Agent Server间的中间媒体,它转发User Agent Client来的的邀请,在转发之前,根据被叫标识请求位置服务器获得被叫的可能位置,然后分别向它们发出邀请;Redirect Server:接受User Agent Client来的邀请,根据被叫标识请求位置服务器获得被叫的可能位置,把这些信息返回给邀请的发起者(User Agent Client),和Proxy Server的不同之处就在于它不转发邀请,邀请由主叫终端自己完成。
Sip协议基本网络模型,如下图所示:2.2 SIP协议相关概念呼叫(Call):一个呼叫是由一个会议中被同一个发起者邀请加入的所有成员组成的。
一个SIP呼叫用全局唯一呼叫标识符(CALL_ID)来识别。
因此,如果一个用户被不同的人邀请参加同一个多点会议,每个邀请都有一个唯一的呼叫。
一个点对点因特网电话交谈也被认为是一个SIP呼叫。
在一个基于多点控制单元(MCU)的电话交谈节目中,每个参与者都用一个独立的呼叫与MCU相连。
呼叫支路(Call leg):一个呼叫支路由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请求。
同构请求/响应(Isomorphic request or response):两个含有相同Call-ID、To、From和CSeq头域的请求/响应。
此外,同构请求还必须含有相同的Rquest-URI。
并行查询(Parallel search):在一个并行查询中,代理收到请求后向可能的被叫用户发出多个请求。
并行查询在发出请求时并不等待以前所发请求的响应。
最终响应(Final response):用于结束SIP事务的响应,与临时响应相对。
所有的2XX,3XX,4XX,5XX和6XX响应都是最终响应。
临时响应(Provisional response):服务器用来表示工作进展,并不结束SIP 事务的一种响应。
编码为1XX的响应是临时响应,其他响应都是最终响应。
会话(Session):根据SDP(会话描述协议)规范的定义:“多媒体会话是由多媒体发送者,接收者以及从发送者到接收者的数据流组成的集合。
SIP Transaction(SIP事务):一个SIP事务是发生在客户和服务器之间的,包括从客户向服务器发出的第一个请求直到服务器发给客户一个最终响应这期间所有的消息。
事务是由一个呼叫支路(Call leg)中的Cseq 顺序号来标识的。
一个ACK请求与对应的INVITE请求拥有相同的CSeq,构成自己的事务;B2BUA(背靠背用户代理):B2BUA是接收请求并作为用户代理服务器的一个逻辑实体。
为了确定应该如何响应请求,它作为一个用户代理客户(UAC)发出请求。
与代理服务器不同的是它维护对话状态并必须参与所有在已建立的对话上所发的请求。
由于它是一个串联UAC和UAS,对于它的行为无须作显式定义。
Address-of-Record(记录地址):一个address-of-record(AOR)是一个SIP 或者SIPS URI它指向了一个具有定位服务的主机,这个主机可以把URI映射成为用户真正物理位置的URI。
通常情况下,定位服务器是通过登记服务来建立的。
一个AOR经常被认为是一个用户的”公共地址”。
Message(消息):SIP元素之间传送的协议数据就是消息。
SIP消息既可以是请求也可以是应答。
Method(方法):方法是在服务器请求处理的主要功能。
方法是请求消息自身携带的。
典型的方法就是INVITE和BYE。
Request:(请求):一个由客户端发到服务端的SIP信息,用于执行特定的功能。
Response(应答):一个由服务端发到客户端的SIP信息。
用来标志从客户端发往服务端的请求处理的情况。
Ringback(回铃音):回铃音是一个信号音。
是给呼叫方的一个信号表示被叫方正在振铃(Ringing)。
Route Set(路由集):路由集合是一个顺序的SIP或者SIPS URI。
这些URI 描述了传递一个请求所必须经历的代理列表。
一个路由集可以是自适应的,因为包头中包含了Record-Route(记录路由),也可以是依赖配置得到的。
3、SIP协议主要消息3.1 SIP消息分类SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切。
SIP协议将Server和User Agent之间的通讯的消息分为两类:请求消息和响应消息。
请求消息:客户端为了激活特定操作而发给服务器的SIP消息,包括INVITE、ACK、BYE、CANCEL、OPTION和UPDATE消息。
响应消息:服务器向客户反馈对应请求的处理结果的SIP消息,包括1xx、2xx、3xx、4xx、5xx、6xx响应3.2 SIP消息结构请求消息和响应消息都包括SIP消息头字段和SIP消息体字段。
SIP消息头主要用来指明本消息是有由谁发起和由谁接受,经过多少跳转等基本信息;SIP消息体主要用来描述本次会话具体实现方式。
3.2.1 SIP消息头类型在SIP消息中,有四种类型的头字段:通用头字段请求头字段响应头请求实体头字段SIP 消息头的通用结构<头字段的名字>:<字段值>层次和在消息头中所有行的层次相同对于客户机/服务器都不能理解的头字段仅仅是被忽略,而不移除.一些重要的通用头◆Call-Id: 统一独特的呼叫标识◆Cseq:请求命令顺序号◆Via:用于记录一个请求传送的路径◆From:存在于每个SIP 消息中,包含请求发起者的显示名和地址。
SIP 响应的From域是请求中From 域的拷贝。
◆To:存在于每个SIP 消息中,表示一个请求的预期目的地。
SIP 响应中的To 域是请求中To 域的拷贝。
◆Max-Forwards:字段表示request 到达UAS 的跳数的限制,是一个整数,经过每一跳时减去一。