仿真平台
ns-3
ns(源自“network simulator”)是一系列离散事件网络模拟器,包括ns-1、ns-2和ns-3,主要用于研究和教学。ns-3是一个开源的离散事件模拟器,使用GNU GPLv2许可证。在网络、协议、流量上都是公开的,可以进行研究、开发和学习。
Ns-3是近年来最为突出和重要的网络模拟器之一。它允许您创建一个完整的网络环境来设计、建模、测试和改进网络、协议和系统。
离散事件网络模拟器主要用于研究和教育用途。ns3有两个主要目标。其中之一是使研究成为可能,不仅是为学术界,而且是为现代网络研究。二是为行业做贡献。这一贡献使得模拟器能够通过同行评审和验证而不断发展。所有的贡献都记录在ns3网站上。
ns-3模拟器的体系结构由一系列模块组成,包括ns-3模拟器的抽象模块、核心模块和编译器模块。这种结构适用于c++和Python语言的脚本。此外,模拟输出可以保存在。pcap (Wireshark格式)和。tr (trace格式)文件中,这对读取和分析场景模拟中的所有组件、系统和成员的流量和行为有很大的帮助。
ns-3的另一个特点是能够在nic上执行仿真。仿真的一种方法是网络仿真摇篮工具.ns-3维护者鼓励用户使用这个工具。POSIX仿真允许在操作系统和ns-3内核上运行守护进程和调用。
ns-3项目致力于构建一个可靠的仿真核心,该核心文档齐全,易于使用,易于调试,并且满足整个仿真工作流程的需求,从仿真配置到跟踪收集和分析。
ns-3被设计为一组库,可以组合在一起,也可以与其他外部软件库结合使用。虽然一些仿真平台为用户提供集成的图形用户界面环境,执行所有任务,但ns-3更具模块化特性。ns-3可以与多个外部动画工具、数据分析和可视化工具配合使用。然而,用户应该期望在命令行和使用C++和/或Python软件开发工具的环境中使用ns-3。
ns-3主要用于Linux系统,虽然也支持FreeBSD、Cygwin(用于Windows),并且正在开发原生支持Windows Visual Studio。ns-3不是任何公司的官方支持软件产品。在ns-3-users邮件列表上,会尽力提供对ns-3的支持。与ns-2相比,ns-3提供了更低级别的抽象,使其能够更好地与真实系统结合使用。ns-3解决了ns-2中的一些限制(例如,在节点上正确支持多种接口类型)的问题。
此外,ns-3模型在仿真环境中更真实、更高效。Ns-3使用实时模拟器,并通过Ns-3模拟器连接到其他设备。模拟使用真实的网络功能从您的计算机到模拟器。该框架能够在用户空间和内核空间中运行,使用Linux网络堆栈来运行仿真
模拟器的另一个特性是能够使用虚拟机创建真实场景,这些虚拟机通过本地网络、云或Internet相互连接。部署协议实现,探测新的协议,测量新的网络拓扑。
图5-1 ns-3 模型
ns-3仿真的核心功能如图5-1所示。它包括运行和调试仿真的功能,仿真器和通用类,以及事件调度控制、设置和分组模块。主要类是节点,用于创建和描述网络设备的物理抽象。节点类使用移动类、路由类、Internet Stack类和设备属性来创建模拟具有各种网络抽象的节点。所有这些类都通过帮助程序连接在一起,并使用API与正在运行的模拟进行通信。
在本项目中,我们注意到ns-3提供的模型主要集中在建模互联网协议和网络工作方式上。然而,ns-3并不仅限于传统的互联网系统。实际上,一些用户正在使用ns-3来建模非互联网基础的系统,包括NDN系统。ns-3作为离散事件网络模拟器,具有适应新网络架构研究的特性,为这些系统的研究提供了良好的支持。
ndnSIM
ndnSIM基于流行的网络模拟器ns-3,并构建在ndn-cxx库之上的网络模拟器,提供了NDN协议栈的C++实现。ndnSIM支持广泛的NDN协议和功能,包括转发、缓存、安全和拥塞。ndnSIM允许用户创建和定义各种网络拓扑结构,包括节点、链路、路由器等。用户可以使用图形界面或编程接口来构建复杂的拓扑结构,并设置节点之间的连接关系和属性;也支持用户配置各种仿真场景,包括节点移动、链路质量、数据流量等。用户可以设置节点的移动模式、速度和轨迹,以模拟真实环境中的移动网络。此外,用户还可以生成和注入各种类型的数据流量,以评估NDN网络的性能。
控制值得注意的是,ndnSIM提供了丰富的性能评估工具和分析功能。用户可以收集和分析NDN网络中的各种性能指标,如延迟、吞吐量、数据包传输率等。此外,ndnSIM还支持生成日志和跟踪文件,用于详细分析仿真过程和结果。并且它允许研究人员在受控的模拟环境中测试和评估不同的NDN协议和架构。这有助于识别不同方法的潜在问题和局限性,并为开发更高效和有效的新协议和架构提供信息。
在我们看来,ndnSIM作为基于NS-3的模拟器,为研究人员提供了一个强大的工具来模拟和评估命名数据网络的性能和特性。它具有丰富的功能,包括NDN协议仿真、网络拓扑建模、仿真场景配置、应用层模型、性能评估和分析等。同时,ndnSIM与NS-3和NDN协议栈完全兼容,并具有灵活的插件系统,可满足不同研究需求的定制化要求。通过使用ndnSIM,研究人员可以更好地理解和优化NDN网络,推动命名数据网络的发展和应用。因此,对于本项研究来说,ndnSIM是必不可少的工具。它提供了一个强大、灵活的平台来建模和评估不同的 NDN 协议以及架构。
NLSR
在无线环境中,命名数据网络(NDN)采用以内容ID命名的兴趣包和数据包进行通信,因此需要适应命名数据网络的链路层协议进行调整。一个例子是NLSR(Named Data Link State Routing),作为NDN中的一种路由协议,用于填充NDN的路由信息库。NLSR将随着命名数据网络协议的发展而不断演进。
NLSR是一款开源的软件包,根据GPL 3.0许可获得许可,对于所有的互联网用户和开发人员都是免费的。其主要设计目标是提供一个路由协议来填充NDN的前缀信息库(FIB)。NLSR使用链路状态或双曲线路由算法计算路由表,并为单个域中的每个可达前缀生成多个面(faces)。NLSR将随着时间的推移不断发展,包括邻居发现,并成为NDN中成熟的域间路由协议。
NLSR使用名称而不是IP地址来标识路由器和链路,因此它可以使用任何底层通信通道(如以太网、IP隧道、TCP/UDP隧道)进行路由消息交换。NLSR直接受益于NDN内置的数据真实性:由于路由更新是在NDN数据包中进行的,并且每个NDN数据包都带有签名,因此路由器可以验证每个路由消息的签名,以确保它是由声称的源路由器生成的,并且在传播过程中没有被篡改,提供更高的安全性。其次,NLSR为每个名称前缀生成按一定规则(例如开销)排序的转发选项列表,为实现NDN的自适应转发策略提供支持。与基于IP的链路状态路由协议相比,NLSR提供更高效的路由更新传播,并具有内建的路由更新认证,并原生支持多路径转发。
作为一种链路状态协议,NLSR通过发布lsa (Link State advertisement)来构建网络拓扑结构,同时分发名称前缀可达性。NLSR路由器与邻居路由器建立并维持邻接关系。当它检测到自己的链路或邻居进程出现故障或恢复时,就向整个网络传播一条新的LSA。此外,它还发布本地内容生产者静态配置和动态注册的名称前缀。每当添加或删除任何名称前缀时,它也会传播一个新的LSA。最新版本的lsa保存在每个节点的LSDB (Link State Database)中。
这种拓扑和可达性传播最初可能看起来很简单,因为在IP路由协议中已经实现了类似的功能。然而,由于我们使用NDN兴趣和数据包实现NLSR,因此设计必须摆脱熟悉的IP地址和IP数据推送的概念(即,任何节点都可以简单地将任何数据包发送到任何其他节点)。相反,我们必须考虑数据名称和数据检索。更具体地说,我们需要一个系统的路由器命名方案和路由更新,并且我们还需要及时检索路由更新,而不需要先验的知道何时会产生更新,因为拓扑或名称前缀的更改随时都可能发生。
在路由功能方面,NLSR与以往所有链路状态路由协议的区别在于两个方面:(1)为每个名称前缀提供多条路由,而不是一条最短路径;(2)对所有lsa进行签名和验证,以确保每台路由器只能生成自己的前缀和连通性信息。
由此,NLSR的设计思想主要总结为以下几个方面:
1.采用适用于路由器、安全密码(包括公私钥)和路由更新的层次化命名方案。
2.建立适用于单个管理域的层次化信任模型。
3.使用逐条同步协议替代传统的基于网络泛洪方式的路由更新传播。
4.使用简单算法为多路径转发选项进行排序。
通过将NDN的概念与ad hoc相结合,可以实现基于命名数据的通信和路由,以提供更高效和灵活的通信方式。
NFD
NFD(Named Data Networking Forwarding Daemon)是ndnSIM中的一个模块,作为NDN架构中的网络转发引擎。NFD负责处理和转发网络中的兴趣包(Interest)和数据包(Data),并提供一系列转发策略和路由功能。它抽象了底层网络传输机制为NDN Faces,并管理基本数据结构如CS(Content Store)、PIT(Pending Interest Table)和FIB(Forwarding Information Base),同时实现数据包的处理逻辑。除了基本的数据包转发功能,NFD还支持多种转发策略,并提供一个管理接口用于配置、控制和监视NFD。NFD包含一系列相互依赖的模块,如图3-3所示:
数据包通过Faces到达NFD。Face是一个广义的接口,可以是物理接口,也可以是覆盖隧道。此外,NFD和本地应用程序之间的通信也可以通过Unix域套接字作为Face完成。
Face由LinkService和Transport组成。LinkService提供高级服务,而Transport则充当基础网络传输协议的封装。Face通过操作系统API读取传入的流或数据报,从链路层协议的数据包中提取网络层数据包(如NDN的Interests、Datas或Nacks),并将它们传递给转发模块。
网络层的数据包(Interest、Data或Nack)由转发管道处理,转发管道定义了一系列操作步骤来处理数据包。NFD的数据平面是有状态的,NFD对数据包的处理方式不仅取决于数据包本身,还取决于存储在表中的转发状态。
当转发器收到兴趣包时,它首先将其输入兴趣表。每个条目代表未决兴趣或最近完成的兴趣。然后在内容存储 (CS)(数据包的网络缓存)中执行数据匹配查找。如果 CS 中存在匹配的包,则将其返回给请求者。 否则兴趣要转发。
转发策略决定了兴趣包如何转发。NFD允许选择基于名称空间的转发策略,并针对包含策略设置的“策略选择”表执行最长前缀匹配搜索,以确定将哪个策略用于转发兴趣。 转发策略决定兴趣(更具体地说,PIT 记录)是否应该转发、何时转发以及转发到哪里。 在转发期间,策略引擎可以从转发信息库 (FIB) 获取输入,其中包含来自本地应用程序前缀注册和路由协议的路由信息。可以使用 PIT 条目中存储的某些策略信息。还可以记录和使用存储在Measurements表项中的数据,及其性能测量结果。
在策略引擎决定将兴趣包转发到指定的Face后,兴趣包在转发到Face之前通过转发管道进行进一步的步骤。Face根据底层协议对兴趣包进行所需的分片,将网络层数据包封装成一个或多个链路层数据包,通过操作系统API将链路层数据包发送到输出流,作为数据报。
NFD 对待数据包的方式与对待兴趣包的方式略有不同。首先,它检查兴趣表 (PIT) 以查看是否存在可以填充数据包的匹配 PIT 条目,并选择任何匹配的条目进行进一步处理。如果数据包未通过任何 PIT 条目,则意味着该数据包是未经请求的,将被丢弃。否则,将包添加到内容存储库,并记录与每个匹配的 PIT 条目关联的转发策略。此通知连同转发策略的无数据返回超时,允许监控路径可达性和性能。 转发策略可以在测量表中记录观察结果,以改进未来的决策。最后,数据包被发送到相应 PIT 条目中列出的所有下游请求者。通过Face发送数据包的过程类似于发送感兴趣的数据包。
当转发器收到 Nack 时,如何进行取决于所使用的路由策略。
NFD的主要设计目标是支持NDN体系结构的各种实验。该设计强调模块化和可扩展性,以便可以通过尝试不同的数据结构、算法和应用程序来进行新协议功能的实验和性能优化。随着时间的推移,在相同的设计框架内可能会出现更好的实现。
NFD模块在ndnSIM中实现了NDN协议的多种核心功能,包括兴趣包的转发和路由选择、数据包的转发和缓存管理、转发表的构建和维护、名称解析和前缀注册、拥塞控制和流量管理等。通过使用NFD模块,研究人员可以模拟和评估不同的NDN路由算法和转发策略,研究网络性能和行为,并开展各种基于NDN的应用研究。