ndnSIM各模块介绍

来源:互联网 发布:苹果电脑mac初始密码 编辑:程序博客网 时间:2024/05/29 04:22

ndnSIM各个模块之间的关系
ndnSIM各个模块之间的关系


  • 一、核心NDN协议模块——ndn::L3Protocol

ndn::L3Protocol在ndnSIM架构中属于核心的模块,其在ndnSIM中所处的位置,相当于NS-3框架中的Ipv4L3Protocol和Ipv6L3Protocol一层,也相当于当前网络架构中的IPv4和IPv6一层。ndn::L3Protocol模块聚合了Face、NFD等组件,管理着CS,PIT,FIB这三个数据结构以及转发策略的运行,处理Interest分组和Data分组的接收和转发,从而管理着整个NDN网络。
L3Protocol模块定义了如下操作,管理着NDN网络的运行:
(1)AddFace/RemoveFace:为当前NDN协议下的网络注册一个新的接口或删除现有的接口;
(2)GetForwardingStrategy/SetForwardingStrategy:获取当前策略或注册一个新的转发策略给NDN协议栈使用;
(3)提供网络层统计数据收集接口,这些接口包括Interest分组(InInterests,DropInterests),Data分组(OutData,InData,DropData),以及可选的Interest NACK(OutNacks,InNacks,DropNacks),以达到测量的目的;
(4)对可选功能进行配置(对NACK的支持)。

  • 二、Face抽象

为了实现灵活和可扩展的目标,ndnSIM的设计是独立于抽象的底层传输,并通过抽象出的中间层进行层间的信息交互。这意味着所有在核心协议模块(ndn::L3Protocol),网络模块,应用模块之间的通信,都通过Face抽象模块(ndn::Face)来完成。对于Face抽象模块,有很多种实现的形式,比如链路层Face(ndn::NetDeviceFace),用来处理位于链路层上的节点间直接通信,网络层Face(ndn::Ipv4Face 和 ndn ::Ipv6Face)和传输层Face(ndn::TcpFace 和 ndn::UdpFace)用来处理上层的节点间通信,应用层Face(ndn::AppFace)处理节点内通信。
接口(Face)抽象中定义了如下API:
(1)Sendlmpl:将数据包从NDN进程堆栈应用发送给底层(发送给网络或应用程序)
(2)RegisterProtocolHandler:使得分组转发能够从底层网络或底层应用到NDN进程堆栈应用;
(3)SetMetric/GetMetric:分配和获取所需的Face数据,比如可以用作路由计算。
(4)IsUp/SetUp:检查Face是否可用,以及启用或禁用Face。
除了基本的API,Face的抽象还提供一些方法来储存一些随机的信息,这些信息可能会被转发策略模型所利用。

  • 三、内容存储CS的抽象

CS存在于每一个NDN路由节点,CS支持网内缓存,为网络提供了高效的错误恢复和异步组播的数据分发。ndnSIM提供了一个接口,通过为该接口实现不同的CS模块接入,可以实现不同功能,包括内容索引、内容查找、内容大小限制以及缓存替换策略等。
ndnSIM当前版本有CS模块抽象的三种实现方式,包括“最少最近使用”算法(ndn::cs::Lru),“先入先出”栈式数据结构(ndn::cs::Fifo),缓存随机替换策略(ndn::cs::Random)。每一种实现方式都基于一种 dynamic trie-based container,动态的基于前缀树的容器?,(还不懂…PS. 链接
http://ndnsim.net/1.0/doxygen/classns3_1_1ndn_1_1ndn_s_i_m_1_1trie__with__policy.html)
并拥有(可选的)存储大小上限,所存储的内容名都有基于哈希的索引。其他的CS模块可以根据需要进行开发和安装。
CS模块抽象提供以下操作:
(1)Add:缓存新的Data分组或者将缓存中已经存在的Data分组分发出去;
(2)Lookup:查找之前缓存的Data分组。
需要注意的是,CS模块抽象没有提供一个明确的缓存内容删除操作。缓存内容的清除主要依靠当前NDN节点CS条目所指示的生存时间以及内容源指定的Data分组内容的生存时间。

  • 四、待处理请求表PIT的抽象

ndnSIM中的ndn::Pit 是对NDN的PIT的抽象,它维持着每一个转发了的Interest分组的状态信息,以便为所收到的Data分组提供转发的下一跳。
每一个NDN节点的每一条PIT条目都包含以下信息:
(1)条目的命名;
(2)接收Interest接口列表,Interest分组从这些接口进入了NDN节点,该列表不仅将特定Interest分组和特定接口相互对应,同时还记录着Interest分组到达相应接口的时间;
(3)转发Interest接口列表,Interest分组从这些列表转发出当前的NDN节点,该列表不仅记录了Interest分组离开接口的时间,还会记录Interest分组在该接口重新转发的次数(接口获取的信息是NDN数据平面的“状态”的来源);
(4)条目的生存时间(对于反复到来的同一命名的内容,会采用其最大的生存时间);
(5)其他的具体的转发策略信息会以转发策略标签指示(这些标签信息可以从ndn::fw::Tag中导出)。
当前的ndnSIM版本提供了一个PIT抽象的模板类实现,从而可以选择性地实现不同数量的PIT条目以及不同的而替换策略,包括:
(1)固定模式,ndn::pit::Persistent,该模式下,当PIT的存储大小达到上限时,将不接受新的条目;
(2)随机模式,ndn::pit::Random,该模式下,当PIT的存储大小达到上限时,将会随机移除表内的条目(可能是最近添加的条目);
(3)“最近最少使用”模式,ndn::pit::Lru,最近最少使用的条目将会在PIT存储到达上限时被移除。
PIT的实现也是基于前缀树(Trie)数据结构,运用利用基于哈希的索引搜索内容,并采用了额外的时间索引,以此来优化超时Interest分组的移除过程。
PIT模块抽象提供了以下操作:

  • Lookup:根据Interest分组或者Data分组所给的内容名,在PIT中查找相应条目;
  • Create:根据收到的Interest分组(非重复)创建一条新的条目;
  • MarkErased:直接移除或者标记将要移除的条目;
  • GrtSize,Begin,End,Next:这些操作实现获得PIT中条目的数量,并遍历所有的条目。

  • 五、转发信息表FIB

NDN中的FIB与IP中的FIB大体类似,都用于数据的转发,不过NDN的FIB的转发信息指示的是命名前缀而不是IP地址前缀,同时NDN的FIB为每一个命名前缀都提供了多个可选的转发接口(而在IP网络中,每次转发只能指定唯一的IP地址)
ndn::fib::FibImpl 也是基于前缀树(Trie)数据结构组织的,采用基于哈希的索引搜索内容,每一条条目都包含一个前缀和一个Face的有序列表,通过该有序列表就可找到相应的Face。Face的有序列表的索引是由路由计算信息和数据平面的反馈信息共同决定的。查找的时候对于FIB中的可变长命名前缀采用的是最长前缀匹配。

  • (1)使用者可以使用仿真脚本为每一个节点手动修改FIB,从而改变仿真环境的设置。这种方法为使用者提供了全部的权限,以决定FIB表中应该出现什么样的条目,但是这种方法只能在小范围仿真的时候有效,当遇到大范围的仿真时会出现不可用的情况。
  • (2)利用一个位于中心的全局NDN路由控制器为FIB自动添加条目。当收到请求的时候,全局路由控制器就会获得当前安装在NDN上的所有节点的信息,并利用节点信息计算每一对节点之间的最短路线,最后更新FIB条目。
    在当前的ndnSIM版本中,全局路由控制器使用的是Dijkstra最短路径算法(以Face作为指标,注:根据能否转发Interest分组以及Interest分组转发出去之后Data分组返回的情况,可以将Face分为不同的状态,最简单的分类是红黄绿三种状态,以表示Face的可用性),并且只为每一个命名前缀安装了唯一一个转出接口。所以,为了实现Interest分组的多路径转发场景,全局路由控制器需要进行扩展, 以实现为每一个命名前缀分配多个条目的目标(这样的扩展取决于具体的场景,最新的版本可以参阅GitHub源码 PS.
    https://github.com/NDN-Routing/ndnSIM)。
  • (3)最后,介绍一个简单的方法,安装一个默认路由,包含了NDN进程堆栈应用的所有Face。(个人理解是,在这种方法之下,FIB表不是后期动态生成或者手工加入的,而是在一开始就已经包含了所有可能转发目的地的Face)

  • 六、转发策略的抽象

ndnSIM可以在不修改核心模块的情况下,再不同转发策略下进行实验,只需要修改 ndn::ForwardingStrategy 部分即可实现。用代码的话说就是,对于Interest分组和Data分组处理的每一步,包括对CS,PIT,FIB的查询,都可以用虚函数表示和操作,而根据转发策略和具体实验环境的不同,虚函数可以进行相应的重载。
(具体的重载操作就不翻了…详见PS.
http://lasr.cs.ucla.edu/afanasyev/data/files/Afanasyev/ndnSIM-TR.pdf Page5)
可选择的转发策略
可供选择的转发策略之间的层级关系

转发策略的实现包括:洪泛法(Flooding)、智能洪泛法(SmartFlooding)以及最佳路由路径(BestRoute)。
转发策略的可用扩展包括:否定应答(Nacks)、红黄绿状态标识(GreenYellowRed)。
由图,当前版本ndnSIM的实现是继承于NACK的扩展,从而可以检测和处理NDN网络中的Interest NACK(否定应答)。
不过对于NACK的响应操作默认是不开启的,需要利用“EnableNACKs”选项开启此项功能。
SmartFlooding和BestRoute,这两种转发策略的实现依靠于每一个Face的状态(红黄绿),而状态的获取是基于对数据平面反馈信息的检测:

  • GREEN:Face正常工作(Interest分组转发出Face,Face收到Data分组);
  • YELLOW:Face的状态未知(比如Face是新添的,或者Face已经一段时间没有工作了);
  • RED:Face不能工作,不应该再用于Interest分组的转发。

这些状态信息会在Face添加到FIB条目中的时候附加给相应的Face条目,初始状态都是YELLOW。当Face转发出Interest分组后,收到一个响应的Data分组时,Face的状态设置为GREEN。当发生错误(PIT条目超时,或者NACK启用后收到了上游下发的Interest NACK)的时候,或者一个Face一段时间都没有使用的时候,Face的状态转变为YELLOW。当NDN的底层出现问题(链路故障或者链接错误)的时候,Face的状态设置为RED。
转发策略以及其处理逻辑:

  • Flooding策略,ndn::fw::Flooding,该策略下,在当前NDN节点中,除了接收了将要转发的Interest分组的Face之外,Interest分组将会按照FIB表中的条目转发给所有的可用Face;
  • Smart Flooding策略,ndn::fw::SmartFlooding,该策略下,如果FIB表项中存在至少一个GREEN状态的Face,Interest分组将只会选择优先级最高的GREEN状态Face进行转发,否则,如果没有GREEN状态的Face,将会使用所有YELLOW状态的Face转发。RED状态的Face不会用于转发Interest分组。
    该策略模型可以用于没有路由信息输入的仿真环境中,数据平面可以利用Interest分组探测并发现可以正常工作的路径。(完全依靠数据平面给出的状态进行转发决策)
  • Best-Route策略,ndn::fw::BestRoute,该策略在FIB中存在GREEN状态的Face和只存在RED状态的Face时,与Smart Flooding策略是一样的,不过当FIB中没有GREEN状态的Face时,Best-Route策略不会选择所有的YELLOW状态Face进行洪泛操作,而是只会选择一个YELLOW状态Face进行Interest分组的转发。
  • SimpleLimits策略,该策略还是一种试验性的转发策略,继承了大部分Best-Route策略的操作,所做的改进能够让转发在遇到网络拥塞和网络利用率达到上限的情况下,通过调整Interest分组在某一个Face的转发速率以及改变Interest分组转发Face的选择,从而缓解网络拥塞。例如,当优先级最高的Face的转发速率达到设置的上限时,该策略会选择次优先级的Face进行转发,从而分散流量,避免拥塞。

  • 七、关于应用程序及其接口

ndn::AppFace,是ndnSIM核心和应用程序相互交互的Face抽象。ndnSIM提供了一个ndn::App类,该类创建了ndn::AppFace,并将该Face抽象登记在NDN协议栈中,同时为从Face接收到的Interest分组和Data分组提供了默认的处理方式。

以下是ndnSIM中关于应用的设置选项:

  • ndn::ConsumerCbr,该应用会按照事先定义的频率产生Interest分组,所产生的Interest分组含有设置好的前缀和序列码。当一个特定的Interest分组转发后没有在超时时间内被Data分组响应,则该Interest分组会被重新转发。

  • ndn::ConsumerBatches,该应用对Interest分组的命名和重发操作都与ndn::ConsumerCbr相同,差别是,该应用是一个开关式的应用,仿真中可以在特定的节点位置产生特定序列的Interest分组。

  • ndn::Producer,简单来说就是内容源,可以响应所有收到的Interest分组,并生成一个满足Interest分组要求的大小和命名的Data分组。


注:以上内容翻译自
http://ndnsim.net/2.0/intro.html 中
http://lasr.cs.ucla.edu/afanasyev/data/files/Afanasyev/ndnSIM-TR.pdf

0 0
原创粉丝点击