网络仿真方法综述
目录
1. 引言
2.仿真器介绍
2.1 NS-2
2.2 NS-3
2.3 OPNET
2.4 GNS3
3.仿真对比
4.结论
参考文献
1. 引言
网络仿真是指使用计算机模拟网络系统的行为和性能的过程。在网络仿真中,可以建立一个虚拟的网络环境,并通过模拟各种网络设备、协议和应用程序的行为来评估网络的性能、研究网络的行为和测试新的网络技术。网络仿真可以帮助网络设计师、研究人员和工程师更好地理解和分析网络系统的行为,并进行实验和测试,以评估不同方案的可行性和效果。它可以模拟各种网络拓扑结构、流量模式、传输协议和路由机制等,以及处理网络故障和攻击的情况。通过网络仿真,可以获得关于网络性能、吞吐量、延迟、丢包率、网络拥塞等方面的数据,并对网络的特定方面进行详细分析。这些数据和分析结果可以帮助改进网络设计、优化资源分配、验证协议的正确性和可靠性,并提供决策支持。总之,网络仿真是一种重要的工具,可以帮助我们理解和评估网络系统的性能和行为,以及指导网络设计和优化。网络仿真器在网络领域的研究、开发和运营中具有广泛的应用。
在网络仿真研究的早期,研究人员主要使用离散事件仿真(DES)方法对计算机网络进行建模和仿真。虽然DES算法可以帮助研究人员了解网络系统中事件的发生和处理过程,但是需要大量的内存和存储资源来保存仿真数据,难以对大模型进行建模。随着优化仿真算法的精进,越来越多优秀的网络仿真方法被提出。当前流行的网络仿真器如NS-2、NS-3、OPNET、GNS3等在功能和应用方面都有所差异,本文将详细介绍以上几种仿真器的仿真框架,并在功能和特性方面细致分析它们的优缺点,同时进行性能上的比较。
本文的其余部分组织如下。第2节介绍了当前流行的网络仿真器,并在第3节中进行了网络仿真器的仿真对比研究,第4节给出了本文的调研结论。
2.仿真器介绍
2.1 NS-2
NS-2最初是由美国加州大学伯克利分校(University of California, Berkeley)的计算机科学系于1989年发起和立项的,并再1995年加入VINT项目 [1]。NS-2(Network Simulator 2)是一个离散事件网络仿真器,广泛用于网络研究和教学。它能够模拟各种网络协议,包括TCP、UDP、IP、HTTP等,并提供了多种数据传输方式的模型,如有线网络、无线网络、卫星网络等。NS-2采用C++编写,支持命令行界面和GUI界面,可以在Linux、Windows等操作系统上运行。它提供了丰富的API和工具,方便用户进行自定义开发和扩展。
NS-2的优点在于可定制性强、可扩展性好,可以满足不同的需求,而且它是开源免费的。但是由于其复杂性,使用起来可能会比较困难。同时,NS-2也存在一些缺陷,如在某些场景下模拟结果可能与真实情况不完全一致。
NS-2的基本架构,如下图所示:

图1 NS-2的基本架构
如上图所示,NS-2的基本架构采用了OTcl(Object-oriented Tcl)和C++混合编程。OTcl用于描述仿真场景和配置参数,C++用于实现底层的网络模型和算法。TclCL在NS-2的基本架构中扮演着连接OTcl和C++的桥梁角色,提供了OTcl与C++之间的接口,允许在Tcl脚本中调用C++编写的函数和类,以扩展NS-2的功能。在NS-2的基本架构中,Tcl simulation script(简称Tcl脚本)起到了描述仿真场景、配置仿真参数以及控制仿真流程的作用,Tcl trace file(Tcl跟踪文件)用于记录仿真过程中的事件和状态,起到了记录和分析仿真结果的重要作用。以上所有组件,共同构成了从Tcl脚本到Tcl跟踪文件的整个过程。
2.2 NS-3
2006年,Lacage和Mathieu等人创建一种新的离散事件网络模拟器,命名为NS-3 [2]。NS-3是一个开源的离散事件网络仿真器,与NS-2相比,NS-3拥有更现代化的架构和更强大的功能,包括更加准确的物理层模型、更丰富的协议实现、更好的可扩展性等特点。NS-3支持多种网络技术和协议的仿真,例如WiFi、LTE、IPv6、多径传输控制协议(MPTCP)、软件定义网络(SDN)等。NS-3还提供了Python接口和仿真脚本语言,使得用户可以快速构建仿真场景和实验,并方便地分析仿真结果。由于NS-3的优秀性能和广泛应用,它被广泛用于网络研究和教学领域,在学术界和工业界都有着广泛的影响力。
NS-3的优点在于拥有准确的物理层模型和丰富的协议实现,使得用户可以方便地进行各种协议的研究和评估并提高仿真结果的准确性。缺点在于缺少友好的图形化界面,并且有较高的计算资源需求。
NS-3的基本架构,如下图所示:

图2 NS-3的基本架构
如上图所示,NS-3的仿真过程主要分为4步:首先,选择或开发相应模块。其次,编写网络仿真脚本。再次,启动仿真。最后,分析仿真结果。在搭建NS-3网络仿真场景时,与实际网络类似,需要考虑节点、net device(网络设备)和传输媒体等概念。在NS-3中,节点代表网络中的实体,可以是路由器、交换机、终端设备等。每个节点都具有一个或多个网络设备,用于连接到网络并进行数据传输。不同类型的网络设备对应着不同的传输媒体和协议,例如CSMA网络设备对应CSMA/CD协议,WiFi网络设备对应WiFi协议。在NS-3中由channel(信道)来表示传输媒体,它模拟了真实网络中的传输介质,例如有线链路、无线信道等。通过设置信道的属性,如延迟、带宽等,可以模拟实际网络中的传输特性。因此,在搭建NS-3网络仿真场景时,您需要定义节点、配置网络设备,并通过信道将这些节点连接起来,以模拟实际网络中的节点、设备和传输媒体之间的关系。同时,还可以根据需要设置节点和设备的参数,如IP地址、MAC地址、传输协议等,以适应特定的仿真需求。
2.3 OPNET
OPNET最早是由美国公司OPNET Technologies开发并推出 [3]。OPNET最初被设计用于模拟局域网(LANs)和广域网(WANs)的性能,随着时间的推移,OPNET逐渐发展成为一个综合性网络仿真平台,可以用于模拟各种网络技术和协议的性能,包括无线网络、互联网、移动通信等。它提供了综合的仿真环境,包括GUI、模型库、仿真引擎和性能分析工具。用户可以根据需要选择适当的模型,并进行自定义和扩展,以满足特定的研究需求。OPNET的性能分析工具可用于评估网络的吞吐量、延迟、丢包率等关键指标,帮助用户优化网络设计和协议算法。
OPNET作为一款综合的网络仿真工具,具有灵活性、准确性和强大的性能分析能力等优点。它提供了一个综合的仿真环境,以及丰富的模型库和性能分析工具,使用户能够在一个平台上完成整个仿真过程。然而,在另一方面,OPNET存在着学习曲线陡峭和计算资源需求高等问题,并且OPNET不是开源免费的网络仿真软件。因此,用户在选择使用时应权衡其优点和缺点,并根据实际需求做出决策。

图3 OPNET的基本架构
如上图所示,在OPNET中,Re-specification(重新规范化)是指在网络仿真过程中对模型参数和配置进行调整和修改的过程。Data collection and simulation(数据收集与仿真)是指在网络仿真过程中,系统会自动收集并记录各种网络性能指标的数据,如吞吐量、时延、丢包率等,这些数据会在仿真过程中被积累和记录下来,以便后续进行分析和评估。Initial specification(初始规范)定义了网络仿真的基本条件和参数,为后续的仿真过程奠定了基础。Analysis(仿真分析)是指通过收集的数据,用户可以利用OPNET提供的内置的数据分析工具进行进一步的处理和分析,助用户深入理解网络性能、协议行为,以优化网络设计和配置。
2.4 GNS3
GNS3(Graphical Network Simulator 3)最早由法国工程师Jerome Tissieres等人于2007年提出并发布。GNS3是一个基于开源的网络仿真平台,用于模拟和测试复杂的计算机网络环境。它提供了图形化界面和虚拟设备,可以帮助用户构建和配置虚拟网络拓扑,并模拟真实网络设备的行为和功能。GNS3平台具有丰富的社区支持和资源,用户可以在社区中分享经验、获取支持,并下载其他用户创建的网络拓扑和配置文件,从而加速学习和解决问题的过程。它的开源性质使得全球范围内的用户可以自由使用、定制和贡献代码,从而不断丰富和完善了这个平台。随着时间的推移,GNS3不断发展和改进,并成为网络工程师、学生和研究人员常用的网络仿真工具之一。
GNS3作为一个基于开源的网络仿真平台,具有多平台支持、图形化界面、真实设备模拟、集成虚拟化技术、社区支持和资源丰富、扩展性和可定制性等优点,但也可能无法完全模拟特定硬件设备的行为和性能,并且对于大规模网络仿真可能需要较高的计算资源和内存消耗。

图4 GNS3的基本架构
如上图所示,在GNS3中,GNS3 GUI QT Interface是指GNS3的图形化用户界面,GNS3提供了一个直观、易用和功能强大的界面,使用户能够轻松地创建、配置和管理网络仿真拓扑,并对其进行测试和调试。在GNS3中,Compute Server(计算服务器)是用于处理和执行网络仿真的计算资源,它的主要作用是提供额外的计算能力,以支持更复杂和大规模的网络拓扑仿真。在GNS3中,Qemu,Dynamips和IOU是三种不同的可用于模拟Cisco路由器的虚拟化技术,起到了仿真器(emulator)的作用。GNS3是一个网络仿真平台,而GNS3 Web是GNS3的一个插件,它为用户提供了通过Web浏览器访问和管理GNS3实例的功能。
3.仿真对比
| 特性 | NS2 | NS3 | OPNET | GNS3 |
| 开发语言 | C++/OTCL | C++,Python | C (C++) | python |
| 是否支持开源 | 是 | 是 | 否 | 是 |
| 支持用户图形化界面能力 | NS2主要是基于命令行的工具 | NS3主要是基于命令行的工具 | 提供了丰富的图形用户界面(GUI) | 专门为网络工程师设计的图形化网络仿真平台 |
| 学习时长 | 长 | 适中 | 较长 | 易学 |
| 可安装平台 | Linux,Mac OS X,windows | Linux,Mac OS X,windows | Linux,Mac OS X,windows | Linux,Mac OS X,windows |
| 是否拥有网络虚拟化工具 | 提供网络虚拟化工具 | 提供网络虚拟化工具 | 提供了一套完整的虚拟化环境 | 是一款专注于网络虚拟化的工具 |
| 是否拥有仿真分析工具 | 提供了丰富的仿真分析工具 | 提供了丰富的仿真分析工具 | 提供了丰富的仿真分析工具 | 提供了丰富的仿真分析工具 |
| 是否能创建仿真跟踪文件 | 可以 | 可以 | 可以 | 可以 |
| 能够实现那些协议 | 可以实现广泛的网络协议,包括传输层、网络层和应用层协议 | 可以实现广泛的网络协议,包括传输层、网络层和应用层协议 | 可以实现广泛的网络协议,包括传输层、网络层和应用层协议 | 可以实现广泛的网络协议,包括传输层、网络层和应用层协议 |
| 快速仿真能力 | NS2 的仿真速度相对较慢,特别是在复杂网络场景中 | NS3 在速度方面相对 NS2 有所提升,但仍然可能受到复杂网络场景的影响 | OPNET 在处理大规模网络和复杂业务场景时具有较高的仿真速度 | GNS3 的仿真速度可能受到底层设备性能和配置的限制 |
由上表所示,在协议支持方面,在NS2专注于无线网络和移动网络的仿真,提供广泛的扩展性和自定义协议支持。NS3在无线网络和移动网络仿真方面比NS2有所改进,具有现代化设计和更好的性能。OPNET适用于企业网络和通信网络的仿真,具有强大的性能优化和分析功能。GNS3以虚拟化和模拟真实网络设备为主,可以与实际网络设备或虚拟机集成。
在仿真速度和效率方面,NS2在复杂网络场景中可能较慢。NS3相对于NS2有所改进,但仍可能受到复杂网络场景的影响。OPNET提供多种仿真模式,包括快速仿真模式,可通过优化算法减少仿真时间。GNS3仿真速度可能受到底层设备性能和配置的影响。
在用户界面和易用性方面,NS2使用命令行和脚本语言进行操作,学习曲线较陡。NS3提供基于Qt的图形用户界面(GUI),相对于NS2更直观和易用。OPNET提供图形用户界面(GUI)和建模工具,更易上手。GNS3具有友好的图形用户界面(GUI),易于操作和配置。
4.结论
综合来看,NS2作为一个基于事件驱动的离散事件仿真器,NS2在无线网络和移动网络的仿真方面具有广泛的应用和扩展性。然而,它的仿真速度相对较慢,特别是在复杂网络场景中。NS3:作为NS2的继任者,NS3在无线网络和移动网络的仿真方面有所改进。它采用现代化的设计和C++编程语言,相对于NS2有更好的性能和效率。OPNET:OPNET是一个专注于企业网络和通信网络的仿真工具,具有强大的性能优化和分析功能。它提供多种仿真模式,包括快速仿真模式,可以通过优化算法减少仿真时间。GNS3:GNS3是一个图形化工具,主要用于虚拟化和仿真真实网络设备的行为。它可以与实际网络设备或虚拟机集成,提供与实际网络环境更接近的仿真结果。根据具体需求和研究领域的不同,可以选择适合的仿真工具。如果涉及到无线网络和移动网络的仿真,NS2和NS3可能是更好的选择。而对于企业网络和通信网络的仿真、性能优化和分析,OPNET可能更适合。如果需要虚拟化和模拟真实网络设备的行为,GNS3是一个不错的选择。在选择时,还应考虑工具的编程语言、易用性以及仿真速度等因素。
参考文献
[1] Project, The Vint. "Ns-2 network simulator", msra (1995)
[2] Lacage, Mathieu, and Thomas R. Henderson. "Yet another network simulator", MOD (2006): 12-es.
[3] Arvind, T .“A Comparative Study of Various Network Simulation Tools.” (2016).
相关文章:
网络仿真方法综述
目录 1. 引言 2.仿真器介绍 2.1 NS-2 2.2 NS-3 2.3 OPNET 2.4 GNS3 3.仿真对比 4.结论 参考文献 1. 引言 网络仿真是指使用计算机模拟网络系统的行为和性能的过程。在网络仿真中,可以建立一个虚拟的网络环境,并通过模拟各种网络设备、协议和应用程…...
Android-Q升级-Camera记录
目录 代码环境 建立Android Q使用的camera仓 Camera底层适配 camx 原生接口变化 其他编译问题 chi-cdk 数据类型不匹配 case未加break的报错 libalRnBRT_GL_GBWRAPPER链接问题 vidhance编译错误 libarcsat链接问题 vendor/qcom/proprietary prebuilt_HY11 调试cam…...
Android studio如何导入项目
打开解压好的安装包 找到build.gradle文件 打开查看gradle版本 下载对应的gradle版本Index of /gradle/(镜像网站) 下载all的对应压缩包 配置gradle的环境变量 新建GRADLE_HOME 将GRADLE_HOME加入到path中 将项目在Android studio中打开进行配置 将gr…...
PHP实现一个简单的接口签名方法以及思路分析
文章目录 签名生成说明签名生成示例代码签名校验示例代码 签名生成说明 B项目需要调用A项目的接口,由A项目为B项目分配 AccessKey 和 SecretKey,用于接口加密,确保不易被穷举,生成算法不易被猜测。 最终需要确保包含签名的参数只…...
StartAI”梦想合伙人 ”招募计划
我们正火热招募AI设计师产品合伙人!如果你对AI技术充满好奇,对设计有着独特的见解和热情,亦或者你想在日常的设计工作中提高效率,无论你是电商设计师、UI设计师、建筑师、插画师等其他各类设计领域的人才。那么这就是你不容错过的…...
记录:podman安装redis
Linux系统上安装redis: podman pull redis # 拉取最新的redis版本 podman images # 查看所有本地的镜像,包括刚拉取的redis镜像mkdir -p /etc/redis/conf /etc/redis/data # 创建2个目录文件,保存redis的数据和配置文件 tou…...
TrinityCore启动报错: MySQL library version (8.0.37 id 80037) does not match
TrinityCore启动的时候报错: TrinityCore/src/server/database/Database/DatabaseWorkerPool.cpp:73 in DatabaseWorkerPool FATAL ERROR: Used MySQL library version (8.0.37 id 80037) does not match the version id used to compile TrinityCore (id 80036). S…...
代码随想三刷字符串篇
代码随想三刷字符串篇 344. 反转字符串题目代码541. 反转字符串 II题目代码54. 替换数字(第八期模拟笔试)题目代码151. 反转字符串中的单词题目代码55. 右旋字符串(第八期模拟笔试题目代码28. 实现 strStr()题目代码459.重复的子字符串题目代码344. 反转字符串 题目 链接 …...
华为支持手指关节手势的原理
华为的指关节手势有指关节截屏、指关节录屏、指关节区域截屏、指关节分屏等。该技术的实现是靠触控结合了其他一些传感器实现的。 华为的专利: 一种手势控制方法、装置、终端设备和存储介质——华为技术有限公司 专利中提到以往终端设备对于手势的识别都是基于位置和…...
Flink的简单学习五
一 动态表与连续查询 1.1 动态表 1.是flink的支持流数据Table API 和SQL的核心概念。动态表随时间的变化而变化 2.在流上面定义的表在内部是没有数据的 1.2 连续查询 1.永远不会停止,结果是一张动态表 二 Flink SQL 2.1 sql行 1.先启动启动flink集群 yarn-see…...
C++|哈希应用->位图
目录 一、概念 1.1原理分析: 1.2效率分析: 二、模拟实现 2.1位图框架初始化空间 2.2映射 2.3清零 2.4判断 2.5测试代码 三、位图扩展应用 一、概念 位图,本质上也是一个数组,通过哈希思想构造的一种数据结构,…...
Rust 实战丨SSE(Server-Sent Events)
📌 SSE(Server-Sent Events)是一种允许服务器向客户端浏览器推送信息的技术。它是 HTML5 的一部分,专门用于建立一个单向的从服务器到客户端的通信连接。SSE的使用场景非常广泛,包括实时消息推送、实时通知更新等。 S…...
Django API开发实战:前后端分离、Restful风格与DRF序列化器详解
系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游ÿ…...
React基础教程:TodoList案例
todoList案例——增加 定义状态 // 定义状态state {list: ["kevin", "book", "paul"]}利用ul遍历list数组 <ul>{this.state.list.map(item ><li style{{fontWeight: "bold", fontSize: "20px"}} key{item.i…...
PHP超详细安装及应用
目录 所需安装包如下 一、PHP安装 依赖包安装 安装扩展工具(先将PHP所需的软件包全部拖进centos根目录下) 安装libmcrypt 安装mhash 安装mcrypt 安装PHP 二、设置LAMP组件环境(要保证mysql、http都安装完成了) Php.ini的建…...
【算法篇】大数加法JavaScript版
题目描述 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。 数据范围:s.length,t.length≤100000,字符串仅由’0’~‘9’构成 要求:时间复杂度 𝑂(𝑛) 示例1 输入&…...
【LeetCode 128】 最长连续子序列
判断前一位数在不在字典中是这道题的关键之处,这样就可以避免重复查找,从而达到O(n) 的时间复杂度。如果没有这个判断,那么时间复杂度最坏也得是O(N^2)级别的。 1. 题目 2. 分析 合理利用数据结构。本题中使用了set来保存数组的元素&#x…...
SpringCloud-面试篇(二十六)
(1)Sentinel核心API-ProcessorslotChain...
使用__try...__except和try...catch捕获异常实例分享(附源码)
在C/C++的代码中,为了防止代码块执行的过程中产生异常导致软件崩溃,我们会给代码块添加__try...__except或try...catch保护,防止软件因为操作内部触发的异常产生崩溃。本文简单地介绍一下这两种异常捕获的使用示例。 1、概述 当软件运行过程中代码抛出异常,如果异常没有处…...
基于51单片机的简易温控水杯恒温杯仿真设计( proteus仿真+程序+设计报告+讲解视频)
基于51单片机的简易温控水杯恒温杯仿真设计( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0099 1. 主要功能: 基于51单片机的简易温控水杯恒温…...
FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战
1. 项目概述:单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时,翻到了Altera(现在已是Intel PSG的一部分)和Eutecus在2015年左右合作推出的一套方案,当时在EE Times上被称作“Single-Chip FPGA-B…...
ML:SARSA 的基本原理与实现
在强化学习中,智能体(Agent)并不是一次性从已有标签中学习答案,而是在环境(Environment)中不断尝试动作、观察结果、获得奖励,并根据经验逐步调整行为策略。在 Q 学习中,智能体可以通…...
3款实用论文降重神器,帮你轻松解决重复率难题
对于正在撰写毕业论文或者期刊论文的创作者来说,重复率不达标绝对是最头疼的问题之一。自己手动改了三五遍,重复率还是卡在要求线以上,不仅耽误时间还影响心态,这时候一款好用的降重工具就能帮你省下不少精力。今天我们就以第三方…...
暗黑2存档编辑器:免费开源工具助你轻松修改角色与装备
暗黑2存档编辑器:免费开源工具助你轻松修改角色与装备 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑2存档编辑器是一款专门为《暗黑破坏神2》玩家设计的免费开源工具,让你能够轻松修改游戏存档&…...
PCL圆柱拟合进阶:从模型参数到完整轴线的精准计算
1. PCL圆柱拟合的核心挑战与工业需求 在工业测量和逆向工程领域,圆柱体是最常见的几何特征之一。想象一下汽车发动机的活塞杆、液压缸的活塞筒,或者机械臂的旋转轴,这些关键部件都需要精确的圆柱几何参数。PCL(Point Cloud Librar…...
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端+服务端联调避坑指南
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端服务端联调避坑指南 在C语言全栈开发中,客户端和服务端的联调往往是开发者最容易踩坑的环节。很多初学者能够独立完成客户端或服务端的代码编写,但当两者需要协同工作时&#x…...
3个步骤,用PCL2启动器彻底告别Minecraft配置烦恼
3个步骤,用PCL2启动器彻底告别Minecraft配置烦恼 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 你是否遇到过这样的场景:好不容易下载了心仪的模组…...
基于SAP CAP与RAG技术构建企业级智能问答系统实战指南
1. 项目概述:当企业级应用遇上生成式AI最近在做一个企业级应用的智能问答功能,客户要求能基于他们内部的海量文档(PDF、Word、Excel)进行精准回答,而不是让大模型“自由发挥”。这让我想起了SAP官方在GitHub上开源的那…...
规格驱动营销:用AI代理与工程化思维打造Twitter增长自动化
1. 项目概述:一个为AI SaaS产品设计的Twitter营销自动化工具包如果你正在开发一款AI SaaS产品,并且已经为产品上线后的Twitter营销感到焦虑——不知道如何规划内容、如何与用户互动、如何将推文流量转化为实际用户——那么你很可能需要一套系统化的方法&…...
MetaGPT多智能体协作框架:从原理到实战的AI自动化软件开发指南
1. 项目概述:当AI学会“开会”,一个智能体协作框架的诞生 如果你关注AI领域,最近可能被一个叫“MetaGPT”的项目刷屏了。它不是一个单一的模型,而是一个雄心勃勃的框架,其核心目标直指一个激动人心的未来:…...
