SIP协议(一)

熟悉SIP的一些基本常识概念相关协议,

网络元素,分层结构,

不同请求消息类型,响应消息类型

SDP的一些概念基础

SIP

SIP(Session Initiation Protocol)会话初始化协议,是有IETE(Internet engineering task force,因特网工程任务组)制定的通讯协议,他是一个基于文本的应用层协议,用于创建,修改,释放一方或多方会话,广泛应用于CS(电路交换circuit switched),ISM(Ip multimedia subsystem,ip多媒体子系统),NGN(next generation network,下一代网络),可以支持并应用语音,视频,数据等多媒体业务,同时也可以应用于(presence)呈现,(instant message)即时消息等特色业务,可以说有IP的地方就有SIM协议的存在

与SIP相关的协议

(1)SDP(会话描述协议):描述消息内容的负载情况和特点,SIP使用Internet的此协议来描述终端设备的特点
(2)RSTP(实时流协议) 用于控制流媒体的传输
(3)RTP(实时数据传输协议):负责实时传输
(4)RSVP(资源预留协议):SIP自身不提供服务质量,它与负责语音质量的资源预留协议互操作
(5)LDAP(轻型目录访问协议):负责定位
(6)RADIUS(用户服务):负责身份验证的远程身份验证拨入

SIP的一些特点

(1)不定义要建立的会话类型,只定义应该如何管理会话,有了这种灵活性,SIP可以应用于众多应用和服务中(交互性游戏,音乐和视频,Web会议)
(2)SIP消息基于文本,易于读取和调试。
(3)与存在已久的国际电信联盟(ITU) SS7 标准(用于呼叫建立)和 ITU H.323 视频协议组合标准不同,SIP 独立工作于底层网络传输协议和媒体。它规定一个或多个参与方的终端设备如何能够建立、修改和中断连接,而不论是语音、视频、数据或基于 Web 的内容。

SIP网络元素

SIP 用户代理、SIP 注册服务器、SIP 代理服务器和 SIP 重定向服务器。这些系统通过传输包括了 SDP 协议(用于描述消息的内容和特点)的消息来完成 SIP 会话。
(1)SIP 用户代理
SIP 用户代理(UA) 是终端用户设备,用于创建和管理 SIP 会话的移动电话、多媒体手持设备、PC、PDA 等。用户代理客户机发出消息,用户代理服务器对消息进行响应。
(2)SIP 注册服务器
SIP 注册服务器是包含域中所有用户代理的位置的数据库。在 SIP 通信中,这些服务器会检索参对方的 IP 地址和其他相关信息,并将其发送到 SIP 代理服务器。
(3)SIP 代理服务器
SIP 代理服务器接受 SIP UA 的会话请求并查询 SIP 注册服务器,获取收件方 UA 的地址信息。然后,它将会话邀请信息直接转发给收件方 UA(如果它位于同一域中)或代理服务器(如果 UA 位于另一域中)。
(4)SIP 重定向服务器
SIP 重定向服务器允许 SIP 代理服务器将 SIP 会话邀请信息定向到外部域。SIP 重定向服务器可以与 SIP 注册服务器和 SIP 代理服务器同在一个硬件上。

分层结构

SIP是一个分层协议,每层之间松耦合。
第一层:即SIP的最低层是语法和编码。
其编码指定使用巴科斯范式(BNF)。

第二层:传输层。
它定义在网络上客户端如何发送请求和接收响应,服务器如何接收请求和发送响应。所有的SIP元素都包含传输层。

第三层:事务层。
事务层处理应用层转播、响应与请求的匹配、应用层超时。用户代理(User agents)包含一个事务层,如有状态代理(stateful proxies),无状态代理(Statelessproxies)不包含事务层。事务层有一个客户端组件(称为客户端事务)和服务器组件(称为服务端事务),它们都用有限状态机表示,来处理特殊请求。

第四层:事务层之上的层称为事务用户(TU)。
每个SIP实体(SIP entity),除了无状态代理外,都是事务用户。当事务用户想发送请求时,它就创建一个客户端事务实例( transaction instance),并将请求与目的的IP地址、端口一起发送。创建客户端事务的TU也可以取消事务。客户端取消事务的时候,就要求服务器停止进一步的处理,并恢复到初始化事务前的状态,然后返回该事务的一个错误响应。可通过CANCEL请求完成取消事务,CANCEL请求包含自己的事务,同时也提及需要取消的事务。

不同请求消息类型

一个基本的SIP消息包括起始行、一个或多个头字段、说明头字段结束的空行和一个可选的消息体。
消息=起始行(包括请求行/状态行;请求行规定了请求的类别,而状态行指出了每个请求的状态,比如是成功还是失败。如果是失败的话还要给出失败的原因或类型。)
*头字段
CRLF
[消息体]
(消息首部给出了关于请求或应答的更多信息一般包括消息的来源、规定的消息接收方,另外还包括一些其他方面的重要信息。消息体通常描述将要建立会议的类型包括所交换媒体的描述,但不具体定义消息体的内容或结构,其结构或内容使用另外一个协议来描述,就是会话描述协议SDP。)

请求消息
请求行 = 方法 + 空格 + 请求地址 + SIP版本号 + 空行
通过一个请求行作为起始行,请求行包括了方法名、请求的URL、协议版本号、中间用空格分开。

六种请求方法:

  INVITE           发出呼叫会话请求
  ACK              INVITE请求被最终请求
  BYE              释放一个呼叫会话
  CANCEL           取消挂起的呼叫
  REGISTER         登记注册用户代理
  OPTIONS          查询服务器能力

响应消息类型
应答消息
状态行 = SIP版本 + 空格 + 状态码 + 空格 + 相关文本短语 + 空行

SIP应答消息状态码与功能

类型 状态码 状态说明

临时应答(1XX)
100 Trying 正在处理中
  180 Ringing 振铃
  181 call being forwarder 呼叫正在前向
  182 queue 排队
  181* session progress 会话进行
    
会话成功(2XX) 200 OK 会话成功

重定向(3XX) 
300 multiple 多重选择
  301 moved permanently 永久移动
  302 moved temporaily 临时移动
  305 use proxy 用户代理
  380 alternative service 替代服务

请求失败(4XX) 
400 bad request 错误请求
 401unauthorized 未授权
 402 payment required 付费要求
 403 forbidden 禁止
 404 not found 未发现
 405 method no allowed 方法不允许
 406 not acceptable 不可接受
 407 proxy authentication required 代理需要认证
 408 request timeout 请求超时
 410 gone 离开
 413 request entity too large 请求实体太大
 414 request-url too long 请求URL太长
 415 unsupported media type 不支持的媒体类型
 416 unsupported url scheme 不支持的URL计划
 420 bad extension 不良扩展
 421 extension required 需要扩展 
 423 interval too brief 间隔太短
 480 temporarily unavailable 临时失效
 481 call/transaction does not exist 呼叫/事务不存在
 482 loop detected 发现环路
 483 too many hops 跳数太多
 484 address incomplete 地址不完整
 485 ambiguous 不明朗
 486 busy here 这里忙
 487 request terminated 请求终止
 488 not acceptable here 这里请求不可接受
 491 request pending 未决请求
 493 undecipherable 不可辨识

服务器失败(5XX) 
500 server internal error 服务器内部错误
 501 not implemented 不可执行
 502 bad gateway 坏网关
 503 service unavailable 服务无效
 504 server time-out 服务器超时
 505 version not supported 版本不支持
 513 message too large 消息太大

全局性错误(6XX) 
600 busy everywhere 全忙
 603 decline 丢弃
 604 does not exist anywhere 不存在
 606 not acceptable 不可接受

SDP

SDP的目的是传送多媒体会话中的媒体流的信息,以使会话描述的接收者可以参加会话。所以,SDP应该包含足够的信息来发起会话或使接收者加入会话。

SDP应该包含:

l 会话名和会话目的
l 会话激活的时间
l 会话由何种媒体组成
l 接收这些媒体的信息(地址,端口,格式等等)
l 会话所用到的带宽信息。
l 连接信息

SDP会话描述有以下三部分内容:会话描述、媒体描述、时间描述。

会话描述:
v= (协议版本protocol version)
o= (所有者和会话标识符owner/creator and session identifier).
s= (会话名session name)
i=* (会话信息session information)
u=* (URI的描述 URI of description)
e=* (邮件地址email address)
p=* (电话号码phone number)
c=* (连接信息connection information - not required if included in all media)
b=* (带宽信息bandwidth information)
One or more time descriptions (see below)
z=* (地区时间调整time zone adjustments)
k=* (加密钥匙encryption key)
a=* (0或多个会话属性行zero or more session attribute lines)
Zero or more media descriptions (see below)

时间描述:
t= (会话激活的时间time the session is active)
r=* (0或多个重复时间zero or more repeat times)

媒体描述:
m= (媒体名和传输地址media name and transport address)
i=* (媒体标题media title)
c=* (连接信息connection information - optional if included at session-level)
b=* (带宽信息bandwidth information)
k=* (加密钥匙encryption key)
a=* (0或多个媒体属性行zero or more media attribute lines)

你可能感兴趣的:(SIP)