《On Sharing an FIB Table in Name
Abstract
作为一种新的网络模式,命名数据网络(NDN)技术专注于内容,使用内容名称作为转发和路由的标识符,而不是当前Internet上的ip地址。NDN路由器通过查找转发信息库(FIB)转发数据包,FIB的每个条目都有一个名称前缀和输出端口。FIB应该具有转发任何内容的兴趣包的信息。因此,在NDN路由器中FIB的大小将非常大,并且用于构建FIB的流量将非常大。为了减少与建立FIB表相关的流量和存储FIB表所需的内存,本文提出了一种新的有效方法,将网络连接的路由和使用Bloom过滤器构建转发引擎相结合。我们建议使用Bloom过滤器共享FIB的摘要,而不是公布每个名称前缀。该方案的转发引擎是bloomfilters的组合,所以forwarding的内存需求可以比常规FIB小得多。在真实网络拓扑下使用ndnSIM进行的仿真结果表明,该方法可以获得与传统链路状态算法几乎相同的性能,只需分配6-8%的连接信息流量和5-9%的内存消耗。
背景
在NDN中,FIB类似于存储内容源信息的路由表。利息包是通过查找FIB来转发的。FIB中应该具有网络中任何内容的输出Face。由于内容种类繁多,且内容名称的长度是不固定的,理论上是无限的,因此即使内容名称可以汇聚,它会大于域名总数。 预计FIB表的大小将比IP转发表大得多,因此在构建FIB表时引起的流量也可能很大。 有效的路由和转发算法对于NDN的成功实现必不可少。
目的
(1)减少与建立FIB表相关的流量;
(2)减少用于存储FIB表的内存需求。
为了减少在每个路由器上建立FIB表的流量,本文提出了一种共享NDN网络连接信息的有效方法。要使用布隆过滤器来共享一组名称前缀的摘要,而不是通告每个名称前缀。此外还可以基于查询布隆过滤器(而不是在每个路由器上存储FIB表)来转发兴趣包,以减少内存消耗。
布隆过滤器(Bloom Filter)
直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。
它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报)。
算法:
- 首先需要k个hash函数,每个函数可以把key散列成为1个整数
- 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
- 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
- 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。
概率推导:
论文所述的方法
由于名称前缀的数量将比IP前缀的数量大得多,因此构建FIB表将消耗大量网络带宽。 本文的目的是减少与构建FIB表相关的流量以及用于存储FIB表的内存消耗。 为了减少构建FIB表的流量,本文建议使用Bloom过滤器共享连接信息。 另外,为了减少FIB表的内存消耗,本文建议在每个Face上存储Bloom过滤器,而不是FIB表,并根据Bloom过滤器的查询结果来转发兴趣包。
共享连接信息
路由器构建一个FIB表,并以Bloom过滤器的形式创建FIB表的摘要,称为摘要Bloom过滤器(S-BF)。通过对FIB表中的每个名称前缀逐一编程来构造S-BF。在构建S-BF之后,路由器通过泛洪的方式将包含连接信息的S-BF传播到相邻节点。由于在网络中共享在S-BF中编程的一组名称前缀,而不是实际的名称前缀和链接状态信息,传输S-BF消耗的带宽比传输实际名称前缀少得多,所以用于传播连接性信息的流量大大减少了。
每个节点通过组合接收到的S-BF来构建转发布隆过滤器(F-BF)。 一个节点具有n个F-BF,其中有Face数,以及专用于Face的F-BF表示为F-BF[i]。通过对接收到的S-BF进行按位或运算来构造F-BF。通常情况下使用首先到达的S-BF通过最短路径转发数据包来构建F-BF。
如果节点通过不同的Face收到重复的S-BF,则意味着到发布者的多个路径可用。 作者的工作使用首先收到的S-BF建立F-BF。 但是,可以将多个S-BF之间的时间差用于对Face进行排名。 由于方案以完全分散的方式工作,因此每个节点都在淹没S-BF之后立即终止共享连接信息,并且每当有新的S-BF到达时就重复进行一次。 当用于传播连接性信息的过程完成时,FIB表仅存储在连接到网络外部的边缘节点上。 内部节点的每个面上只有一个F-BF。 节点不可能知道连通性信息是否传播到网络中的所有其他节点。 但是,即使在共享连接信息的过程中,也可以进行数据包转发。
包转发过程
兴趣包根据F-BF的查询结果转发,并不进行FIB表的搜索,当兴趣包到达后,查找在该节点上每个Face端口的F-BF。使用最长的名称前缀匹配,从兴趣包的整个名称开始依次递减长度进行查询。当Face数量多时为了减少查询时间,将多个F-BF合并为一个功能性Bloom过滤器,其中每一列代表Face的F--BF。在查询中由哈希索引指定的单元按位与,以获得结果向量。
由于Bloom过滤器不会产生漏判,因此保证兴趣包一定能转发到内容源,但由于误报,查询结果可能会是假的因此被转发到错误路径。为避免这种情况,使用辅助的FIB表。当兴趣包匹配得到多个Face时,向所有Face均发送,如果在其中一个Face上收到了一个数据包回复,则将该端口添加一个条目到辅助FIB表中。辅助FIB表仅在F-BF产生多面正片时使用。
整体流程图如下所示。
实验
作者使用了ndnSIM进行实验,拓扑为包含2000个以上节点的网络,包括生产者和消费者。 当生产者平均连接到十个骨干节点时,一个节点中的消费者数量是随机选择的。 假设每个名称前缀负责十个内容,并且每个使用者为单个名称前缀生成兴趣包。 从ALEXA(Alexa the Web Information Company. Available online: http://www.alexa.com (accessed on 5 August 2019))获取的真实URL数据用作名称前缀。在各种Zipf参数(Breslau, L.; Cao, P.; Fan, L.; Phillips, G.; Shenker, S. Web Caching and Zipf-like Distributions: Evidence andImplications. In Proceedings of the IEEE INFOCOM, New York, NY, USA, 21–25 March 1999; pp. )下进行了性能评估,这些参数表明了内容的受欢迎程度。 每个实验的运行时间为60秒,每个消费者根据Poisson分布每秒生成10个兴趣包。 因此,总共发出了60万个兴趣包。
作者分别验证了四种拓扑下,以平均条数、数据包数和内存消耗为指标的场景,每个场景下分别对BF大小1K2K4K8K和最短路径方法进行验证。
Conclusions
为了成功实现NDN,有效的路由和转发算法必不可少。本文提出了一种新颖的方法,该方法使用Bloom过滤器将路由和转发结合起来,以减少通信量和构造FIB表的内存。 连接信息以摘要布隆过滤器(S-BF)的形式共享。 节点收集这些S-BF,然后形成转发布隆过滤器(F-BF)。 通过查询F-BF传递兴趣数据包。 为了防止由于Bloom过滤器的误报而引起的流量过大,我们还建议使用辅助FIB表。性能评估是使用ndnSIM进行的,该技术使用从Rocketfuel获得的真实拓扑进行计算,范围从2163到2279个节点,有1000个消费者和生产者。 仿真结果表明,与链路状态算法相比,所提出的方案可以实现近乎最佳的性能,同时显着减少了用于显着减少存储器数量的路由的网络流量。 所提出的方案不需要关于网络拓扑的任何先验知识,并且可以完全分布式的方式工作。