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 用于中断呼叫。
返回的状态码
- 1XX 临时响应、表示请求消息正在被处理
- 2XX 成功响应、表示请求已被成功接收完全理解并接收
- 3XX 重定向响应、表示需采取进一步完成请求
- 4XX 客户机错误、表示请求消息中包含语法错误信息或服务器无法完成客户机的请求
- 5xx 服务器错误、表示服务器无法合法完成请求
- 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