【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译

ndnSIM: NDN simulator for NS-3

Alexander Afanasyev, Ilya Moiseenko, and Lixia Zhang

 

摘要

      命名数据网络是一种新提出的网络体系结构。NDN保持了因特网的沙漏结构,但发展了细腰部分。代替推送数据到特定位置,NDN通过名字获取数据。一方面,这个简单的改变允许NDN网络使用几乎所有因特网经过良好测试的工程属性,意图不仅仅解决IP通信问题,而且解决数字分发和控制问题。另一方面,分布式体系结构与今天因特网的点对点通信结构存在根本上的差异,这带来了许多新的研究挑战。模拟器可以充当灵活的工具来检验和评估新体系结构的各个方面。为了提供提供给整个研究团体通用的模拟平台,我们开发了基于NS-3的开源模拟器,ndnSIM,来以模块化方式真实地实现NDN网络的基本组件。本文提供了一个ndnSIM的概述。

 

1   引言

      命名数据网络对因特网通信范式引入的根本性改变要求对NDN设计的各个方面广泛的多维度的评估。尽管随着测试床的部署,现存的NDN的实现(CCNx项目)可以用来评估NDN基础设施设计和真实世界环境下的应用程序,但对于NDN设计,CCNx项目用不同的设计选项进行实验很困难,在大规模部署中也不可能评估设计选择。为了满足这样的需求并详尽地提供给研究团体共同的实验平台,我们开发了开源NDN模拟器,ndnSIM,基于NS-3网络模拟器框架。

      ndnSIM的设计具有下面的目标:

      (1) 一个开源的包,允许研究团体在一个共同的模拟平台上运行实验。

      (2) 能够如实地模拟所有的基本NDN协议操作。

      (3) 维持CCNx实现中包级的互操作性,允许共享CCNx和ndnSIM之间的流量测量和包分析工具,并直接使用真实的CCNx流量轨迹来驱动ndnSIM模拟实验。

      (4) 能够支持大规模模拟实验。

      (5) 在网络层实验中增加路由、数据缓存、包转发和拥塞管理。

      遵循NDN体系结构,ndnSIM作为一个新的网络层协议模型实现,可以运行在任何可用的链路层协议模型(点对点,CSMA,无线等)、网络层协议模型(IPv4,IPv6)和传输层协议模型(TCP,UDP)之上。这种灵活性允许ndnSIM模拟各种各样的同构场景和异构部署场景(例如,仅有NDN的、在IP之上的NDN等)。

      模拟器以模块化形式实现,使用单独的C++类集来建模NDN中每个网络层实体的行为:待定兴趣表(PIT)、转发信息表(FIB)、内容缓存(CS)、网络和应用程序接口、兴趣表转发策略等。这个模块化结构允许任何组件被容易地修改或替换,而对其他组件没有或有最小影响。另外,模拟器提供了大量的接口和辅助器集合,来执行每个组件和NDN交通流详细的跟踪行为。

      我们在2011年秋天开始了ndnSIM的实现工作。我们自己和一些外部的alpha测试者将ndnSIM最初的实现用于各种各样的NDN设计和评估任务。而我们继续积极地进行ndnSIM的开发,ndnSIM的第一个发布版本从2012六月份开始作为一个可用的开源包。我们希望ndnSIM成为广大对NDN研究感兴趣的团体一个有用的工具,研究团体可以向我们提供非常重要的bug报告和新特性开发的反馈。更多关于发布版的细节信息,代码下载,基本例子和额外的文档可以访问ndnSIM站点http://ndnsim.net/。

 

2   设计

      创建开源的NDN模拟包的愿望极大地促进了我们对于NS-3网络模拟器作为ndnSIM基本框架的选择。尽管NS-3相对比较新,并且仍然不具有商业Qualnet或者之前的ns-2模拟器拥有的所有东西(例如,NS-3没有模拟传统动态IP路由协议的本地支持),它提供了一个干净一致的设计,大量的文档和灵活的设计。

      在这部分,我们提供了关于ndnSIM设计的主要组件的描述,包括协议实现组件的描述。

 

2.1  设计概述

      ndnSIM的设计遵从NS-3中网络模拟器的设计哲学,为所有的建模组件设计最大化抽象。与现存的IPv4和IPv6协议栈相似,我们设计ndnSIM作为一个独立的协议栈,可以被安装在模拟网络节点上。除了核心协议栈,ndnSIM包括了大量的基本流量发生器应用程序和辅助器类来简化模拟场景的创建(例如,辅助器来在节点上安装NDN协议栈和应用程序)和为测量目的收集模拟统计的工具的创建。

      下面的列表汇总了在ndnSIM上实现的组件层抽象;图1虚拟了他们之间的基本交互:

【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译

      在第一版中,我们当前的ndnSIM包仅提供链路层ndn::NetDeviceFace和应用层ndn::AppFace。通过这两个接口,我们可以模拟一个完全允许NDN的网络。增加其他类型的接口很简单,我们期望一旦需要模拟更加复杂的场景,我们自己或者研究团体的其他人就可以添加其他类型的接口(例如,NDN节点和不运行NDN协议的节点混杂)。

      接口抽象定义了下面的API:

      (1)SendImpl(特定实现):从NDN协议栈传递包到底层(网络或应用程序)。

      (2)RegisterProtocolHandler(特定实现):允许从底层(网络层或应用层)转发包到NDN栈。

      (3)SetMetric/GetMetric:在路由计算中分配并得到可以使用的接口度量。

      (4)IsUp/SetUp:检查接口是否是启用的,来启用/禁用接口。

      除了基本的API,接口抽象提供了方法来存储任意信息,可以被转发策略模块使用。例如,ndn::fw::SimpleLimits兴趣包转发策略实现了对基于物理链路限制的兴趣包的数量。

 

2.4  内容缓存抽象

      每个NDN路由器的内容缓存允许网络内存储,提供了高效的错误恢复和异步多播数据交付。ndnSIM提供了一个接口插入不同的内容缓存的实现,可以实现不同的索引和项目查询设计,不同大小限制的特征,和不同缓存替换策略。

      当前ndnSIM的版本包含内容缓存抽象的三个实现:最近最少使用(ndn:;cs:;Lru)、先进先出(ndn:;cs::Fifo)、随机替换策略(ndn::cs::Random)。每个实现是基于查找树的动态容器,拥有可选上界的大小和数据包名字中拥有基于哈希的索引(每个组件在查找树上查询)。其他内容缓存模块可能或者被我们自己实现,或者在需要的时候在其他研究团体的帮助下实现。

      内容缓存抽象提供了下面的操作:

      (1) 添加(特定实现):在缓存中缓存新的数据包或者更新现存的数据包。

      (2) 查询(特定实现):为之前缓存的数据包执行查询。

      内容缓存抽象不提供明确的数据移除操作。内容缓存条目的生存时间依赖于交通模型,并依赖于数据生产者提供的数据包新鲜度参数。

 

2.5  待定兴趣表抽象

      PIT(ndn::Pit)为每个转发的兴趣包维护状态,以便为数据包转发提供方向。每个PIT条目包含下面信息:

      (1) 与名字相关的条目;

      (2) 进接口列表,从该接口接收到那个名字的兴趣包,拥有相关信息(例如,该接口上兴趣包的到达时间);

      (3) 出接口列表,兴趣包被转发到的接口,拥有相关信息(兴趣包在该接口上被发送的时间,该接口上兴趣包重传的数量等)。

      (4) 条目到期时间(所有接收到的相同名字的兴趣包中的最大生存时间)。

      (5) 任何其他特定转发策略信息以转发策略标签的形式(任何源自于ndn::fw::Tag的类)。

      当前ndnSIM的版本提供了一个模板化的PIT抽象的实现,可以选择PIT条目数量的边界和不同的替换策略,包括:

      (1) 坚持(ndn::pit::Persistent)——如果PIT大小达到限制,新条目将被拒绝。

      (2) 随机(ndn::pit::Random)——当PIT大小达到限制,随机条目(可能是新创建的条目)将从PIT中移除;

      (3) 最近最少使用(ndn;:pit::Lru)——当PIT大小达到限制时,最近最少使用条目(进接口中最小数量的最老条目)将被移除。

      所有当前的PIT实现在基于查找树的数据结构中组织,数据包名字中拥有基于哈希表的索引(每个组件在查找树中查询),额外的时间索引(通过到期时间)将从PIT中移除超时兴趣包进行了优化。

      新的PIT条目为每个兴趣包创建,使用一个唯一的名字。当该名字的兴趣包之前已经被接收,现存PIT条目的进接口列表因此被更新,高效地聚合(抑制)了相似的兴趣包。

      PIT抽象提供了下面的特定实现操作:

      (1) 查找:为兴趣包或数据包的特定内容名字找到一个相应的PIT条目。

      (2) 创建:为给定的兴趣包创建一个新的PIT条目。

      (3) 标志擦除:移除标志的PIT条目。

      (4) 获得大小,开始,结束,下一步:得到PIT中条目的数量,并循环访问条目。

 

2.6  转发信息表

      NDN路由器的FIB与IP路由器中的FIB大致相似,除了它包含名字前缀而不是IP地址前缀,它通常显示了每个名字前缀的多个接口。它被用于转发策略来做出兴趣包转发决定。

      当前FIB的实现(ndn:;fib::FibImpl)在基于查找树的数据结构中组织,拥有基于哈希表的索引的数据包名字(在查找树中查找每个组件),每个条目包含一个前缀和一个有序出接口列表,通过该出接口,前缀是可达的。接口的顺序定义为一个合成索引,结合接口的路由度量和数据面板反馈。匹配的查询以最长前缀匹配方式在一个可变长度的前缀上执行。

 

2.6.1  FIB总体

      当前,ndnSIM提供了几种方法来在FIB中填充条目。首先,我们可以使用一个模拟脚本来在模拟设置中为每个节点手动配置FIB。这种方法使得用户可以对出现在FIB中的条目进行完全控制,这对于小规模模拟实验工作得很好。然而,它可能使得拥有大型拓扑的模拟实验不可行。

      第二种方法是使用一个中心的全局NDN路由控制器来自动地填充所有路由器的FIB。当请求的(或者在模拟实验运行开始之前,或者在模拟实验期间的任何时间),全局的路由控制器获得关于所有现存节点的信息,这些信息包括已安装的NDN栈,和所有的出口前缀,并使用该信息来计算每个节点对之间的最短路径,并更新所有的FIB。Boost.Graph库(http://www.boost.org/doc/libs/release/libs/graph)被用在计算中。

      在当前的版本中,全局路由控制器使用Dijkstra最短路径算法(使用接口度量)并为每个名字前缀仅安装一个单独的出接口。为了在多路径兴趣包转发场景中做实验,全局路由控制器需要被扩展来填充多个条目的每个前缀。然而,它由特定的模拟实验负责来为多个条目定义精确的依据,例如,是否条目应该代表没有共同链路的路径。我们欢迎建议和/或全局路由控制器扩展,这可以被提交在GitHub站点上(https://github.com/NDN-Routing/ndnSIM)。

      最后,一个简单的填充FIB的方法是安装默认路由(路由到/),包括NDN栈的所有可用接口。该方法对模拟实验可能有用,在没有任何来自路由面板指导的情况下探索兴趣包转发策略怎么找到和维持到前缀的路径。

 

2.7  转发策略抽象

      我们的设计允许各种类型转发策略的实验,不需要任何对核心组件的修改。目标是在一个类似事件的样式中通过引入转发策略抽象来达到(ndn::ForwardingStrategy)实现兴趣包和数据包转发的核心操作。换句话说,兴趣包和数据包处理的每一步,包括内容缓存、PIT、FIB查询,表示为一个虚函数,可以在特定转发策略实现类中被重写。

      更具体地说,转发策略抽象提供了下面的可重写动作集:

      (1) OnInterest:CcnxL3Protocol为每个进来的兴趣包调用该函数。

      (2) OnData:CcnxL3Protocol为每个进来的数据包调用该函数。

      (3) WillErasePendingInterest:在PIT条目被移除之前运行。

      (4) RemoveFace:调用来移除到接口的引用(如果该引用被转发策略实现使用)。

      (5) DidReceiveDuplicateInterest:检测到的重复兴趣包被接收后运行。

      (6) DidExhaustForwardingOptions:当转发策略耗尽所有的转发可选项来转发兴趣包时运行。

      (7) FailedToCreatePitEntry:当创建PIT条目的尝试失败时运行。

      (8) DidCreatePitEntry:成功地创建PIT条目的尝试之后运行。

      (9) DetectRetransmittedInterest:检测到重传的兴趣包之后运行。这甚至是可选的,仅当“检测重传”选项在场景中允许时运行。重传兴趣包的检测基于匹配现存PIT条目的新的兴趣包到达接口时,该接口记录进来条目的列表。更多细节请参考源代码。

      (10)WillSatisfyPendingInterest:待定兴趣包被数据包满足之前被运行。

      (11)SatisfyPendingInterest:满足待定兴趣包的实际过程。

      (12)DidSendOutData:每一次数据包被成功地发送出接口时运行(在拥塞期间或者速率限制模块允许时将失败)。

      (13)DidReceiveUnsolicitedData:每次数据包到达时运行,但该数据包名字没有相应的待定兴趣包时运行。如果“缓存未经请求的数据包”选项可用,这样的数据包将被作为默认处理缓存。

      (14)ShouldSuppressIncomingInterest:兴趣包抑制逻辑的钩子。

      (15)TrySendOutInterest:在接口上实际发出兴趣包之前运行。

      (16)DidSendOutInterest:在接口上成功地发出兴趣包之后运行。

      (17)PropagateInterest:基本的兴趣包传播逻辑。

      (18)DoPropagateInterest(特定实现):特定实现的兴趣包传播逻辑。

      我们期望未来发布更多可以添加到转发策略抽象的事件。同时,额外的事件将通过类继承以面向对象形式被创建。例如,兴趣包NACK扩展(更多细节见文献[5])作为转发策略抽象的局部特征实现。

      图3显示了当前可用转发策略扩展的部分层次(NACK,GreenYellowRed),完全转发策略实现(Flooding, SmartFlooding, BestRoute)可以用于模拟场景中。而所有当前的实现继承自Nack扩展,实现了额外的处理和事件来检测和处理兴趣包NACK,NACK处理默认禁用,可以使用“EnableNACK”选项将其打开。

【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译

      智能洪泛和最佳路由实现依赖于每个接口状态的颜色编码,基于观察到的数据面板反馈。

      (1) 绿:接口正确工作(例如,如果兴趣包被发送到该接口,数据包返回);

      (2) 黄:接口的状态未知(例如,它可能被最近添加,或者一段时间未被使用);

      (3) 红:接口不工作,不应该被用作兴趣包转发。

      状态信息被附加到FIB条目中的每个接口,并首先被初始化到黄状态。每次数据包作为对之前兴趣包的响应被返回,FIB条目中相应的接口被设置为绿色。每次错误发生(PIT条目超时,或者,如果可能,NACK兴趣包被接收),接口返回黄色状态。如果接口没有使用足够长时间,它返回黄色状态。红色状态被分配到接口上,当低层通知NDN栈一个问题(链路失败,连接错误等)。

      下面的列表在当前可用的完全转发策略实现中汇总了处理逻辑:

      (1) 洪泛策略(ndn::fw::Flooding):兴趣包转发到该兴趣包前缀的FIB条目的所有可用接口,除了那个兴趣包的进接口。

      (2) 智能洪泛策略(ndn::fw:;SmartFlooding):如果FIB条目包含至少一个绿色接口,兴趣包仅仅转发到最高排名的绿色接口。否则,所有的黄色接口将被用于转发兴趣包。红色接口不用于兴趣包转发。

      该策略模式可以用在模拟实验中,没有路由输入,数据面板可以使用兴趣包来发现和维持工作路径。

      (3) 最佳路由策略(ndn::fw::BestRoute):转发兴趣包到最高排名的绿色(如果可用)或者黄色接口。红色接口不用于兴趣包转发。

      也存在一个实验性的简单限制转发策略(从ndn::fw::BestRoute继承绝大多数动作),尝试在网络中避免拥塞,并在接口选择过程中通过考虑兴趣包速率限制来最大化网络利用率。例如,如果最高排名接口达到其容量,更特别地,这个接口待定兴趣包的数量达到设定的最大限制——策略将在排序中选择低于限制的下一个接口。

      除了已经实现的策略之外,我们也致力于实现额外的兴趣包转发策略,包括精确建模CCNx实现项目的行为的策略。

 

2.8  参考应用程序

      应用程序使用接口抽象的实现ndn::AppFace与系统的核心相互交互。为了简化特定NDN应用程序的实现,ndnSIM提供了一个ndn::App基类,关注于创建ndn::AppFace,并在NDN协议栈内部进行注册,也为进来的兴趣包和数据包提供了默认处理。

      下面列出的是在ndnSIM中当前可用的应用程序的集合:

      (1) ndn:;ConsumerCbr:一个应用程序产生拥有预定义频率的兴趣包流量(恒定速率、拥有随机一致分发的兴趣包间间隙的恒定平均速率,以指数方式随机等)。生成的兴趣包的名字包含一个可配置的前缀和一个序列号。当特定的交集在一个RTT的超时时间内没有满足(与TCP RTO相同),该兴趣包将被重传。

      (2) ndn::ConsumerBatches:一个开关形式的应用程序在模拟实验的特定点生成特定数量的兴趣包。名字和重传逻辑与ndn::ConsumerCbr应用程序相似。

      (3) ndn::Producer:一个简单的兴趣包槽应用程序,用特定大小和与兴趣包中相同的名字的数据包回复每个进来的兴趣包。

 

3   相关工作

      过去的一些年里,我们的NDN体系结构研究努力致力于开发可以评估的基础设施。

      NDN项目组一个正在进行的工作致力于开放网络实验室(ONL)对于NDN的支持。ONL当前包含14个可编程的路由器,超过100个客户端节点,被链路和各种容量的交换机连接。每个节点和路由器运行CCNx项目的NDN实现。用户可以完全访问ONL的任何节点的硬件和软件状态。在DeterLab 测试床的节点上运行和评估项目CCNx NDN实现也是可能的。拥有可编程的非虚拟化的测试床是一个非常有价值的选择,尽管它的容量被限制来评估相对小的网络。对大规模实验,研究者可能需要依靠模拟实验。

      Rossi和Rossini开发了ccnSim来评估NDN的缓存性能。ccnSim是一个NDN的数据块级可扩展模拟器,在Omnet++框架下用C++编写,允许在大规模场景中评估NDN性能(达到106数据块),运行于标准的消费者级计算机硬件上。ccnSim的主要目标是为NDN路由器内容缓存运行不同缓存替换策略的实验。因而,它不是现存NDN协议的完全特征的实现。在ccnSim的当前版本中,PIT和FIB组件以最简单的方式实现,因此不能评估不同的数据转发策略,不同的路由策略或者不同的拥塞控制方案。

      另一个NDN模拟器被Muscariello和Gallo写于Orange实验室。他们的内容中心网络包级模拟器(CCNPL-Sim)基于SSim,是一个实现了简单离散事件模拟器的通用库。结合广播和基于内容的路由方案(CBCB)必须作为SSim和CCNPL-Sim之间的中间层运行,来在一般的点对点网络上允许基于名字的路由和转发。尽管一个权威的NDN模型在CCNPL-Sim上用C++完全重新实现,这个解决方案有使用定制的离散事件模拟器的缺点,该模拟器对绝大多数研究者来说都不熟悉。另外,CBCB的强制使用限制了可能的实验领域,使得评估其他路由协议成为不可能,比如OSPF-N(OSPF扩展用于NDN),或者关于双曲度量空间的路由。

      一个完全不同的方法被Urbani等人采纳。他们为NS-3模拟器中的项目CCNx NDN实现提供对于直接代码执行(DCE)的支持。DCE NS-3模块的总体目标是提供设施在NS-3模拟环境中执行现存的用户空间和内核空间的网络协议的实现。该方法主要的优势是模拟实验可以直接使用现存的未修改的CCNx节点,因此提供最大的可实现性,并不需要代码维护(作为可以运行在DCE NS-3上的新版本,而不需要更多工作)。然而,这种方法带来了一些问题。首先,真实的实现,包括项目CCNx代码,相当复杂,很难修改来探索不同的设计方法,包含了与模拟评估不相关的大量代码。第二,存在一个已知的规模问题,因为每个模拟节点必须运行一个复杂的DCE层和一个完全大小的真实CCNx实现。

 

4   总结

      ndnSIM设计为一个松散边界组件集,给研究者机会来修改或替换任何组件,对ndnSIM的其他部分没有或有很小影响。我们的模拟器提供了一个参考应用程序和帮助类的集合,允许在许多不同的场景中评估NDN协议的多个方面。ndnSIM的第一版在2012年6月被公开发布,更多关于发布版和其他文档的详细信息可以访问ndnSIM网站http://irl.cs.ucla.edu/ndnSIM/。

      我们希望研究团体认可ndnSIM是有用的,我们期待团体的反馈来帮助更多地改进它。

 

参考文献

[1] V. Jacobson, D. K. Smetters, J. D.Thornton, M. F. Plass, N. H. Briggs, and R. L. Braynard, “Networking namedcontent,” in Proceedings of ACM CoNEXT, 2009.

[2] (2012, May) Project CCNx. [Online].Available: http://www.ccnx.org

[3] (2012, February) The NDN project testbed.[Online]. Available: http://www.named-data.net/testbed.html

[4] (2012, May) ns-3. [Online]. Available:http://www.nsnam.org/

[5] Y. Cheng, A. Afanasyev, I. Moiseenko, B.Zhang, L. Wang, and L. Zhang, “Smart forwarding: A case for stateful dataplane,” Tech. Rep. NDN-0002, May 2012.

[6] L. Zhang et al., “Named data networking(NDN) project 2010 – 2011 progress summary,” PARC,http://www.nameddata.net/ndn-ar2011.html, Tech. Rep., November 2011.

[7] “DETER network security testbed,”https://www.isi.deterlab.net.

[8] D. Rossi, G. Rossini, “Caching performanceof content centric networksunder multi-path routing (and more),” TelecomParisTech, Tech. Rep., 2011.

[9] L. Muscariello. (2011) Content centricnetworking packet level simulator. Orange Labs. [Online]. Available:http://perso.rd.francetelecom.fr/muscariello/sim.html

[10] A. Carzaniga, M.J. Rutherford, and A.L.Wolf, Ed., A Routing Scheme for Content-Based Networking. IEEE INFOCOM, March 2004.

[11] CAIDA. Caida’s role in the ndn. [Online].Available: http://www.caida.org/projects/ndn-fia/

[12] F. Urbani, W. Dabbous, and A. Legout. (2011,November) NS3 DCE CCNx quick start. INRIA. [Online]. Available:http://www-sop.inria.fr/members/Frederic.Urbani/ns3dceccnx/index.html

来源:魏晓蕾

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年10月5日
下一篇 2016年10月6日

相关推荐