SIP协议学习随笔

  1. SIP is based on an HTTP-like request/response transaction model.
  2. 一次通话的交互模型
              atlanta.com  . . . biloxi.com
                 .      proxy              proxy     .
               .                                       .
       Alice’s  . . . . . . . . . . . . . . . . . . . .  Bob’s
      softphone                                        SIP Phone
         |                |                |                |
         |    INVITE F1   |                |                |
         |--------------->|    INVITE F2   |                |
         |  100 Trying F3 |--------------->|    INVITE F4   |
         |<---------------|  100 Trying F5 |--------------->|
         |                |<-------------- | 180 Ringing F6 |
         |                | 180 Ringing F7 |<---------------|
         | 180 Ringing F8 |<---------------|     200 OK F9  |
         |<---------------|    200 OK F10  |<---------------|
         |    200 OK F11  |<---------------|                |
         |<---------------|                |                |
         |                       ACK F12                    |
         |------------------------------------------------->|
         |                   Media Session                  |
         |<================================================>|
         |                       BYE F13                    |
         |<-------------------------------------------------|
         |                     200 OK F14                   |
         |------------------------------------------------->|
         |                                                  |
         Figure 1: SIP session setup example with SIP trapezoid
  1. via字段的地址用于指定回复该报文的路由路径,Contact字段地址则指示了呼叫方/被叫方的直接联系地址。invite报文发送每经过一个proxy时,代理服务器都会把自己的domain添加到报文的via域里面。而invite的回复报文每经过一个代理服务器时则从via字段中移除自己的domain地址。

  2. sip协议本身并不规定会话双方的媒体类型,编解码、采样率。但sip协议的body部分会携带一个基于SDP协议的报文信息。会话描述由SDP协议来规范。

  3. 如果再应答报文中有超过一个Via头域值存在,那么UAC应该丢弃这个消息,因为超过一个Via头域值,说明该报文被错误路由或者被破坏了。

  4. 当收到一个3xx的重定向应答时,客户端应该用在Contact的头域中的URI来组织一个新的请求。

  5. sip注册服务器和sip代理服务器属于逻辑设备,它们一般部署在同一个区域,可以在同一设备上也可以位于不同设备上。UAC可以通过sip代理服务器向sip注册服务器进行登记注册。

                                                     bob
                                                   +----+
                                                   | UA |
                                                   |    |
                                                   +----+
                                                      |
                                                      |3)INVITE
                                                      |   [email protected]
             chicago.com        +--------+            V
             +---------+ 2)Store|Location|4)Query +-----+
             |Registrar|=======>| Service|<=======|Proxy|sip.chicago.com
             +---------+        +--------+=======>+-----+
                   A                      5)Resp      |
                   |                                  |
         1)REGISTER|                                  |
                   |                                  |
                +----+                                |
                | UA |<-------------------------------+
       cube2214a|    |                            6)INVITE
                +----+                    [email protected]
                 carol
                          Figure 2: REGISTER example
    
    1. expires头域的值表示UA绑定的有效时间,是以秒为单位的整数
      法的值应当视为3600。该参数缺省时,有效时间由UAS来决定。当REGISTER报文中的expires值为0,则表示该报文为remove binding的报文。
    2. 当更改一个已经存在的会话(包括修改地址、端口、增加删除媒体流等等),可以通过罚球新的INVITE请求来完成,这个新的INVITE请求是基于建立会话所相同的对话,这个请求也就是re-INVITE。应用场景包括呼叫保持和呼叫转移等。
    3. SIP Proxy包含无状态proxy和有状态proxy。无状态proxy对请求和应答进行简单转发(也涉及修改传输层的信息)。而有状态proxy则会保留记录每一个请求和应答的相关信息,用于处理后续的相关消息(如路由到多个地点,涉及修改到传输层和事务层信息)。
    4. Proxy Route处理的总结
      在没有本地策略的情况下,proxy对于包含Route头域的请求处理可以归结于如下的步骤:
      a. proxy会检查Request-URI。如果它指向的是本proxy所负责的区域,那么proxy会用位置服务的结果来 替换这个URI。否则,proxy不改变这个URI。
      b. proxy会检查Route头域的最上URI。如果这个URI指向这个proxy,这个proxy从Route头域中移除(这个路由节点已经到达)。
      c. proxy会转发请求到最上的Route头域值所标志的URI,或者Request-URI(如果没有Route头域)。proxy产生地址,端口,通讯协议等等用来转发请求所必须的参数。
      如果在请求的路径中,没有严格路由节点,Request-URI会始终标志着请求的目的地。
    5. sip账户注册是基于http的Digest认证方式来认证。如果UAS要求认证,则会发送一个Authentication Required的回复包并携带一个随机数(盐值),UAC使用该盐值对认证密码盐化后重新发送REGISTER报文给认证服务器。

你可能感兴趣的:(sip,voip)