SIP 协议

SIP简介

sip出现于二十世纪九十年代中期,源于哥伦比亚大学计算机系副教授Henning Scheulzrinne 及其研究小组的研究。他处于人共同提出通过Internet传输实时数据的实时传输协议RTP之外,还与人合作编写了实时流传输协议RTSP标准提案,用于控制音频视频内容在Web上的流传输。
SIP(Session Initiation Protocol)是一个会话层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以好似Internet多媒体会议、ip电话或多媒体分发。会话的参与者可以通过组播、网状单播或两者的混合体进行通信。
SIP是类似于HTTP的基于文本的协议。SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的深远意义。
与存在已久的国际电信联盟 (ITU) SS7 标准(用于呼叫建立)和 ITU H.323 视频协议组合标准不同,SIP 独立工作于底层网络传输协议和媒体。它规定一个或多个参与方的终端设备如何能够建立、修改和中断连接,而不论是语音、视频、数据或基于 Web 的内容。

  • SIP默认使用UDP 5060端口,但也可以使用TCP 5060。
  • SIP使用Server-Client模型。
  • SIP的四项基本功能:定位用户,将SIP地址解析为IP地址;协商Session的feature 呾capability;在迚行呼叫时改变会话参数;负责会话的建立和中断。
  • SIP 地 址 形 式 :sip:1112223344@mycompany.com 或sip:1112223344@10.1.1.1

 

SIP组件

User Agent

UA是SIP的基本组件,可分为UAC(User Agent Client)和UAS(User Agent Server)。发起呼叫的为UAC,接收呼叫的为UAS。很多设备都可做UA,如IP电话、PC、路由器等。

Proxy Agent

proxy server起到call routing、authentication、authorization、address resolution、loop detection 的功能。
UAC发起呼叫时会先把call setup message 发给proxy server,如果proxy server知道UAS的位置,会把call setup message转发给UAS(或者是next hop),否则会找其他的server查询。UAS接收到call setup message后会给proxy server响应,proxy ser ver再把这个响应返回给UAC。当呼叫建立之后,proxy server有2种选择。第一、呼叫建立之后还处于UAC和UAS之间的signaling path之间(Record-Route),以监视call change message或call termination message。第二、退出UAC和UAS之间的signaling path,不再参与会话。

Redirect Server

UA、Proxy Server可与Redirect Server通讯,以查找另一个endpoint的位置。

 

sip方法

REGISTER  UAC 使用此message向server注册以表明自己的位置。
INVITE     UAC发送此消息用以邀请UAS加入会话,其实就是一个call setup message。
ACK     为INVITE回复一个确认信息
CANCEL   中止一个还没建立的呼叫。
OPTIONS   用来查询server的capability。
BYE     用于中断呼叫。

 

返回的状态码

  1. 1XX  临时响应、表示请求消息正在被处理
  2. 2XX  成功响应、表示请求已被成功接收完全理解并接收
  3. 3XX  重定向响应、表示需采取进一步完成请求
  4. 4XX  客户机错误、表示请求消息中包含语法错误信息或服务器无法完成客户机的请求
  5. 5xx  服务器错误、表示服务器无法合法完成请求
  6. 6XX 全局故障 、表示任何服务器都无法完成该请求

 

SIP注册过程

请求端发送Register消息

REGISTER sip:10.109.252.6:5060 SIP/2.0
Call-ID: 90b9fbdb1437ec4c3b57f2e72ad60c4a@10.108.164.218
CSeq: 1 REGISTER
From: <sip:libin@10.109.252.6>;tag=6256
To: <sip:libin@10.109.252.6>
Via: SIP/2.0/UDP 10.108.164.218:6060;branch=z9hG4bK2a6a2acc56bd8a994d4a8773f5cfdc99
Max-Forwards: 70
Contact: <sip:libin@10.108.164.218:6060;transport=udp>
Expires: 180
Content-Length: 0

 

服务器端检查到需要鉴权,给请求端发送401结果码,并带上“WWW-Authenticate”头信息

SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.108.164.218:6060;branch=z9hG4bK13b359679ffdc900772e249069e492f5;rport=6060
To: <sip:libin@10.109.252.6>;tag=942cdaa5
From: <sip:libin@10.109.252.6>;tag=8377
Call-ID: 41b7660d5020c244787544a9c3aa63cd@10.108.164.218
CSeq: 1 REGISTER
WWW-Authenticate: Digest nonce="1356268016:5eaed72a7b94a6b1b235611391117886",algorithm=MD5,realm="10.109.252.6",qop="auth"
Content-Length: 0

请求端通过“Authorization”头字段带上鉴权头信息,发送一个新的REGISTER消息

REGISTER sip:10.109.252.6:5060 SIP/2.0
Call-ID: 8b1db000ad7a99821a25fdadaa7c1d28@10.108.164.218
CSeq: 2 REGISTER
From: <sip:libin@10.109.252.6>;tag=2550
To: <sip:libin@10.109.252.6>
Via: SIP/2.0/UDP 10.108.164.218:6060;branch=z9hG4bK658495c291f118da5e63443ca60dc668
Max-Forwards: 70
Contact: <sip:libin@10.108.164.218:6060;transport=udp>
Expires: 180
Authorization: Digest username="libin",realm="10.109.252.6",uri="sip:10.109.252.6:5060",algorithm=MD5,opaque="",nonce="1356268196:9425e0b73fcdb8d50f7b87cbd4db2fef",nc=1,cnonce="xyz",response="d829aff6987b2596cefe625dcff689d8",qop=auth
Content-Length: 0

服务器端验证鉴权信息的合法性,若验证成功,发送200 OK消息

SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.108.164.218:6060;branch=z9hG4bK7cd89ec16ccd95349cc7ee4f461c4353;rport=6060
To: <sip:libin@10.109.252.6>;tag=adc2c168
From: <sip:libin@10.109.252.6>;tag=9291
Call-ID: 90bbca26efb20dc82029f443c416579f@10.108.164.218
CSeq: 2 REGISTER
Content-Length: 0

 

 

 

 

posted @ 2012-12-23 21:51  cubika  阅读(1175)  评论(0编辑  收藏  举报