APP下载

服务发现与资源发现的比较与分析

2019-12-09胡浩

智富时代 2019年10期

胡浩

【摘 要】DNS服务发现和COAP的资源发现是IOT自动配置的重要方法,本文根据几个性能指标比较分析基于coap和dns的服务发现协议,这些指标包括协议开销和发现功能。

【关键词】服务发现;资源发现;协议开销;发现功能

1.协议开销

1.1 coap的协议开销比较

假设在星型网络中具有两个CoAP服务器和一个CoAP客户端,COAP服务器的服务路径为/light/5/on,资源类型为rt=philips.light.on,分别比较分布式和集中式CoAP资源发现机制的协议开销,对于集中式COAP,因为每个设备都必须独立的发现RD并注册于RD。协议开销与设备数量成正比。对于具有大量设备的网络来说,RD发现过程非常低效,因为相同的RD发现信息必须独立地传输多次。而RD查找开销主要与查找响应相关,响应中包括所有注册设备资源的完整的路径,例如;rt=philips.light.on,。;rt=philips.light.on,两个URI中的许多信息是重复的,只有IP地址发生了改变(从2002:50到2002:51),如果RD能减少这种冗余开销,则协议开销会大幅减少。

另一方面,对于COAP分布式发现,节点不进行RD发现和注册。查找是由不可靠的多播(Mulighticast Lookup)执行的。从总体上看,分布式优于集中式。此外,分布式查找开销较低,因为只传输资源的路径而不是完整的URI,例如;RT=“philips.light.on”,IP地址可以从数据包源地址推断出来。

然而,分布式多播使用了一个ttl值,表示组播数据包可以遍历的跳数。若ttl=1,多播请求只能由客户端发送,而不能由任何服务器转发,可以保证较低的协议开销,而多跳网络中ttl>1,多播包就会被转发多次,此时无法保证较低的协议开销。此外,在远程客户端上,将无法执行多播发现。因此,多播方法更适合于在小型低功率网络中执行查找,这种网络无需远程客户端的发现。或者RD可以作为客户端使用多播查找来填充其目录。这样RD既可以主动发现服务器资源,又可以为远程客户端提供资源发现。

2.DNS-SD协议开销比较

本节分析与DNS-SD协议相关联的服务发现协议开销。对发现过程的不同阶段进行了分析。即发布(public)、本地和全球的浏览(browse),本地和全球解析(resolution)。此外,分析了两个不同的DNS-SD开源实现的开销:Avahi[1]和轻量级多播DNS(LmDNS)[2]。Avahi是DNS-SD 基于Linux操作系统的mdns免费实现,而lmDNS是一种轻量级的mdns实现,用于使用Contiki操作系统开发的支持IP的智能对象。

假设星型网络由两个服务器和一个客户端组成。可以看到,Avahi实现在发布的开销很多。因为它将发布分成探测消息和通告消息。探测消息最多发送三条消息来查询服务实例名称是否已经被其他设备使用,当检测到服务实例名称冲突时,必须选择新的服务实例名称。如果没有冲突,则发送通告消息,这导致相同的信息被发送了四次:探测消息最多发送三次TXT和SVR记录,通告发送TXT、SVR和PTR。lmDNS探测消息只发一条消息。无冲突就发通告。lmDNS减小了开销。

在浏览和解析方面,lmDNS在开销方面再次优于Avahi。这是因为Avahi在响应中包含了所有可用的记录,而lmdns只包含了必要的信息。对于本地或全局(单播)浏览两者开销基本相当,综合来看,Avahi只适合于边界路由器而不适合于低功耗网络。

3.DNS-SD与CoAP资源发现协议开销比较

对比lmDNS与分布式CoAP的开销,COAP的效率要高得多。在分布式情况下,由CoAP只执行多播或单播查找,服务器网络的开销约为100-150字节。而mDNS在通告、浏览和解析阶段,消息传输的总开销约为700字节。因此,lmdns是分布式CoAP七倍的开销。因此,取决于网络变化的频率,由于连接性、移动性、节点死亡等方面的变化,lmdns的较高开销将增加设备的能耗并减少设备的寿命。总之,CoAP发现协议在开销方面比DNS发现协议表现出更好的性能。只有在与现有域名系统快速集成时才考虑DNS服务发现,一般可在后端(back-end)使用DNS-SD,现场使用CoAP,以减少开销。

4.发现功能

CoAP使用?Key=Value一次查询就能发现不同类型的资源。例如,为了查找具有两种类型的资源的设备,可以将查询编写为:?rt=philips.light.on&RT=philips.light.dimmer,用于查找兼具光开关和调光功能的设备资源。另一方面,DNS一次只能查询一种类型。

CoAP允许使用通配符模式,例如:?RT=core.rd*,以便获取任何匹配core.rd的资源。DNS不支持通配符。

在发出发现请求后,CoAP直接提供资源URI。dns-sd发现提供服务实例。然后通过服务实例解析为IP地址或主机名。

总之,基于CoAP的资源发现允许一组更高效、更丰富的机制来执行查找。任何实现CoAP的设备能够执行CoAP资源发现,无需引入其他请求方法。对COAP-RD,end-point几乎不需要额外的功能就能在RD中注册或执行查找。另一方面,dns-sd已经是非嵌入式設备发现的事实标准,使用DNS-sd允许中心化的服务发现,也可以使用单播DNS方法执行发现。由于dns-sd使用标准的dns数据包格式查询,使用dns-sd的LoWPAN网络将更易于与外部的dns快速集成,相较于mdns,mdns则需要额外的客户端内存来存储从服务器接收到的服务发现信息。

【参考文献】

[1] Avahi实现 http://avahi.org/

[2] A. J. Jara, P. Martinez-Julia, A. Skarmeta. Light-Weight Mulighticast DNS and DNS-SD (lmDNS-SD): IPv6-Based Resource and Service Discovery for the Web of Things. Sixth International Conference on Innovative Mobile and Internet Services in Ubiquitous Computing (IMIS), 2012.