SIP协议 翁彦 2008.01
什么是SIP Session Initiation Protocol(会话发起协议),是由IETF定义,基于IP网络的一个应用层控制协议,用于多媒体会话的建立、控制、撤消等通信控制协议。
SIP功能 用户定位 用户状态保持与更新 会话建立、撤消、终止 会话管理
SIP应用 视频会议 视频浏览 视频点播 VoIP 软交换
SIP与H.323比较 分布式 灵活简洁 可扩展性好 NGN、3GPP正式标准
典型SIP会话(一)
典型SIP会话(二)
SIP会话 通常多媒体会话是一个包含了多媒体会话参与者以及他们之间的数据交互的集合,基于SIP协议的多媒体会话称之为SIP会话。
SIP协议结构
SIP结构特点 松耦合 各层仅包含规则,与实现无关 可扩展
SIP层次 语法层 定义消息语义、语法 消息语法规则采用BNF格式 传输层 定义网络消息传输方式 可靠传输、非可靠传输
SIP层次(续) 事务层 用户层 维持消息事务状态,处理事务 事务超时,消息重传,事务匹配 处理核心业务 执行相关具体操作,包括请求消息和应答消息
SIP会话实体 会话终端 路由代理服务器 路由重定向服务器 注册服务器
SIP逻辑实体 根据通信角色划分 UAC(User Agent Client,逻辑客户端),会话请求方 UAS(User Agent Server,逻辑服务器),会话应答方
SIP消息语法 请求-应答机制 消息=消息头+消息体 消息头为纯文本形式,UTF-8编码,按行划分,每行以/r/n结尾 消息头以空行(/r/n/r/n)结尾 消息体可以为任何格式数据,具体格式由消息头定义
SIP请求消息(一) 请求消息头=起始行+若干消息头字段行 起始行=SIP方法+请求URI+SIP版本 SIP方法 REGISTER INVITE CANCEL ACK
SIP请求消息(二) 除了ACK,其余SIP方法请求必须有应答 BYE UPDATE OPTIONS INFO SUBSCRIBE NOTIFY MESSAGE 除了ACK,其余SIP方法请求必须有应答
SIP请求消息(三) 消息头必须包含To、From、Cseq、Call-ID、Max-Forwards、Via这几个字段
SIP应答消息(一) 应答消息头=状态行+若干消息头字段行 状态行=SIP版本+状态码+状态说明 状态码 1xx,临时应答 2xx,请求成功
SIP应答消息(二) 1xx为临时应答,除此之外的应答为最终应答 状态说明用于描述状态码具体含义 消息头必须包含To、From、Cseq、Call-ID、Max-Forwards、Via这几个字段
SIP名词解释(一) Dialog 一定时间内存在于两个会话终端之间的点对点的SIP关系 Dialog由Call-ID,本地tag和远程tag唯一标识 Dialog只能由INVITE方法建立 请求消息分为Dialog内部消息和外部消息 一个会话中可以包含多个Dialog
SIP名词解释(二) URI 会话统一资源标识 用于标识会话中的逻辑实体 格式:sip: user:password@host:port
SIP消息头字段(一) 字段行=字段名+’:’+字段值 字段值可以包含参数,参数以冒号开始,参数之间以逗号分隔,参数以”参数名=参数值“的形式表示 Via 用于事务传输,同时表示期望接收应答的网络地址 Via字段必须包含branch参数,branch参数用于事务层的事务标识,而且必须以” z9hG4bK”开始,同时在空间和时间上唯一
SIP消息头字段(二) To From 请求消息的逻辑接收者 应答消息的To字段必须包含tag参数,该参数为Dialog标识的组成部分 请求消息的逻辑发起者 请求消息的From字段必须包含tag参数,该参数为Dialog标识的组成部分
SIP消息头字段(三) Call-ID CSeq 初始请求标识 Call-ID作为Dialog标识的组成部分,必须确保在空间和时间上唯一,Dialog内部的所有请求和应答都应当具有相同的Call-ID CSeq 请求序列号 序列号必须为32bit无符号整数,每提交一次新的请求递增1
SIP消息头字段(四) Max-Forwards Contact 最大路由次数 每经过一个路由网关该值减1,如果为0则丢弃该消息 消息的逻辑通信方 在INVITE请求消息中必须包含Contact字段
SIP消息头字段(五) Accept Allow WWW-Authenticate 逻辑终端支持的数据格式 默认为application/sdp Allow 逻辑终端支持的SIP方法 WWW-Authenticate 认证提示信息 用于鉴权
SIP消息头字段(六) Authorization Content-Type 认证信息 用于鉴权 消息数据类型
SIP消息头字段(七) Content-Length Expires Route 消息数据长度 超时 具体含义由各个SIP方法决定,以秒为单位 Route 路由信息
SIP消息头字段(八) User-Agent 客户端代理标识 Server 服务器端代理标识
SIP REGISTER方法(一) 功能 请求消息规则 终端注册 URI定位 请求URI必须为域形式,如sip:bqvision.com To字段中的URI必须与From字段的URI保持一致 除非终端URI发生变化,否则每次请求消息的Call-ID必须保持一致
SIP REGISTER方法(二) 请求消息举例 REGISTER sip:registrar.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.202:5060;branch=z9hG4bK776asdhds To: DVS6501 <sip:01001@bqvision.com> From: DVS6501 <sip:01001@bqvision.com>;tag=1901774 Call-ID: a84b4c76e66710@bqvision.com CSeq: 6581 REGISTER Contact: <sip:192.168.0.202> Max-Forwards: 70 Content-Length: 0
SIP INVITE方法(一) 功能 请求消息与Dialog的关系 建立会话 更新会话 维持会话 Dialog只能由INVITE请求建立
SIP INVITE方法(二) Dialog的建立 INVITE请求及其非失败应答(1xx或2xx)中To字段的tag参数建立相应的Dialog 临时应答(1xx)建立的Dialog称为早期Dialog,请求成功应答(2xx)建立的Dialog称为长期Dialog,早期Dialog在接收到请求成功应答后自动变为长期Dialog,否则在接收到请求失败应答或是超时后自动结束Dialog
SIP INVITE方法(三) 建立会话 Dialog的建立标志着会话的建立 初始INVITE请求总是Dialog外部请求,To字段必须不包含tag参数 初始INVITE请求可能会有多个请求成功应答,因为路由代理可能会产生多个分支,每一个请求成功应答及其To字段包含的tag参数建立各自的长期Dialog 对于每一个请求成功应答,逻辑客户端必须发送相应的ACK请求
SIP INVITE方法(四) 建立会话举例 INVITE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2164 To: <sip:server.bqvision.com> From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 1 INVITE Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Length: 0
SIP INVITE方法(五) SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2164 To: <sip:server.bqvision.com>;tag=5342 From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 1 INVITE Contact: <sip: server.bqvision.com> Max-Forwards: 70 Content-Length: 0
SIP INVITE方法(六) ACK sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2165 To: <sip:server.bqvision.com>;tag=5342 From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 1 ACK Max-Forwards: 70 Content-Length: 0
SIP INVITE方法(七) 更新会话 作为Dialog内部请求发送的INVITE请求称为再次INVITE请求 会话状态由请求消息中的消息数据更新
SIP INVITE方法(八) 更新会话举例 INVITE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2164 To: <sip:server.bqvision.com>;tag=5342 From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 2 INVITE Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Type: text/xml Content-Length: 372 <消息体略>
SIP INVITE方法(九) 保持会话 保持会话机制确保会话在一定时间内仍然处于活动状态 保持会话可以使用再次INVITE请求或是UPDATE请求
SIP INVITE方法(十) 保持会话举例 INVITE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2164 To: <sip:server.bqvision.com>;tag=5342 From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 3 INVITE Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Length: 0
SIP ACK方法 功能 确定会话已建立 规则 只能对INVITE请求的非临时应答发送ACK消息
SIP CANCEL方法(一) 功能 规则 取消已发出的请求 CACEL请求只能取消已发出的INVITE请求 在未收到任何INVITE请求的临时应答前,不能发送CACEL请求
SIP CANCEL方法(二) 取消请求举例 CANCEL sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2164 To: <sip:server.bqvision.com> From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 1 CANCEL Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Length: 0
SIP BYE方法(一) 功能 规则 结束会话 BYE请求只能作为Dialog内部请求发送 如果INVITE请求的应答方已发送200应答,但尚未收到ACK请求或超时,则应答方不能发送BYE请求
SIP BYE方法(二) 结束会话举例 BYE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK2165 To: <sip:server.bqvision.com>;tag=5342 From: <sip:client.bqvision.com>;tag=3386 Call-ID: 2542@bqvision.com CSeq: 2 BYE Max-Forwards: 70 Content-Length: 0
SIP UPDATE方法(一) 功能 规则 更新会话 保持会话 UPDATE请求只能作为Dialog内部请求发送
SIP UPDATE方法(二) 更新会话举例 UPDATE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK1478 To: <sip:server.bqvision.com>;tag=9107 From: <sip:client.bqvision.com>;tag=634825 Call-ID: 09FA2145@bqvision.com CSeq: 236 UPDATE Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Type: text/xml Content-Length: 106 <消息体略>
SIP SUBSCRIBE方法(一) 功能 规则 订阅事件 SUBSCRIBE请求只能作为Dialog内部请求发送 SUBSCRIBE请求可以包含Expires字段,表示订阅的时间,在超时之后自动取消订阅
SIP SUBSCRIBE方法(二) 订阅事件举例 SUBSCRIBE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK235gff To: <sip:server.bqvision.com>;tag=9107 From: <sip:client.bqvision.com>;tag=634825 Call-ID: 09FA2145@client.bqvision.com CSeq: 240 SUBSCRIBE Contact: <sip:client.bqvision.com> Max-Forwards: 70 Content-Type: text/xml Content-Length: 84 <消息体略>
SIP NOTIFY方法(一) 功能 规则 通知事件发生 NOTIFY请求只能作为Dialog内部请求发送 NOTIFY请求允许包含Expires字段,表示自动处理事件的超时
SIP NOTIFY方法(二) 通知事件举例 NOTIFY sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK235gff To: <sip:client.bqvision.com>;tag=9107 From: <sip:server.bqvision.com>;tag=634825 Call-ID: 542vnde3@bqvision.com CSeq: 241 NOTIFY Contact: <sip:server.bqvision.com> Max-Forwards: 70 Content-Type: text/xml Content-Length: 116 <消息体略>
SIP OPTIONS方法(一) 功能 举例 OPTIONS sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bKs8as877 Max-Forwards: 70 To: <sip:server.bqvision.com> From: <sip:client.bqvision.com>;tag=1901774 Call-ID: a84b4c76e66710 CSeq: 63104 OPTIONS Contact: <sip:client.bqvision.com> Content-Length: 0
SIP OPTIONS方法(二) SIP/2.0 200 OK Via: SIP/2.0/UDP server.bqvision.com;branch=z9hG4bKs8as877 To: <sip:server.bqvision.com>;tag=93810874 From: <sip:client.bqvision.com>;tag=1901774 Call-ID: a84b4c76e66710 CSeq: 63104 OPTIONS Contact: <sip:server.bqvision.com> Allow: INVITE, ACK, CANCEL, OPTIONS, BYE Accept: application/sdp Content-Type: application/sdp Content-Length: 274 (消息体略)
SIP INFO方法 功能 举例 INFO sip:server.bqvision.com SIP/2.0 传递会话信息 举例 INFO sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bKas89 Max-Forwards: 70 To: <sip:server.bqvision.com> From: <sip:client.bqvision.com>;tag=132512 Call-ID: a84b4c7657e623410 CSeq: 6120 INFO Contact: <sip:client.bqvision.com> Content-Type: text/xml Content-Length: 371 <消息体略>
SIP MESSAGE方法 功能 举例 MESSAGE sip:server.bqvision.com SIP/2.0 即时通信 举例 MESSAGE sip:server.bqvision.com SIP/2.0 Via: SIP/2.0/UDP 192.168.0.249:5060;branch=z9hG4bK7sgdkse Max-Forwards: 70 From: sip:client.bqvision.com;tag=49583 To: sip:server.bqvision.com Call-ID: asd88asd77a CSeq: 1 MESSAGE Content-Type: text/plain Content-Length: 18 Hello, I am here.
SIP事务(一) SIP会话 事务性会话 消息序列,单请求,多应答 状态机(INVITE和非INVITE) 客户端状态机 INVITE
SIP事务(二)
SIP事务(三) 非INVITE
SIP事务(四) 服务器状态机 INVITE
SIP事务(五)
SIP事务(六) 非INVITE
SIP事务(七) 定时器 T1:500ms T2:4s T4:5s A:初始化为T1(仅对UDP) B:64*T1 C:>3min D:>32s(UDP) 0s(TCP和SCTP)
SIP事务(八) E:初始化为T1(仅对UDP) F:64*T1 G:初始化为T1 H:64*T1 I:T4(UDP) 0s(TCP和SCTP) J:64*T1(UDP) K:T4(UDP)
SIP消息传输 UDP TCP SCTP
SIP消息安全 TLS SSL
2.0系统媒体交互(一) 基于SIP协议 REGISTER方法:终端注册 INVITE方法:建立会话 OPTIONS方法:维持会话 UPDATE方法:更新会话 BYE方法:结束会话 INFO方法:终端查询 SUBSCRIBE方法:事件订阅 NOTIFY方法:事件通知 MESSAGE方法:实时通信
2.0系统媒体交互(二) 建立会话示例
2.0系统媒体交互(三) 事件交互示例