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&