1、SIP Registration
SIP 注册服务器是终端用户实现注册功能,认证相关功能所必须的一步,通过SIP成功验证,可以完成对终端功能所进行的验证,允许用户执行相关的功能支持。用户可以参考RFC 3840 中的contact的功能描述,了解完整的功能支持列表。用户的终端启动以后,SIP电话注册时,用户可以通过检查Registration的注册包的Contac的消息中看到用户终端所显示的功能状态信息。例如,图例中的mobility表示是一台固定终端支持audio,actor=principal表示是一个人。
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011102654698.jpg)
持。用户可以参考RFC 3840 中的contact的功能描述,了解完整的功能支持列表。用户的终端启动以后,SIP电话注册时,用户可以通过检查Registration的注册包的Contac的消息中看到用户终端所显示的功能状态信息。例如,图例中的mobility表示是一台固定终端支持audio,actor=principal表示是一个人。
2、SIP Re-registration
通过字面的意思读者也可以了解到,终端的形式或者状态发送了改变以后,需要重新注册(同样一个帐号,可能原来是物理终端,现在换成了软电话形式或者在家办公),执行所谓的Re-registration 流程,保证终端用户可以再次执行所支持的功能。
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011102738417.jpg)
3、SIP proxy server
SIP proxy 服务器是用来转发请求到下一个服务器,它可以解析请求消息,如果有必要的话,它也rewrite 请求消息,然后转发到下一个服务器。当然,它也可以发起请求和响应消息,可以作为客户端或服务器端使用。
典型的SIP Proxy 之间的终端呼叫流程如下:
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011102823666.jpg)
它支持两种状态的处理:
- Stateful Proxy: 简单来说,它可以保持或记忆所有进入的会话和出去的会话。当然,此场景可以支持多种业务处理,例如,计费,呼叫/忙状态响应等等业务。如果用户使用Kamailio的话,这些状态信息都存储在内存中。
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011102903214.jpg)
- Stateless Proxy:简单来说,一旦生成新的出局的请求,马上清除所有经过(历史)的会话。此场景可用于大并发场景,proxy处理的流程比较简单。更多的作用在于呼叫的均衡负载处理或者重定位的处理。Proxy 负责查询到终端用户的信息,然后呼叫方再次对被呼叫方再次发起一个INVITE,然后进行对对点呼叫,降低了Proxy的负载,最终提高了并发量的处理。
- 比较简单通俗的比喻是:Stateless Proxy是一个网络中的switch,它实现简单的转发处理;而Stateful Proxy是一个网络防火墙,它则可以对SIP header实现查看,修改,路由,涉及到了SIP dialog 和BYE整个过程处理。
4、Location Server
一般来说,我们通常很难发现一个物理的Location 服务器,事实上,市场上很多公司提供这样的解决方案。Location 服务器的作用在于通过location 服务器的数据库查找用户的服务器所属信息,它用来支持SIP Proxy和重定向服务器的逻辑处理。它可以提供对proxy 服务器和注册服务器的以下要求:
- 注册服务器通过查询Location 服务器来获得客户端的注册消息。
- Proxy 服务器可以通过Location 服务器数据库查询所提供的服务消息,如果获得了SIP URL和SIP INVITE消息以后,则发送此消息到目的地地址。
- 事实上,Location 服务器提供了多种查询服务来查询最终客户端的信息,它可以支持LDAP协议查找,也可以支持DNS服务器来查找。
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011103232715.jpg)
以下讨论介绍了一个如何实现DNS查找来呼叫另外一个终端的实现路径:首先客户A 对客户B 通过Proxy 服务器发起一个INVITE 消息,Proxy服务器通过DNS服务器查询这个客户B的URL地址,DNS通过URL地址查询到IP地址以后,回复给Proxy服务器,Proxy服务器然后对此IP地址发起一个INVITE 请求,此Proxy根据所属用户地址对终端B 发起一个INVITE 请求,最终实现呼叫流程。
![](http://www.ctiforum.com/uploadfile/2017/1011/20171011103317847.jpg)
我们在本章节中介绍了几种服务器的类型和各自扮演的角色。在实际场景中可能几个服务器都集合为一台服务器来实现某些功能。用户可以根据自己的需求做进一步的分析和学习。
关注公众微信号:asterisk-cn 获得更多有价值的企业通信行业技术分享,访问技术论坛获得技术帮助:www.issabel.cn/forum