SIP协议及新IP企业通信网络技术概论-核心SIP技术介绍-4-定位服务查询服务流程-DNS查询流程

在上一篇文章中笔者主要介绍了SIP注册,重新注册,使用SIP代理服务器的原因和各种SIP代理服务器以及转发模式的处理流程。在SIP呼叫方发起呼叫之前,SIP终端需要经过SIP代理服务器查询,SIP代理服务器还要查询定位服务器来获取被呼叫方的目的地地址。因此,定位服务器扮演着重要的任务。SIP代理服务器必须通过定位服务器查询,返回呼叫目的地地址,然后进行最终INVITE转发,实现完整呼叫流程。笔者这里为读者详细说明SIP定位服务器的处理流程以及SIP定位服务器资源存储流程。我们将讨论SIP定位服务以及定位服务器资源和通过DNS查询获取定位信息的处理流程。

1

SIP定位服务或者定位服务器

在前面的章节中,我们一直在介绍呼叫的同时,也会提到SIP定位服务。没有SIP定位服务,SIP呼叫不可能完成。但是,SIP定位服务或者服务器通常没有出现在我们一般的用户配置的物理逻辑实体中,其存在形态相对比较抽象。在RFC3261的规范中,SIP的功能之一就是用户定位,通过用户定位来决定通信的系统终端。另外,在RFC3261中定义了支持用户定位的定位服务,在规范中定义了定位服务是SIP转发服务或者SIP代理用来获取被呼叫方可能的定位信息的服务。它包含一个各种AOR和Contact绑定关系信息列表,其绑定更新也可能经常更新,添加或者删除。具体关于定位服务的完整处理流程,读者可以参考笔者历史文档:深入理解SIP服务器的注册和定位服务流程笔者特别强调,在一般的企业网络中,我们也不会看到单独的定位服务器来提供定位服务,它和其他的SIP代理,例如注册服务构成一个一体的处理单元来提高定位服务。前面我们的很多图例已经说明,读者可以参考。在具体的定位服务处理中,定位服务器通过定位数据库结合注册服务来实现定位信息更新或者管理。在以下示例中,SIP定位服务和注册服务部署在一体环境中,用户从发起呼叫到查询定位大概经过六个核心的步骤。定位服务器本身部署了一个数据库,此数据库用来存储SIP UA的位置信息,SIP registrar(注册服务)负责处理来自于SIP UA的register和re-register 消息,并且不断更新其位置信息。SIP代理服务器将通过UA发起的SIP INVITE消息中的目的地SIP URL,找到当前目的地的位置信息。一旦,其呼叫目的地地址应答了这个呼叫,SIP代理将前转这个INVITE请求到目的地地址,然后通知呼叫方其呼叫处于“trying” 状态。 

SIP定位服务的资源可以来自于不同的用户存储资源。一些用户可能使用自己的本地服务器来存储定位服务,一些比较大的客户可能通过LDAP协议使用微软的AD(Active Directory),或者通过A记录,SRV,NAPTR使用DNS服务器来获取SIP定位服务的用户数据。关于SIP定位服务,RFC3263规范有非常详细的说明,读者可以查阅参考资料链接做进一步了解。

当然,针对以上几种关于定位服务器部署,目前很多用户根据自己的实际业务需求做相应调整。随着用户数量不断增加,用户场景不断迁移,终端不断切换,对其注册资源和定位服务有更大的挑战。注册查询时间延长,意味着呼叫时间就会延长,最终直接影响其他的定时器时间等问题。读者如果需要了解SIP网络性能指标的话,可以参考笔者历史文档:完整RFC6076-端对端SIP网络九大性能评价指标(KPI)概论和时延产生其他因素的相关性讨论在本地安装的数据库服务中,用户也需要考虑各种数据库访问和支持包之间的优化关系。例如,很多用户经常使用的OpenSIPS,MYSQL,和GCC等。以下示例是C. P. Wright和其他研究人员在2010年在IBM发布的一篇关于SIP服务器性能的研究论文-SIP server performance on multicore systems

在这篇论文中,研究人员针对系统底层基础应用服务器的性能进行了对比测试,也包括了多核CPU,MYSQL数据库,OPENSER,GC等安装支持。虽然,我们目前使用的平台和部署方式发生了很大变化,但是,其性能瓶颈和以前有非常多的相似之处,我们仍然需要考虑数据库连接的性能,OpenSIPS的性能,支持包的优化等问题。另外,在具体的OpenSIPS环境中,opensips官方使用了 usrloc 模块对User location test,随着用户增加,使用不同的mysql Prepared Statements命令取得了非常不同的性能。

目前看,用户本地安装的服务器和DNS服务器相对符合现在用户的需求以及未来的扩展,微软的AD则相对比较封闭,不利于用户充分扩展其服务。特别是近几年,SIP网络部署都已经在全球部署,通过DNS定位的需求相对比较大,本地部署则维持正常需求水平。

2

DNS服务器支持SIP定位服务的处理流程

在本章节中,笔者通过以下示例结合前面的章节来更加细致地介绍一下如何通过DNS查询以后实现的呼叫流程。

在以上图例中,首先eric通过SIP终端呼叫方对自己的代理服务器发送一个呼叫INVITE请求,在SIP服务器进行不同需求处理,注意,这里的SIP服务器(包括了注册服务,定位服务和转发服务代理)。SIP代理服务器查询DNS找到其呼叫目的地地址,域名是freepbx.cn。DNS会对不同的DNS服务器发送DNS查询请求。DNS服务器通过DNS查询以后,结合SRV,NAPTR地址,DNS服务器发现 _sip._udp.freepbx.cn绑定的是一个具体的IP地址(IP address=11.10.9.8,这里是假设地址)。然后,DNS返回地址11.10.9.8,然后SIP服务器中的SIP代理转发这个目的地地址到另外一个SIP代理服务器地址,然后SIP代理服务器呼叫其UA终端。这里,我们假设SIP的DNS查询服务仅使用了一次查询就获得了地址。在实际DNS查询中可能还要查询更多的DNS服务以及下一跳服务器地址等比较复杂的查询。当然,在DNS查询处理中,查询服务还要涉及ENUM,具体的规范和协议包括RFC6116等规范,我们将在后续的系列讲座中会对ENUM进行比较详细说明,这里不再做过多说明。

3

总结

在本章节中,笔者介绍了关于定位服务的基本流程和六大步骤,然后介绍了关于定位服务的资源存储问题以及资源池的部署。针对SIP配合DNS查询服务做了比较深入的讨论。在各种SIP定位部署环境中,因为业务场景不同,一些用户使用的资源服务也不同。笔者重点介绍了比较常用的DNS查询方式。但是,为了实现DNS查询的稳定性,用户同样需要考虑很多方面的问题,例如DNS服务器的稳定性,终端的兼容性等。在下一个章节中,笔者将进一步介绍关于SIP 客户端和SIP消息方面的内容。

参考资料:

https://docs.microsoft.com/zh-CN/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview

https://www.ietf.org/rfc/rfc3263.txt

C. P. Wright,E. M. Nahum,SIP server performance on multicore systems

www.dinstar.cn

www.asterisk.org.cn

https://www.opensips.org/About/PerformanceTests-PreparedStatements

https://www.rfc-editor.org/rfc/rfc6116.txt

https://www.denic.de/fileadmin/public/events/ENUM_days/2005/ott_20050301.pdf