SIP协议概况SIP(RFC3261)会话初始化协议是由IETF提出并主持研究的一个应用层控制协议,可用以实现会话的发起、建立和释放,但不负责媒体数据传输;SIP的开发目的是用来帮助提供跨越因特网的高级电话业务。为了解决IP网中的信令控制,以及同软交换平台的通信,从而构成下一代的增值业务平台。同H.323协议相比,SIP协议具有实现简单、灵活度高、易于扩展和移动性好优势;支持单播、组播。1SIP与H.323对比2H.323:H.323和SIP是一对并列的协议,是两套各自独立的标准,H.323标准是为构建多媒体会议系统而提出的,并不是专门为IP电话提出的;SIP的出发点是以现有的Internet为基础来构建IP电话业务网。它们能实现的信令功能基本相同,也都利用RTP作为媒体传输协议。设计原则不同:H.323协议由ITU-T制订,其应用背景是通信网;SIP协议由IETF制订,其应用背景是Internet。协议形式不同:H.323采用电信网常用的ASN.1编码形式,严谨;SIP采用Internet协议常用的文本形式,简单。地址形式不同:SIP的基本地址形式是URL,适合Internet应用,可容易地嵌入Web网页;H.323的主要地址形式是E.164地址。扩展业务实现方法不同:H.323沿用电信网做法,用专门的协议对补充业务的定义及实现做了严格的规定,缺乏灵活性;SIP增加新的头部字段和请求方法来实现新的业务,功能扩展比较方便。SIP协议特点SIP是基于文本的协议,易于实现;基于Client/Server模型;SIP重用几个现有的比较成熟的Internet业务和协议,如DNS,RTP,RSVP等。SIP协议可以同时支持各种传输协议:UDP,TCP(可靠性),TLS(安全性);SIP借鉴已有的Internet协议HTTP、SMTP的成功经验,开发方法和WEB应用类似,易于和Internet业务综合。同时SIP可以充分利用己定义的头域,对其进行简单必要的扩充就能很方便地支持各项新业务和智能业务;SIP支持用户的移动性,支持移动业务。3SIP移动性4SIP协议有:逻辑地址和实际地址分离机制;注册和注销机制(REGISTER,Contact头域);重定向机制;re-INVITE更新机制。终端移动性:终端位置发生移动;个人移动性:个人移动性是指使用同样的逻辑地址在不同的终端上(不同的实际地址)定位1个用户;会话移动性:会话移动性是指会话在不同终端上的移动,将一个正在进行中的会话在不同终端间进行移动(re-INVITE包含新终端的IP和端口号);服务移动性:允许用户在改变网络服务提供商或者改变终端的情况下,保持用户当前拥有的服务内容,包括地址簿、好友列表等。SIP从五个方面支持建立和终止多媒体会话:用户定位:检查参与通讯的终端用户的位置;用户可达性判断:确定被叫方是否空闲以及是否愿意参与会话;用户能力交换:检查终端用户可用的媒体和媒体参数;会话建立:“ringing”过程,确认主叫和被叫双方的会话参数;会话管理:包括传输和终止会话,修改会话参数(re-INVITE),激活服务等。5SIP与其他协议协同工作,但SIP协议的功能实现并不依赖于这些协议(会话描述协议)SDP(RFC2327):用于描述多媒体会话;RTP(RFC1889)/RTCP:用来传输实时数据并且提供QoS反馈;(实时流协议)RTSP(RFC2326):用于控制流媒体的传输;(媒体网关控制协议)MEGACO/MGCP:用来控制到公共电话交换网(PSTN)的网关;(资源预留协议)RSVP(RFC2205):与SIP互操作以保证语音流QoS;6SIP电话系统协议结构SIPRSTPRSVPRTCPRTPTCP媒体封装(G.7xx,H.261等)UDPIPV4,IPV6PPPSDHAAL3/4AAL5ATM以太网V.34PPP应用程序核心网络层链路层物理层信 令QoS媒体传送7SIP会话主要组件UA:用户代理,是终端用户设备,如用于创建和管理SIP会话的移动电话、多媒体手持设备、PC、PDA等。用户代理客户机UAC发出消息,用户代理服务器UAS对消息进行响应;LS:注册或定位服务器,包含域中所有用户代理的位置信息的数据库。一个用户可以注册不同的位置,因此定位服务器查找用户时可得到零个或多个地址。在SIP中存在移动漫游概念,LS起着关键作用;PS:代理服务器,接受UA的会话请求并查询注册服务器,获取收件方UA的地址信息。然后,它将会话邀请信息直接转发给收件方UA(如果位于同一域中)或代理服务器(如果位于另一域中)。RS:重定向服务器,允许SIP代理服务器将SIP会话邀请信息定向到外部域。把请求消息中的用户地址(TO头域)映射成零个或更多个新地址返回给请求用户,向请求方发送应答以指示被叫用户的地址,可以获得的是E-mail形式的URL地址或被叫方关联的电话号码。SIP服务器的差别在逻辑上,并非在物理上的差别。8SIP网络结构UACRSLSPSPSUASLS9用户向LS注册消息过程10用户开机后首先向其所在的注册服务器LS注册。UALS位置服务器REGISTER(1)401Unauthorized(2)REGISTER(3)200OK(4)SIP协议规定用户上电登记机制,位置服务器中数据库有所有用户相关信息;配合DNS机制进行域名解析,使LS能定位用户。SIP\sip注册过程.PNGSIP会话模型:主叫和被叫在相同域主叫A呼叫被叫B时,发送INVITE消息给PS,要求与B进行会话,此时PS再向LS查询获得B的地址信息,如IP;然后PS再转发A的邀请信息(包含SDP会话参数描述)给B,B收到邀请信息后通知PS已接收到请求,已经做好会话准备;PS再将该信息告诉A,ACK后会话建立。11主叫被叫在同一域中消息流程主叫用户UAC注册服务器LS代理服务器PS被叫用户UASINVITE(1)100Trying(2)Bisin。。(4)WhereisB?(3)INVITE(5)100Trying(6)180Ringing(7)180Ringing(8)200OK(9)200OK(10)ACK(11)RTP/RTCPBYE(12)200OK(13)12SIP会话模型:主叫和被叫在不同域域A中PS发现B不在该域中。根据INVITE消息中TO头域。域APS向RS查询有关B的地址信息。13主叫被叫在不同域中消息流程UACUASRSPSINVITE(1)302(2)ACK(3)INVITE(4)INVITE(5)100Trying(6)180Ringing(7)180Ringing(8)200OK(9)200OK(10)ACK(11)ACK(12)RTP/RTCPBYE(13)BYE(14)200OK(15)200OK(16)14SIP电话:重定向信令过程15Lioncs.tu-berlin.deCZ@cs.tu-berlincs.columbia.edu定位服务器henninghygs@play1.INVITEhenning@cs.columbia.edutune234.302Movedtemporarily5.ACKhenning@cs.columbia.edu6.INVITEhgs@play.cs.columbia.edu7.200OK8.ACKhgs@play.cs.columbia.eduSIP地址:SIPURLSIPURL一般结构:SIP:username:pwd@host:port;用户参数;传送参数;方法参数;生存期参数;服务器地址参数?头部字段名=头部字段值well-knownSIP端口号:5060SIP支持许多种地址描述和寻址,包括:用户名@主机地址、被叫号码@PSTN网关地址和如Tel:010-62281234这样普通电话号码的描述等。SIP地址包括用户部分和主机部分,如:j.doe@big.tom、J.doe@192.168.10.1,这样,SIP主叫根据被叫地址,就可以识别出被叫是否在传统电话网上,然后通过一个与传统电话网相连的网关向被叫发起并建立呼叫。16SIPURL的协议应用17指示请求的源地址:From字段中指示请求想要抵达的目的地:To字段中指示请求的当前目的地地址:Request-URL中(起始行)指示重定向地址:Contact字段中SIP消息一般格式18起始行*通用头部*请求/响应头部*实体头部CRLF(空行,表示消息头域结束)[消息体,SDP]起始行:SIP版本;请求方法/响应类型;被邀用户的当前地址SIP基本方法:6种19INVITE:邀请用户加入某个会话;ACK:确认会话,仅和INVITE配合;BYE:释放已经建立的会话连接;CANCEL:释放尚未完全建立的连接;REGISTER:用户向注册服务器登记位置等信息;OPTIONS:允许一个UA来查询另外一个UA或者proxy服务器的能力,如内容类型,扩展,codecs等。通过检查OPTIONS返回的Supported头域,就可以知道是否支持这个选项。所有的UA都必须支持OPTIONS方法。SIP消息主要头域20Via:标示该请求的应答回送的地址。在转发请求之前,UA或PS会在via头上增加一个一段包含自己地址的值,从而指示消息经过的路径,可发现路由环路。From:用来标志请求的原始发起者。To:用来标志请求的目的地;Contact:指示重定向地址,即告诉其他网元将来的请求发送到哪里。Call-ID:包含一个全局的唯一标志,用来唯一标志这个呼叫;Cseq:用于判定响应和请求的对应关系,判定重复请求;Max-forwards:限制通讯中请求到达目的地前最大转发次数;Content-type:包含了消息正文的描述;Content-length:包含消息正文的长度(字节数)。消息实例:alice向bob发送INVITE消息21SIP\alicebob呼叫消息流程.PNGINVITE消息中TO头域无tag指示重定向地址#Alice端atlanta.com代理服务器收到INVITE请求之后,就去找biloxi.com,可能通过DNS服务来提供biloxi.com的地址信息。同时atlanta.com代理服务器会在via头上增加一个一段包含自己地址的值。消息实例:bob回送200OK消息22初始VIA值Alice端PS添加Bob端PS添加Bob端添加tag#VIA,TO,FROM,CALL-ID,Cseq包头域是从INVITE请求包中直接拷贝过来的。200消息中SDP描述了bob支持的会话参数类型,与alice的INVITE消息进行协商。Alice收到200后,利用Contact指示的URL,不经过Via中地址直接向bob发送ACK确认。一个能直接联系到Bob的URI。SIP消息源路由示例:23参考RFC3261:P118-120(省略与路由无关的头域)Scenario:U1-P1-P2-U2U1发:INVITEsip:callee@domain.comSIP/2.0Contact:sip:caller@u1.example.comP1发:INVITEsip:callee@domain.comSIP/2.0Contact:sip:caller@u1.example.comRecord-Route:sip:p1.example.com;lrP2发:INVITEsip:callee@u2.domain.comSIP/2.0Contact:sip:caller@u1.example.comRecord-Route:sip:p2.domain.com;lrRecord-Route:sip:p1.example.com;lrU2回:SIP/2.0200OKContact:sip:callee@u2.domain.com(U2改写contact头域为自己的URL)Record-Route:s