我是靠谱客的博主 完美砖头,最近开发中收集的这篇文章主要介绍SIP协议-注册过程概述,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

注册过程

  1. 注册过程图
    这里写图片描述
    Carol使用记录地址“sip:carol@chicago.com”在SIP注册服务器的chicago.com域注册。chicago.com域的代理服务器将使用Carol的注册,将Carol的记录地址拿到定位服务中查询,找到真实终端地址,然后路由到Carol的真实终端。
  2. 注册描述
    1. 如果用户要发起和另一个用户的会话,SIP必须发现可到达目的用户的当前主机。(代理服务器和重定向服务器——他们负责接收请求,决定要发送请求的用户位置,然后发送到相应位置。)
    2. 这就需要特定域的地址绑定,这些地址绑定将输入的SIP和SIPS URI(如sip:bob@biloxi.com)映射到想要的用户更近的一个或者多个URI(如sip:bob@engineeringbiloxi.com)。
    3. 然后代理查询定位服务,找到用户代理。
    4. 一个用户可能注册多个代理,Register请求可以进行添加、删除和查询绑定(200OK时候会返回绑定列表)。

注册过程头字段的含义

  1. Request-URI:注册服务器指明的定位服务域,不能出现SIPS URI的userinfo和@组件。
  2. To:记录地址(一个记录地址可以绑定多个SIP终端),该字段和Request-URI主要不同在于该字段包含用户名(要和用户绑定肯定要加用户名),该字段相当于Key,每次发请求时候的To其实就是这个key,通过这个key来查找绑定的终端。
  3. From:如果不是第三方注册,就和To字段保持一致。
  4. Call-ID:对于同一用户的同一终端,注册和解绑时候的该字段是一致的。
  5. CSeq:每个使用相同Call-ID的请求,每次逐一增加该字段值。
  6. Contact:要绑定的SIP终端(可以理解为真实地址),即value,一个To绑定多个Contact。该字段有一个参数expires
    -expires:表示UA绑定有效时间。单位:秒。如果不提供该参数,则使用expires头字段的值代替。不规范的值视为3600(即一小时)。
  7. Record-Route:该字段必须忽略。

删除绑定

  1. 可以通过给Register请求的Contact设置绑定时间为0,则会立即删除绑定。
  2. Contact字段为“*”表示用于所有注册,此时Expires头字段只能用0表示,即“*”只能用于解绑

提取绑定

-Register请求成功的响应会包含所有现有绑定。

更新绑定

-根据Contact字段Expires参数进行比较更新过期时间

注册服务器处理Register请求大致过程

  1. 检查Request-URI,确定是否可以访问该字段指定域的绑定,如果不能,可以当做代理服务器进行转发。
  2. 认证UAC
  3. 判断当前用户是否有权修改记录地址的注册,如果不行,返回403
  4. 从To字段取出记录地址,如果记录地址不可用于R-U域,那么注册服务器发送404结束。
  5. 检查Contact
  6. 依次处理Contact头字段每个联系地址,每个地址按照如下方法更新过期时间
    1. 字段有expires参数,此值当做过期时间
    2. 没有该参数,但是有Expires字段,此值作为过期时间
    3. 都没有,本地配置默认时间当做请求到期时间

搜索当前绑定列表,如果绑定不存在,暂时添加。如果绑定存在,检查Call-ID值,如果现有绑定的Call-ID值与请求中的Call-ID不同,如果过期时间间隔为0或者有其他更新,必须删除绑定。如果相同,比较CSeq值,如果高于绑定的值,就要进行更新了。


SIP注册流程包分析

下面是两个客户端1和2,客户端都位于139,注册服务器位于168

  1. 用户2向注册服务器发起请求
    这里写图片描述

    -Request-URI168域(注册服务器域)
    -Contact:表示要绑定的SIP客户端地址
    -Expires10分钟过期
    -To:客户名@168域,FromTo一致
    -Call-IDSIP客户端一致时保证该字段一致
    -CSeq1
  2. 注册成功响应返回
    这里写图片描述

    Contact:返回现有绑定列表
  3. 用户2向服务器注册另一个客户端地址
    这里写图片描述

    -Contact:新的客户端地址
    -Call-ID:绑定新的客户端地址,所以产生新的该字段
    -CSeq1
  4. 用户2注册第二个地址成功的响应
    这里写图片描述

    Contact:返回现有列表,可以看出来新增了绑定
  5. 用户1注册第二个地址(第一个未截取图,所以CSeq是2)
    这里写图片描述

  6. 用户1注册成功返回响应
    这里写图片描述

  7. 用户2解绑5060端口的客户端
    这里写图片描述

    -Call-ID:跟之前的5060端口注册时候一样
    -Expires:为0表示解绑
    -CSeq:在之前的基础上加1
  8. 解绑成功响应
    这里写图片描述
    -Contact:比之前少了一个绑定地址

最终建立通话时候使用的目的地址To都是地址记录(即key),如sip:2@10.103.240.168sip:1@10.103.240.168,定位服务进行解析查找绑定的实际客户端地址,使用实际地址去建立通话连接,如sip:2@10.210.24.139:5060sip:2@10.210.24.139:61509sip:1@10.210.24.139:5060

最后

以上就是完美砖头为你收集整理的SIP协议-注册过程概述的全部内容,希望文章能够帮你解决SIP协议-注册过程概述所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部