zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    BufferedGraphics 性能测试
    ManualResetEvent 与 AutoResetEvent 区别
    管道式编程(收藏)
    C# 中扩展方法应用
    WinForm Invoke 调用 传入 out 类型参数
    断路器选型的一些理解
    为什么通了PE线,现场设备外壳还需要接地?
    RS485终端电阻解释
    驱动器的“安全转矩关断(Safe Torque Off,STO)”
    TCP和UDP的优缺点及区别
  • 原文地址:https://www.cnblogs.com/cubika/p/2830328.html
Copyright © 2011-2022 走看看