会话初始协议SIP与SDP简介

会话初始协议SIP与SDP简介
SIP(Session Initiation Protocol,会话初始协议)是⼀个控制发起、修改和终结交互式多媒体(⾳视频、聊天、游戏等)会话的信令协议(RFC 3261)。SIP是⼀个基于⽂本的协议,已为即时消息、列席和事件通知等定义了扩展。
为建⽴会话,SIP⼀般需要使⽤以下协议:
DNS:解析主机或域名;
SDP(会话描述协议):描述、协商多媒体会话参数;
RTP(实时传输协议): 传输实时数据(⾳视频媒体包)到端点;
RSVP(资源预留协议):在建⽴媒体会话前预留出所需的带宽;
TLS(安全传输层协议):可基于此提供SIP的隐私性和完整性;
STUN(NAT的UDP简单穿透):发现是否有地址转换;
部分术语简介
Address-of-Record(AOR):是⼀个SIP或SIPS URI,它指向带位置服务的⼀个域,位置服务可以将⼀个URI与另⼀个URI(可能到⽤户的URI)映射。典型的,通过注册来填写位置服务。通常认为AOR是⽤户的“公开地址”。
Back-to-Back User Agent(B2BUA):背对背⽤户代理,是⼀个逻辑实体,它接收请求,并作为⽤户代理服务器(UAS)处理该请求。为确定如何应答⼀个请求,它作为⽤户代理客户端(UAC)并⽣成请求。与代理服务器不同,B2BUA保持对话状态,并参与其建⽴的对话中发送的所有请求。由于B2BUA是UAC和UAS间的连接,所以不需要明确定义其⾏为。
User Agent Client(UAC):⽤户代理客户端是创建新请求,然后使⽤客户端事务状态机发送请求的逻辑实体。UAC⾓⾊仅存在事务的持续时间内。换⾔之,如果软件发起⼀个请求,它仅在该事务的持续时间内是⼀个UAC。如果随后它接收到⼀个请求,在处理此事务时,它被假想成⼀个⽤户代理服务器⾓⾊。
User Agent Server(UAS):⽤户代理服务器是⼀个逻辑实体,它产⽣SIP请求的响应。响应接收、拒绝和重定向请求。该⾓⾊仅存在于事务期间。换⾔之,如果软件对请求作出响应,那么它在事务期间就是UAS。如果随后它产⽣⼀个请求,那么在处理事务的期间我们就把它假想成⽤户代理客户端。
User Agent(UA):既能作为⽤户代理客户端⼜能作为⽤户代理服务器的逻辑实体。⾓⾊UAC和UAS,
以及代理和重定向服务器都是定义在事务的基础上的。例如,当⽤户发起⼀个呼叫发送初始INVITE请求时,它作为UAC;当它从被呼叫者接收BYE请求时,作为UAS。类似的,同⼀软件能作为⼀个请求的代理服务器和下⼀个请求的重定向服务器。以上定义的代理、位置和注册服务器都是逻辑实体。实现时可能将它们结合到⼀个应⽤中。
SIP消息基础
SIP消息可分为SIP请求和响应,由为SIP⽹络实体传送信令和路由信息的标题头字段(RFC3261)组成。
SIP寻址
SIP地址在⽹络中⽤于识别⼀个⽤户或资源,常被称为SIP URI,有类似EMail的地址格式:
sip:user@domain:port
port是可选的,若没有则使⽤默认5060
SIP请求:
是客户端发给服务器激活⼀个SIP操作的消息,由⼀个⽅法名(Method)、⼀个请求URI(Request-URI)和⼀个协议版本 (SIP-Version)组成,三个部分之间以空格(SP)间隔。
Request-Line  =  Method + SP + Request-URI + SP + SIP-Version + CRLF
RFC中定义了6中请求:
INVITE:表明接收⽤户或服务被邀请加⼊⼀个会话;也可以使⽤这种⽅式来修改先前建⽴会话的特性;成功响应(200 OK)表明被叫⽅愿意参与会话;
ACK:确认UAC已经接收到了INVITE请求的最终响应(只与INVITE请求⼀起使⽤);⽤于结束⼀个200 OK响应;若INVITE请求中不含有会话描述信息,ACK可以包含⼀个最终会话描述的消息体;
OPTION:UA⽤此向UAS查询它的功能;
BYE:⽤于终结⼀个先前建⽴的会话;
CANCEL:使UAC和⽹络服务器取消⼀个正在进⾏的请求(如INVITE);
REGISTER:客户端注册其⽬前的位置信息;
SIP响应:
服务器向客户端发送SIP响应,指明客户端先前发送给服务器的SIP请求的状态;由⼀个协议版本(SIP-Version),⼀个状态码(Status-Code)和⼀个原因说明(Reason-Phrase)组成,类似于请求消息,三个部分之间也以空格字符(SP)间隔。
Status-Line := SIP-Version + SP + Status-Code + SP + Reason-Phrase + CRLF
状态码是⼀个100~699之间的3位正整数(具体参见后⾯附录),它表⽰对于⼀个请求消息的响应结果;原因说明是⼀串可以显⽰的字符,⽤于对响应的状态码进⾏简短说明。
1xx:临时响应 (Provisional);之前的请求消息已经收到,并准备接着处理后⾯的请求消息。
2xx:成功响应 (Success); 操作成功,请求消息已被收到并且成功地处理。
3xx:重定向响应 (Redirection); 服务器向客户端返回其它可能的位置,客户端应当根据响应中包含的地址信息向另⼀个服务器重发请求消息。
4xx: 客户端错误 (Client Error); 请求由于客户端的错误⽽失败,客户端可以根据响应状态码修改并重发刚才的请求消息。
5xx:服务器错误 (Server Error) ;请求由于服务器的错误⽽失败,客户端可以向另⼀个服务器重发请求消息。
6xx:全局错误(Global Failure); 请求失败,客户端不应该再向任何服务器重发该请求消息。
SIP标题头
遵从HTTP标题头(RFC2616)定义的同样格式:每个标题头由字段名,紧跟着冒号(:)和字段组成。
主要标题头(详情参见):
From:定义请求发起者(通常是发送者AOR),包含SIP或SIP URI和⼀个可选的显⽰名字;
To:定义了请求的接收者(通常是接收者AOR),包含SIP或SIP URI和⼀个可选的显⽰名字;因重定向和转移,SIP请求不⼀定发送给‘希望的’接收者;
Call-ID:定义了⼀系列的SIP消息,对所有由对话中的UA发送的所有SIP请求和响应,Call-ID必须唯⼀;
Cseq:由⼀个整数值和⼀个⽅式名称组成,在⼀个对话中标识和序列SIP请求,也区分重传和新消息;
Via:定义请求路径和响应要发送的地址;
Contact:定义US希望接收新SIP请求的SIP或SIPS URI(实际地址);
Allow:列出产⽣SIP消息的UA所⽀持的功能集合;
Supported:列出所有UA⽀持的SIP扩展(RFC3262);
Require:包含远端UA必须⽀持的SIP扩展;
Content-Type:请求或响应的消息体类型;
Content-Length:请求或响应的消息体的⼤⼩(⼗进制);
事务与会话
Transaction事务
是指⼀个请求消息以及这个请求对应的所有响应消息的集合;对于INVITE事务来讲,除包含INVITE请求和对应的响应消息外,在⾮成功响应的情况下,还包括ACK请求。Via头中的branch参数能够唯⼀确定⼀个事务。branch值相同,代表同⼀个 transaction(事务)。事务是由事件(⽅法)来引起的,⼀个
⽅法(Method)的建⽴和到来都将建⽴新的事务。(实际上当收到新消息时,就是根据branch来查对应的事务)
根据sip协议描述,⼀个transaction由5个必要部分组成:from、to、Via头中的branch参数、call-id和cseq,这5个部分⼀起识别某⼀个transaction,如果缺少任何⼀部分,该transaction就会设置失败。
Dialog对话
是两个UA之间持续⼀段时间的点对点的SIP连接,它使UA之间的消息变得有序,同时给出请求消息的正确的路由。即Call-ID、from-tag以及to-tag三个值的组合能够唯⼀标识⼀次对话。对话⼀般是由Invite and Subscribe  来创建的。即对话处于确定阶段时,对话已经建⽴起来。
Session会话
是⼀次通信过程中所有参与者之间的关联关系以及他们之间的媒体流的集合。只有当媒体协商成功后,会话才能被建⽴起来。
三者区别联系
对话是end-point对end-point的关系,即真实的通信双⽅,⽽transaction 是hop by hop的关系,即路由过程中交互的双⽅。
Transaction:维护hop to hop状态,包括⼀个请求和其触发的所有响应,包括若⼲暂时响应和⼀个最终响应。⽣命周期从请求产⽣到收到最终响应。
Dialog:维护peer to peer状态,⽬前只有invite和subscribe请求会触发dialog。其⽣命周期贯穿⼀个端到端会话的始终。
下⾯的⽰意图清晰的显⽰了它们之间的关系(RINGING 是 1xx 响应,  OK是 2xx 响应) :
caller呼叫callee的号码来建⽴⼀系列的对话(Dialogs):
UA-A与B2BUA之间的对话;
B2BUA与UA-B之间的对话;
这些对话组成了⼀个呼叫(Call),即⼀个会话。
SIP扩展协商机制
uasaSIP要求SIP实体忽略接收到的SIP消息中不知道的标题头,SIP扩展(如RFC3841)可以在现有的⽅式下定义新的标题头字段,SIP扩展需定义选项标记(tag):
Require标题头:UAC坚持UAS必须理解处理请求的扩展,若UAS不⽀持必须通过Unsupported标题头包含不⽀持的选项标签来拒绝请求;UAC看重新发送不含扩展的请求或终⽌事务;(如)
Supported标题头:告诉UAS,UAC⽀持⼀定的扩展,由UAS决定在响应消息中它是否需要使⽤这些扩展;(如)
Allow标题头:列出产⽣SIP消息的UA所⽀持的功能集合;
SDP会话描述协议
SIP使⽤SDP(RFC4566)进⾏媒体会话实际参数的描述,包括:媒体类型、编码、⽐特率(bit rate)、以及会话相关的地址与端⼝号。
SDP包括以下⼀些⽅⾯:
会话的名称和⽬的
会话存活时间
包含在会话中的媒体信息,包括:
媒体类型(video,audio, etc)
传输协议(RTP/UDP/IP,H.320, etc)
媒体格式(H.261video, MPEG video, etc)
多播或远端(单播)地址和端⼝
为接收媒体⽽需的信息(addresses, ports, formats and so on)
使⽤的带宽信息
可信赖的接洽信息(Contact information)
SDP会话描述由多⾏<type>=<value>组成。其中<type>是⼀个字符。<value>是⼀个字符串,其格式视<type>⽽定。整个协议区分⼤⼩写。“=”两侧不允许有空格。
v=  (protocol version)
o= (owner/creator and session identifier).
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information)
b=* (bandwidth information)
One or more time descriptions (seebelow)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attributelines)
Zero or more media descriptions (seebelow)
Times
t=<start time>  <stop time>
描述了会话的开始时间和结束时间。
<start time> 和<stop time> 为NTP时间,单位是秒。假如<stop time>为零表⽰过了<start time>时间后会话⼀直持续。当<start time>和<stoptime>均为零时表⽰持久会话。建议start time和stoptime不要设为0。因为不知道此会话的开始和结束时间,增加了调度(scheduling)的难度。
SDP Field
Media Type

本文发布于:2024-09-24 13:20:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/378707.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   响应   消息
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议