杨林瑶 韩双双 王 晓 李玉珂 王飞跃
网络技术自诞生以来经历了飞速的发展,当前,计算机网络和通信网络已经融入人们生活的方方面面.近年来,随着网络商业化应用的进步,新的网络结构不断涌现,新的协议和算法被不断提出和应用.然而,目前的网络也面临着许多问题,比如缺乏高效的资源管理能力、服务定制能力薄弱、难以提供有效的用户管理[1−2]等,现有的网络体系结构越来越难以满足未来的发展需要.在这种情况下,如何高效、低成本地设计有效的新型网络结构、开发新的网络协议和算法,以解决目前网络结构不灵活、网络开发部署成本高等问题,已经成为一个焦点问题[3].
网络仿真通过软件计算网络中的实体如节点、路由器、交换机、链路等之间的交互来建模网络中的行为,将网络中的行为如收发数据等价为随机发生的离散事件进行排队处理[4−7],是一种由统计模型驱动的网络规划、设计和分析技术,能够为网络研究提供客观、可靠的依据.因此,在当前网络规模和结构复杂性急剧上升的情况下,网络仿真技术可以灵活、精准地设计、模拟网络的结构,以较低的成本进行网络研究,并准确评估算法的性能和效果[8−11],极大地方便了研究人员进行研究和设计.当前,国内在网络仿真软件的设计和研究上的成果不多,但国外已经有很多成功的应用软件[12−39].其中,有适用于多种网络类型的通用仿真软件[12−35]如开源的NS-2、NS-3、OMNeT++、J-SIM 等及商业仿真软件OPNET、QualNet 等,还有一些针对特定网络设计的专用网络仿真软件[36−39],它们极大地方便了网络研究并得到了广泛的应用.
然而,网络仿真技术还存在准确度过分依赖于模型精度和参数设置,不能自适应地调整模型和参数,紧密耦合的仿真层次设计限制了高层应用的灵活性等缺陷.为了克服传统的网络结构设计的缺陷,提高网络的灵活性,降低网络设计和更新成本,Mckeown 教授提出了软件定义网络(Software-defined network,SDN))技术[40].SDN 采用转发与控制分离、网络全局信息对控制可见的设计,解耦了网络的软硬件资源,并将其作为服务开放出去,极大地提高了网络的灵活性和开放性.但是,SDN 仍不能很好地进行动态优化和控制.为了满足网络自适应优化,提高服务质量的需要,未来的网络架构应当进化为基于ACP(Artificial societies,computational experiments,and parallel execution)方法(即人工社会、计算实验和平行执行)[41−43],面向网络大数据的平行网络架构[44].
平行网络基于真实网络的数据建模人工网络,通过构建灵活的网络智能体和规则构建大量的人工网络场景[45−48],生成完备的人工网络场景数据.大规模的人工网络数据结合真实网络的数据,通过各种计算实验[49−52],给出对真实网络优化运行的指导意见.同时,将优化方案在人工网络和真实网络中平行执行,使网络模型训练和评估在线化、长期化[53−55],能够持续优化网络系统,提高复杂网络的运行效果.平行网络系统为从整体上描述网络的状态提供了基本思路,并为开展网络的优化运行实验提供了可行的方法.其综合型和主动性的建模方式使计算实验可以全面考虑各种因素对系统的影响,实现对系统整体的模拟[56−61],而传统的仿真方式只能实现局部行为的模拟.
作为平行网络技术研究的重要手段,仿真技术的研究和应用十分关键.网络仿真软件数量众多、特点不同[7],为了使读者深入了解网络仿真技术及其主要平台的原理和主要特点,推动下一代网络分析和计算实验技术的研究,本文主要做了以下工作:
1)系统地分析了主流的通用型网络仿真平台的发展现状、特点和优缺点及网络仿真技术的缺陷[62−66]和发展趋势,对各网络仿真软件的主要性能进行了对比分析和评价;
2)介绍了平行网络的架构并着重介绍了计算实验的理论、方法、应用[43−53]和平台架构等相关问题,设计了一个计算实验验证该方法的合理性和可行性,以期为未来网络研究和网络仿真技术研究提供有益的启发和借鉴.
本文的组织结构为:第1 节概述网络仿真平台的发展现状和研究情况;第2 节对主要的通用型网络仿真软件进行介绍,并对其优势和主要的缺陷进行了分析;第3 节分析当前网络仿真技术面临的主要问题和挑战;第4 节分析网络仿真的发展趋势和展望;第5 节介绍平行网络的计算实验方法的相关理论和实验案例;第6 节总结本文的主要内容并对平行网络的发展前景进行了展望.
计算机网络仿真软件兴起于20 世纪80 年代,它的出现很好地弥合了网络设计及其应用之间的鸿沟.网络仿真具有如下的特点:1)简单易用,可以很方便地进行网络协议的验证与设计[4];2)应用广泛,可以用于大规模网络的设计分析,这是其他技术难以比拟的;3)成本较低,设计和修改比较容易,使用起来灵活方便;4)具有较高的精度,能够很好地刻画网络的特性,具有良好的统计复用性.
网络仿真是对网络中随机发生的离散事件如丢包、延迟等的模拟,因此,网络仿真软件的内核大多是离散事件驱动的.仿真软件的原理框图如图1 所示.网络仿真软件内部一般都配置有一个离散事件调度器,按照队列组织离散事件.在进行仿真时,每次从队首取出一个离散事件进行处理并将其从队列中删除,并且根据离散事件的结果修改全局变量也就是网络中的状态变量并产生过程统计数据,然后接着取下一个事件,直至队列为空即为仿真结束[5].仿真时钟用于记录仿真的进程,随处理的离散事件的增加而推进.为了模拟网络中的随机性如数据包在网络中的逗留时间和丢失率等,仿真系统需要引入能够产生随机分布的随机数发生器.随机数发生器一般是用一定的算法实现的伪随机数发生器,本质上不具备真正的随机性,并且在算法遇到重复值时,随机数会发生周期性重复,此时便不能有效模拟网络的随机性.因此,仿真软件模拟的随机事件数量不能超过伪随机数发生器的循环周期,伪随机数发生器的设计至关重要[6].
网络仿真软件的一般使用流程[7]为:1)明确研究对象仿真需求,如仿真的对象、层次、规模等.2)根据需求创建仿真模型,部署节点、交换机、路由器等仿真实体.3)创建仿真场景,设计网络的拓扑结构和设定特殊场景参数如移动场景下的速度等.4)设定其他网络参数,如带宽、数据率等.5)启动仿真进程,采集数据.6)运用数据分析工具对采集到的结果统计数据进行可视化分析.
图1 仿真软件原理框图Fig.1 Schematic diagram of simulators
网络仿真技术主要应用在网络性能评估和网络吞吐量规划、预测新协议的性能和进行新协议的开发及快速进行网络部署设计等领域[8].经过三十多年的发展,网络仿真领域已经产生了数量庞大,特点各异、用途不一的仿真软件簇.当前的网络仿真软件大多基于分组级仿真设计,都可以在单机上运行,但是每一种仿真软件都有或多或少独特的侧重方向,都有自己的优缺点和适用的领域,例如物理层的仿真通常选择具有更高物理层精度的NS-2[9],大量节点的网络仿真需要选择具有分布式处理能力的平台,如果需要较少的成本最好选择开源的软件等,因此用户在选择仿真工具时应当面向具体应用,根据仿真的需求来选择合适的仿真软件.
评价仿真软件优劣的主要指标有:1)内存效率,即仿真软件仿真一定数量的节点需要的计算机内存[10],所需内存越少,内存效率越高;2)仿真能力,即软件在满足精度要求的条件下所能够仿真的最大节点数量;3)速度,即仿真软件仿真一定节点数量时需要的运行时间,特别是对于大型网络的仿真时间;4)灵活性,即仿真模型设计和修改的方便程度;5)可扩展性,即对仿真软件进行扩展或修改应用到新的领域所需要的工作量,越容易添加新模块和功能的仿真软件,其可扩展性越高;6)易用性,即软件的用户界面和仿真设计、分析辅助工具和其他用户支持等[11].
网络仿真平台按照其适用领域可以分为通用仿真平台[12−35]和专用仿真平台[36−39],通用的仿真平台可以用于绝大多数类型网络及网络的不同层次,主流的通用网络仿真软件主要有NS-2、NS-3、GlomoSim(Global mobile information system simulator)等,而专用的仿真平台是专为某一类型的网络如无线传感网(wireless sensor networks,WSN)[36]、点对点(Peer-to-Peer,P2P)网络[37]、车载自组织网络[39](Vehicular ad-hoc networks,VANET)等设计的,只有有限的使用范围.表1 列出了通用型网络仿真平台和一些专用于特定类型网络的仿真软件.
数量庞大的网络仿真软件为研究人员和工程师挑选合适的工具带来了困难,也催生了很多针对仿真软件对比的研究工作,这些工作大多按照一定的标准对不同的平台进行对比,或者针对特定的项目或场景进行性能比较.如文献[9]对NS-2、J-SIM、GlomoSim、OMNeT++、QualNet和OPNET 的特点进行了概述,文献[12]对JSIM、OMNeT++、NS-2、OPNET 的特性进行了比较,文献[21]对GlomoSim、NS-2、OMNeT++、JSIM 进行了全面的分析,文献[66]则对 JSIM、OMNeT++、NS-2 就其安装简易度、说明文档、可视化和数据分析能力进行了比较.还有的工作通过实验对不同平台针对特定问题的仿真能力进行了比较,如文献[67]就仿真准确度对NS-2、OPNET 进行了对比,文献[68]则进一步比较了OPNET、NS-2、GlomoSim 的准确度.不同论文研究的软件对象不尽相同,侧重点也不完全一样.为了给网络研究人员选择恰当的网络仿真软件提供可以依据的参考,本文对主流的通用型网络仿真平台进行了对比分析和评价,全面涉及使用最广泛的仿真软件,同时,针对目前通信网络数据面和控制面分离的趋势,对两种SDN 常用的仿真软件进行了功能介绍与分析.
表1 常用仿真软件分类Table 1 Common simulators classification
本节主要对NS-2、NS-3、GlomoSim 等主流的通用型网络仿真软件及Mininet 和EstiNet 这两种重要的SDN 仿真软件的背景、框架、仿真设计等进行了介绍,并对其优缺点进行了分析,最后小结部分对它们进行了比较分析.
NS(Network Simulator)起源于1989 年美国军方的Real Network Simulator 项目,是最早的网络仿真器之一,NS-2 是NS 比较成熟的版本.NS-2是一种面向对象的网络仿真器,本质上是一个离散事件模拟器,是目前学术界使用最广泛的网络仿真软件.NS-2 的软件架构如图2 所示,它基于C++和Otcl(Object tcl)两种编程语言开发.其中,Otcl可以快速进行修改,用于构成解释器,适于编写仿真模型和进行仿真参数配置;而C++程序具有很高的执行效率,主要构成编译器负责执行仿真进程,用户可以基于C++编写自己的库或协议,并利用Make 模块添加到NS-2 的库文件中.解释器和编译器之间通过TclCL(Tcl with classes)接口进行交互,TclCL 可以将Otcl 脚本解释为C++代码执行,并基于模型配置脚本生成对应的编译层变量[12].NS-2 内封装了许多功能模块,包括事件调度器、队列、节点、链路、传输控制协议/因特网互联协议(Transmission Control Protocal/Internet Protocol,TCP/IP)等,用于表示仿真中的网络元素并控制仿真进程.NS-2 也是离散事件驱动的仿真器,事件调度器负责激活仿真队列中的事件,并通过虚拟的仿真时钟记录仿真时间.NS-2 选择了网络动画演示工具(Network animator,NAM)和Xgraph作为数据可视化工具,用户可以在网络配置脚本中添加Trace 信息设置语句,仿真时就会生成相应的基于文本的Trace 文件,用户可以使用Xgraph 将数据曲线画出,也可以用NAM 将仿真过程以动画展示出来.
图2 NS-2 双语言软件结构Fig.2 Two language structure of NS-2
NS-2 支持包括TCP、路由、广播协议在内的广泛的协议仿真,目前已经形成了十分完善的协议库,对正在使用的大多数协议都可以直接调用库进行仿真.它还支持有线、无线、局域网、卫星网络等多种网络类型的仿真,其仿真结果具有较高的可信度.NS-2 支持简化的开放式系统互联(Open System interconnect,OSI)网络分层模型,省略掉了会话层和表示层[13].NS-2 可以与真实的网络进行交互,它可以与真实网络进行连接并捕捉网络中的数据包,同时也可以向外界的网络发送数据.NS-2 相比于其他软件具有较好的移动性支持,可以更精准地建模移动网络模型,对网络底层仿真具有较高精度.
但是,由于NS-2 的两种编程语言的复杂架构,创建一个新的模型或协议是比较困难的,导致它的可扩展性和灵活性比较差,同时,它本身没有GUI支持,使用比较繁琐.另外,NS-2 对一些硬件设备的支持不尽如人意,例如对于天线的支持不够,只支持双向天线和无向天线.但是,得益于其活跃的用户社区,NS-2 拥有很全面的说明文档,很方便的应用程序编程接口(Application programming interface,API),及大量的扩展工具可以供用户添加使用.
为了简化NS-2 的框架,降低复杂度,NS-3 研究社区的开发者在NS-2 基础上开发了NS-3.NS-3始于2006 年,它与NS-2 最大的不同也是优势在于其核心代码和功能模块完全基于C++开发,并且大部分模块提供可选的Python 扩展接口,极大地降低了用户的编程复杂度.NS-3 架构由一系列基于C++类开发的功能模块组合而成,各模块可以实现网络的不同功能如移动模型、路由协议等,模块之间同时存在一定的调用和依赖关系.NS-3 的基本模块及其组织结构如图3 所示,其中,Core 模块是NS-3 的核心模块,包含事件调度、随机变量、回调(Callback,NS-3 中简化函数调用的机制)、日志(Logging,用于输出内部模块执行过程和调试信息)等核心功能[14],Network、Mobility 等模块用于实现网络数据分组、节点移动模型等相应的网络功能,Helper 包含模块的Helper 类代码,Test 则包含模块的测试代码,Waf 是NS-3 的代码编译工具,所有的仿真代码都由它编译运行.NS-3 的仿真模型具有清晰的逻辑和较高的可读性,模型的组成及其顺序一般包括:选择相应的模块、配置Logging 和Trace、设定命令行参数、创建节点、安装网络设备、安装协议栈、设定移动性模型、安装应用层协议、启动仿真等.
图3 NS-3 模块体系结构Fig.3 Module architecture of NS-3
NS-3 仿真层次类似于OSI 网络体系结构,它将数据按照设备层、网络层、传输层、API 套接字和应用层的顺序封装,由类模拟数据按照TCP/IP 协议传输的过程,具有良好的灵活性和可扩展性.NS-3同样是事件驱动的仿真器,事件由节点触发,仿真内核中的事件处理器按照对应的仿真时间从队列中取出相应的事件进行处理,数据包的转发由指针的交互完成,仿真进程占用内存资源较少且运行速度较快.NS-3 的数据传输过程与物理网络的真实模型类似,因而其仿真结果具有较高的可信度.NS-3 的结果数据包括网络场景数据和统计数据,场景数据可以通过离线的NetAnim 或在线的PyViz 可视化工具展示[10],从而使用户直观观测到仿真过程,而统计数据可以利用NS-3 的Tracing 系统动态跟踪仿真生成的Pcap 统计文件,并可利用Wireshark 等工具分析输出结果.NS-3 还支持分布式处理和并行仿真,仿真速度最高可以提升三十倍.
NS-3 目前并不完善,是正在发展中的仿真器,它只有少量的现有协议的模型和库,实现像NS-2 那样完善的协议库还需要较长的时间和社区用户的共同努力.但是NS-3 发展正强劲,NS-2 已经停止更新,而NS-3 还在不断维护更新.作为NS-2 的升级,NS-3 还将在功能上进行扩展,例如提供面向仿真过程透明的统一对外编程接口等.
表2 列出了一些NS-2 与NS-3 之间的比较.
表2 NS-2 和NS-3 的比较Table 2 Comparison of NS-2 and NS-3
GlomoSim 是加利福尼亚大学洛杉矶分校并行计算实验室开发的一个基于库的并行仿真软件,主要用于仿真无线网络.GlomoSim 采用模块化的设计思想,很好地支持了OSI 协议分层.它基于Parsec 语言(一种基于C 的仿真语言,用于实现离散事件仿真模型的顺序和并行执行)[15]编写了一系列库,每一个库专门用于仿真某一层的某个协议[16],每个库有一个API 与其他库进行交互,用于调用其他层的协议,实现多协议联合仿真,新的协议需要使用Parsec 编写并添加到库里.这种设计提高了不同层的模型和协议的独立性,用户可以很方便地修改和替换某一层的库[17],有效提升了它的可扩展性.GlomoSim 可以运行在共享内存或分布式处理器上,通过一些同步协议进行协作,可以实现并行仿真和分布式处理,因此能够被用于大型网络的仿真.GlomoSim 引入了网格的概念,在网格中,一个简单的实体可以仿真系统中的若干节点,当网络中增加新的节点时,仿真的实体数目可以保持不变,仿真前所需规划的仅仅是该系统应该采用多少个实体来表示.因此,GlomoSim 可以支持上百万节点.同时,它可以提供节点和层次聚类,这是很多仿真器无法实现的[18].但是,GlomoSim 缺少TCP 应用,并且不支持图形用户界面(Graphical user interface,GUI)界面.
GlomoSim 在2000 年发行2.0 版本后,便不再进行更新,现在推出的是商业化的版本QualNet.QualNet 是用C++编写的应用于无线、有线及混合动态网络的快速、精确的开发、仿真系统,主要是对移动通信网络仿真进行了优化处理,在仿真速度上得到了很大的提升,同时通过对无线信道和射频技术的强化建模也保证了较高的仿真精度.QualNet 基于普林斯顿共享内存计算机应用程序库(The Princeton application repository for sharedmemory computers,PARSEC)并行仿真内核,每个节点都独立进行运算,这也和现实相符合,允许用户在真正的并行仿真环境当中优化仿真性能.因此,仿真速度快是QualNet 的突出优势,对小规模同等复杂度的网络模型仿真,QualNet 仿真速度是其他仿真器的几倍,对于大规模网络,QualNet 仿真速度是其他仿真器的十几倍到几十倍,如果使用并行仿真模式,能达到比其他仿真器快千倍的速度.
OMNeT++是一个免费的多协议离散事件仿真软件,它不是专为网络系统设计的,原则上可以用于任何相互传递信息的组件系统的仿真.该软件已经有很多网络方面的扩展应用,例如通信网络之间的流量建模、协议仿真、排队网络和复杂网络等[19].OMNeT++的基本组件是模块,其结构是一种嵌套层次结构,模块可以是原子的也可以是其他子模块组成的,模块之间可以进行通信.OMNeT++基于面向对象的设计思想,采用C++作为编程语言,新的组件和模块的编写主要通过调用C++类库中的仿真内核、随机数发生器、数据采集器等实现,因而具有较高的灵活性和可扩展性.
尽管OMNeT++灵活的嵌套模块化结构难以理解,它的使用却是相对容易的.OMNeT++在配置网络模型时不一定要使用C++编程,它支持更易于掌握的网络描述语言(Network description,NED),只有最低层次的模块需要用C++编写[19].同时,OMNeT++有良好的GUI 支持,可以很方便地在图形化界面下调试参数、修改模型和观察结果,而且,它还拥有十分全面的用户手册、API说明文档以及一些教程,用户可以得到良好的支持.OMNeT++通过信息传递接口(Message passing interface,MPI)和并行虚拟机(Parallel virtual machine version 3,PVM3)实现了并行仿真功能,在设计时就考虑了扩展性,因此很适合开发和修改,它的程序兼容性很好,其他软件编写的仿真程序经过少许修改就可以应用到OMNeT++中,它的程序也可以移植到任意一台没有安装OMNeT++仿真环境的主机上运行.但是OMNeT++的协议没有很好地按照OSI 模型组织,同时对移动性建模的支持也比较差.
OPNET 最早由麻省理工学院于1986 年推出,现在已经发展成为一个广泛使用的商业离散事件仿真器,但是研究人员可以获得一个免费的开放版使用.OPNET 是基于C++编写的,其商业应用最为广泛[20],近几年被第三方权威机构(如Network World 等)评选为“世界级网络仿真软件”第一名[21].OPNET 支持大量的无线网络技术,如IEEE 802.11、IEEE 802.16、3 G、超宽带、蓝牙和卫星网络等,它有很多有线和无线网络协议模型,用户可以直接从这些预定义的模型中选择协议构建自己的模型,易于使用.OPNET 仿真内核采用层次化的模拟方式,其协议模型按照业务层、TCP 层、IP层、IP 封装层、地址解析协议(Address resolution protocol,ARP)层、介质访问控制(Media access control,MAC)层、物理层的层次模型设计,符合OSI 分层模型的设计[22];其网络仿真模型与网络、设备、协议的实际网络层次结构对应,分为进程层、节点层、网络层三层.最底层为进程模型,用状态机来描述协议,并可使用Proto-C 语言编码节点模型中处理机及队列的行为.进程层模型的行为由状态转移图刻画,进程按照状态转移图的转移条件在阻塞和活动两个状态之间循环,并根据执行代码执行相应的动作.第二层为节点模型,可以反映设备的特性,由相应的协议模型构成,每个节点模块用于实现真实网络节点设备的一个或几个功能,多个模块组合在一起实现节点的完整功能.最上层为网络模型,包含子网、节点和通信链路等,用于封装网络设备、通信链路和业务配置等[23].
OPNET 的仿真模型都可以看作由多个相互连通的子系统组合成的分布式系统,子系统之间由不同的消息传递机制进行交互,包括基于包的通信、应用接口控制信息通信和基于通信链路的通信等[23].其中,基于包的信息传递机制可以模拟实际网络中包的流动及包的封装和拆解,适用于同一节点内部不同模块之间的通信;接口控制信息是用户自定义的与事件相关的数据列表,可以用到各种有关事件调度的场景;基于通信链路的消息传递用一系列管道去模拟物理链路中不同节点的通信,包括点对点链路、总线链路和无线链路.
OPNET 将统计结果分为矢量统计量和标量统计量,以便于对仿真结果进行分析处理.其中,矢量统计量分为本地统计量和全局统计量,分别针对单个模块和整个网络模型的统计信息进行收集,并向用户提供四种不同的采集模式,即All value(收集所有值)、Sample(采样收集)、Bucket(取平均)、Glitch removal(使平滑),增强了多角度分析结果的能力[24].标量统计量一般由用户手动设置,可以针对某个参数设置不同的数值水平,同时执行多个场景仿真,从而根据标量统计量同时进行多个参数水平的测试,极大地提高了研究效率.
OPNET 既支持多个程序并行执行,又支持分布式仿真,同时它的系统在环机制可以与真实网络环境中的软硬件进行交互.作为一个商业软件,OPNET 提供了全面的用户手册,并提供良好的图形编程界面,模型创建、仿真执行、结果分析等都可以在GUI 下很方便地进行,这些都极大地降低了开发的难度.相比于NS-2、GlomoSim 等仿真软件,OPNET 支持对特殊的硬件设备如收发器和天线等的仿真.OPNET 的伪随机数发生器的循环长度比较短,对大规模网络的仿真能力较弱.
J-SIM 是俄亥俄州立大学的一个研究小组用Java 开发的通用仿真平台,它的结构是一种灵活的基于组件松耦合的软件架构.在J-SIM 中,节点、连接、协议等都是组件,大的组件可以由几个内部组件组成.组件之间可以通过它们的端口相互通信,并且支持一对一、一对多和多对多的通信模式.组件的行为由一个契约定义,契约规定了组件应该对它的每个端口接收到数据做出什么反应[25],组件在运行时可以自发处理数据,因此,可以单独对组件进行设计、运行、测试,而不需要过分关注整体系统,十分易于进行扩展.J-SIM 库的设计基于Java 类,并且基于图论的思想,仿真模型直接用图来表示[26],不同的节点之间以单端方式连接.J-SIM 运行时由Java虚拟机调度线程执行,因此,J-SIM 可以跨操作系统平台运行.J-SIM 仿真是一种查询驱动的仿真,当用户提出一个仿真查询,系统会在保存以前模型结果的数据库中查找信息,如果查到所需的结果,就直接返回给用户,否则系统就实例化这个模型,执行它然后将结果返回给用户并将结果保存到数据库中.
J-SIM 支持网络分层,并且可以仿真任意层数的网络,它的自治组件结构使得它可以很方便地实现不同层的节点之间的连接,因此还可以进行交叉层的仿真.J-SIM 提供图形化的用户界面,用户直接画图拖放节点来定义网络模型,大幅减少代码量.模型还可以很好地重利用,只需要将建好的模型当作子图添加即可,也便于理解.J-SIM 还提供接口可以与其他的脚本语言进行整合,新发布的版本还提供了一个Tcl 的Java 命令语言(Java command language,Jacl)解释器[26],因此,一些其他语言编写的工具如NAM 也可以整合到J-SIM 中.
J-SIM 提供一些小型网络的示例和说明,但是缺少大型仿真的指导文档,用户进行复杂网络开发难以得到良好的支持.另外,J-SIM 和OPNET 一样,其随机数发生器是Java 自带的,随机数的循环长度比较小,因此对于大规模网络的仿真能力较差.
JiST(Java in simulation time)是一种运行在Java 虚拟机上的网络仿真平台,它是新一代离散事件仿真器的原型,即基于虚拟机的仿真[27].SWANS(Scalable Wireless ad Hoc Network Simulator)是一个在JiST 平台之上搭建的无线网络仿真器,它由独立的软件组件构成,可以通过组件结合搭建出无线网络模型,具有较高的灵活性.JiST 的框架由四部分组成:编译器、虚拟机、字节代码重写器和基于语言的仿真时间内核.JiST 的仿真执行过程为:首先对模型代码进行编译,然后在加载时动态重写代码,最后由仿真时间内核生成仿真时间执行语义,控制虚拟机执行仿真可执行代码[28].
JiST/SWANS 最大的特点就是非常高效,相比于其他类型的仿真平台无论在速度还是内存消耗上都有优势,表3 给出了一些节点数下JiST/SWANS与GlomoSim 和NS-2 的对比.
表3 JiST/SWANS 与GlomoSim 和NS-2 的性能对比Table 3 Comparison of JiST/SWANS,GlomoSim and NS-2
JiST 还具有较高的灵活性,其仿真程序不需要用专门的仿真语言编写,也不需要调用各种仿真函数,而是可以用Java 直接定义,它将Java 虚拟机直接转换为仿真平台,可以在普通的Java 编译器上编译,因此具有良好的跨平台性和可移植性.JiST/SWANS 支持移动性模型,并且协议按照OSI标准组织,对分层协议的支持较好.
GTNetS(Georgia Tech Network Simulator)是美国乔治亚工学院基于C++编写的面向对象的分布式高效网络仿真平台,它具有良好的可扩展性,主要面向大型网络设计,支持超过100 000 个节点.它通过降低待处理的离散事件规模、优化内存管理、减小日志文件的大小这三方面的优化有效地提高了大量节点时的仿真效率.基于分布式和并行处理设计,GTNetS 可以有效地提高数据的处理能力和仿真速度.GTNetS 的每一个协议栈都属于一个独立的C++类,并且协议分层是按照现实中的协议分层设计的[29].GTNetS 支持图形化显示,并且支持对节点和链路的禁用和启用.
GTNetS 是一个全特性的网络模拟环境,其设计理念是创造一个完全近似于实际网络的模拟环境,使状态仿真的结果能够更准确地反映真实网络运行状态并且提高其代码的可移植性,使程序可以很方便地移植到真实的网络设备中去.GTNetS 严格按照网络协议分层设计,其不同层的协议栈之间有明确的界限.GTNetS 中的数据包包含一类数据单元协议数据单元(Protocol data unit objects,PDUs)用以定义数据包的传输协议,这些数据单元会随着数据包在协议栈中的上下传输被添加或删除.GTNetS 中的节点设计与实际网络中的终端节点如电脑、网卡等类似,一个节点可以有多个网络接口,每个接口又可以绑定一个IP 地址或与一个子网相连接[30].GTNetS 的传输层实体也模拟真实网络场景构建,其采用类似TCP 的方式与端口绑定,通过端口与其他传输层实体进行交互.
SSFNet(Scalable simulation framework network models)是一个用于互联网协议和网络结构仿真的基于Java SSF(Simple seam framework)的组件集合,主要用于仿真IP 层以上的网络模型,具有良好的可扩展性,物理层和链路层可以在单独的组件中进行仿真.SSFNet 模型是自我配置的,也就是每一个SSFNet 类实例可以通过查询配置数据库自动进行配置.网络配置文件采用领域建模语言(Domain modeling language,DML)格式,用来配置一个完整的网络模型,并且在一个可扩展的DML 数据库包的帮助下实例化一个仿真[31].用于构建虚拟互联网模型的主类分成两个衍生的框架:SSF.OS(包括ProtocolGraph、ProtocolSession、ProtocolMessage and PacketEvent 三个主类)用于建模主机和系统组件,SSF.NET(包括Net、Host and Router、NIC 和Link 四个主类)用于建模网络的连通性、创建节点和链接配置.SSFNet 仿真的运行过程为:首先SSFNet 中的Net.Net 对象查询DML 库,将模型加载到运行配置数据库对象Configuration 中,然后Net.Net 对象将实例化所有实体如节点、协议等,最后调用初始化方法进行初始化,仿真程序便开始运行,并输出仿真的过程参数.
SSFNet 在设计时格外重视内存占用,因此资源消耗比较小,同时,具有有效的线程调度程序和内存到内存的消息传递机制,可以实现并行化处理,因此支持较多的节点数量.但是,SSFNet 缺少对用户的扩展工具支持,也无法很方便地对结果进行分析[32],这些对用户的使用造成了障碍.
Mininet 是2010 年Standford 大学基于Linux操作系统开发的虚拟网络仿真平台,是目前主流的SDN 仿真平台.Mininet 可以对基于Open-Flow、OpenVswitch 模型的各种协议进行开发验证,且代码可以很好地迁移到硬件设备中[33].Mininet 利用Linux 内核提供的轻量级虚拟机制如进程和命名空间来创建网络模型并实现网络节点之间的数据转发和交互,它可以通过命令行实现复杂的网络拓扑结构的构建和修改,且提供Python API 定制各种工具,支持多人协同研发.
Mininet 具有良好的可扩展性,它的轻量级结构使得它在一台主机上就可以轻松模拟具有上千个节点的网络,并且可以验证、测试一个包含主机、链路、交换机等的完整网络体系.Mininet 还具有很好的可移植性,由于它完全基于Linux 内核开发,它的程序可以移植到其他Linux 主机中,其他Linux 程序也可以在Mininet 环境下运行.但是,Mininet 的中央处理器(Central processing unit,CPU)周期由虚拟主机、虚拟交换机和控制器共享,CPU 调度器不能准确地控制调度顺序,因此,Mininet 的仿真结果准确度不够高且难以重现[34].
EstiNet 是台湾SDN 解决方案提供商思锐科技(EstiNet)研发的商用OpenFlow 网络仿真器,能够模拟数千个OpenFlow 1.0 和1.3 交换机.它具有良好的用户界面并提供可视化工具,能够对Open-Flow 控制器发送的数据包进行分析,并且在网络故障时可以快速地进行分析.EstiNet 利用一种称为内核重进入(Kernel re-entering)[35]的方法使用隧道网络接口来捕捉从IP 层向下发送的数据包并将它们送入仿真内核.在仿真内核中,每一个虚拟主机都有自己的协议栈,协议栈包含MAC 层、物理层和其他IP 层之下的协议层,这些协议层可以仿真时延、带宽等,然后,将包发回给目的主机的物理层.
EstiNet 的仿真过程如图4 所示:首先虚拟主机1 的应用程序发送的数据包依次经过各层协议被隧道1 抓取,隧道1 按照先进先出的顺序将数据送入仿真内核,仿真内核通过仿真协议栈各层依次对数据进行分析,然后仿真内核再依次经过各层对数据进行处理,最后再通过仿真内核的接口将数据依次通过物理层到传输层传送到目的主机2.所有Linux程序不经修改即可作为应用程序加入到EstiNet 的仿真中,并且使用Linux 内核构建的真实TCP/IP协议栈来传送数据,因此EstiNet 具有良好的扩展性和准确性.相比于Mininet,EstiNet 的仿真结果可以复现且更加精确,同时,在大规模网络仿真上EstiNet 的性能更加优越.
图4 EstiNet 仿真过程Fig.4 EstiNet simulation process
网络仿真是网络科学研究和通信网络协议开发必不可少的重要手段,网络仿真平台具有数量庞大、适用范围不一的特点,本章对比较常用的通用网络仿真软件进行了介绍.
其中,NS-2 是应用最广泛的仿真软件,尽管它的双语言架构难以掌握,但是它拥有完善的协议库,因此广受青睐.NS-3 是NS-2 的升级,由双语言架构简化为单语言架构,更加灵活且易于掌握,但是目前协议库尚不完善.GlomoSim 的最大特点是通过分布式计算和并行处理技术实现了大规模网络的仿真运算,能够支持百万级的节点数量,其缺点在于缺少TCP 支持且缺乏良好的用户界面.QualNet 是基于GlomoSim 推出的商业化的仿真软件,其最大的优势在于运算迅速,但是它不开源,成本高.OMNeT++也是一个很活跃的仿真平台,被学术界广泛使用,它的嵌套层次结构可以提供非常灵活的仿真支持,易于修改和开发,但是缺少对层次协议和移动性模型的支持.OPNET 是最常用的商业网络仿真软件,拥有十分完善的图形界面和协议库,但是它的可扩展性较差,难以进行二次开发.J-SIM 是一款基于Java 开发的仿真平台,它基于图形化思想设计,拥有很好的GUI,允许画图设计网络,大大简化了代码设计,但是它的说明文档不充分,使用范围不如上述的平台广.JiST/SWANS 是一个基于Java虚拟机的仿真平台,它可以直接用Java 编写仿真模型,并且在Java 虚拟机上运行,因此比较灵活方便.GTNetS 的设计理念是创建一个完全近似于真实网络的模拟环境,代码可以在真实网络和虚拟环境之间很方便地移植.SSFNet 也是基于Java 开发的,它的主要优点是内存消耗比较小并且节点可以自动配置,但是它的功能较弱,只能仿真IP 层以上协议.
SDN 是未来重要的发展方向之一,经典的网络仿真平台一般对SDN 的支持不够强大,例如NS-3只能支持0.89 版本的OpenFlow 协议,而最新的OpenFlow 协议已经升级到1.5 以上了,所以针对SDN 网络一般使用专门的SDN 仿真平台,其中最有代表性的是Mininet 和EstiNet.Mininet 是一个开源的SDN 网络仿真平台,Mininet 运行在Linux内核上,采用基于流程的思想设计,可以用Python编写仿真程序,是目前使用最广泛,最活跃的SDN仿真软件,但是Mininet 的仿真结果不能复现且精确度差一些.EstiNet 是商业化的SDN 软件,兼具仿真和调试的功能,基于内核重进入的设计思想,使用隧道对数据包进行分析仿真,因此精度较高且结果易复现.
大量研究对不同网络仿真软件的性能进行了实验对比,基于文献[66−70]的实验结果并结合作者对各平台的实验验证,表4 对文中所介绍的仿真软件的特性进行了分析评价(使用* 表示对某一评价指标的优劣,* 越多表示其对应指标越优).
网络仿真技术作为当前网络研究和设计的主流技术,取得了较大的发展和进步,多种多样的仿真平台为网络结构和协议设计和分析提供了有力的工具.但是,网络复杂度和用户需求的进一步提升对网络仿真技术提出了更高的要求,网络仿真技术还面临着许多问题和挑战.
首先,随着网络规模和复杂度的不断提升,大规模网络计算和处理技术需要进一步应用到网络仿真中[62−63].目前提高网络仿真软件速度的方法主要有:1)并行和分布式处理技术,并行计算指的是同时处理多条指令的技术,这主要通过共享内存的方式实现,GlomoSim 已经有所实现,主要用于有线网络的模拟上,而分布式处理技术是将任务分配到多个处理器上同时进行处理,可以有效地提高软件的可扩展性;2)分段仿真技术[71],它通过消除冗余计算的方式提高计算效率、节约计算资源;3)混合模拟技术,它通过将解析模型和离散模型相结合的方式加速仿真器的运行[64].但是多数仿真软件尚未有效利用这些技术,同时,近年来兴起的图形处理器(Graphics processing unit,GPU)加速计算[72]等技术被证明可以有效提升计算能力,而网络仿真对这些技术的应用比较迟滞.
其次,智能分析和优化方法在网络仿真软件中的应用不足.网络仿真软件的数据分析可以分为两种:一种被称为在线序列分析,是指在仿真的同时计算误差,只有当误差充分小的时候仿真停止,这种方法可以获得较为精确的仿真结果;另一种方法称为离线序列分析,为了获得误差较小的结果,离散序列分析可能需要用统计独立的伪随机数重复仿真过程,直到获得可靠的结果.当前,网络仿真软件只能对仿真数据进行简单的处理和展示,对模型的分析和优化主要依靠人工完成,而缺乏更有效的分析方法.少有网络仿真软件能够提供完善的机器学习等分析工具,无法对网络数据进行深度的分析从而为用户优化网络设计提供更有效的支持.
表4 仿真软件性能对比Table 4 Performance comparison of simulators
再次,仿真软件与真实设备的交互不足,既难以利用实际网络的数据支持更逼真的仿真模型设计,又无法加速仿真算法应用到实际网络设备中[65].当前,多数网络仿真软件没有提供可与实际网络设备进行交互的接口,仿真模型无法同时在网络设备上进行验证,也无法接受实际网络的反馈.同时,将仿真的模型和算法应用到实际网络上也比较困难.
现有的仿真平台已越来越难以满足规模日益增长的网络的需要,同时也无法对现实网络进行在线的评估和优化,无法高效地帮助提升实际网络的性能.为此,必须对网络仿真技术进行改进升级,不断提升其模拟大规模网络系统的能力.
随着技术不断发展,网络仿真软件也在不断改进,并呈现出许多新的发展趋势.
1)随着并行计算和网格计算等技术的兴起和发展,越来越多的仿真软件开发了分布式处理和并行仿真机制,能够利用更多的分布式计算资源加强运算能力,不断提升仿真速度,例如,文献[73−76]等都基于并行和分布式计算技术对NS-2 进行了提升,实现了对大规模网络的快速仿真,后期推出的仿真软件如NS-3 等也都应用了分布式和网格计算等技术强化运算能力.2)模块化的架构设计被不断强化,且基于OSI 的层次化设计被更多网络仿真软件采用以提高网络模型设计的逻辑性和可读性.新开发的网络仿真器的模型基本按照简化的OSI 协议分层组织,仿真过程中的数据包以类似的层次结果传输和处理,使网络仿真与真实的物理网络过程更相似.3)专用的仿真语言逐渐被摒弃,C++、Java、Python等通用编程语言被完全用于软件的开发和模型设计,极大地降低了用户的学习和使用难度.这一方面得益于计算能力的提升,仿真效率不再依赖于特定的编程语言;另一方面,庞大的开源库使得通用编程语言也可以轻易实现网络系统的建模.4)用户支持不断加强,当前仍在更新的仿真软件大多提供全面的用户文档,同时,GUI 和结果分析及展示工具越来越完善,支持越来越多的开源工具和算法辅助仿真数据的分析.5)对网络优化分析的支持逐步加强,与机器学习等算法的结合越来越广泛,开始提供机器学习等优化分析的扩展工具,使网络设计更加高效,例如,NS-3 甚至发布了ns3-gym-App[77]以提供强化学习工具.
为有效提升网络实验系统的性能,克服传统仿真无法自适应优化网络等缺陷,我们在以上发展趋势的基础上引入了基于平行网络的计算实验平台,从而为网络设计和优化技术的发展提供新的思路.
传统的网络架构面临着灵活性不足、开发应用慢、运维要求高等一系列问题,SDN 技术将控制层和数据层分离,解除了它们之间的紧密耦合,数据层仅负责转发和接收数据,控制层掌握全局的控制信息,提供面向用户的可编程接口,提高了网络的可编程性、灵活性和开放性.但是,SDN 只能基于当前网络信息和既定策略控制网络,无法充分评估不同网络策略的效果,同时,它也无法针对网络攻击等稀疏场景预先给出最优策略.为此,未来的网络将是基于人工网络大数据建模,能够全面优化网络的平行网络系统.
平行网络基于ACP 方法提出,并融合了SDN的思想,所谓ACP,是人工网络、计算实验、平行执行三者的有机结合[1].人工网络融合了SDN 转发与控制相分离的思想[41],将底层资源封装起来,提供开放的可编程接口并可基于多智能体方法[42]对复杂网络系统进行建模,进一步提升了网络的灵活性;计算实验可以基于一定的策略和规则生成完备的人工网络场景[43],进而基于大量且完备的人工网络数据和实际网络数据计算和优化网络,产生对各种网络场景的最优控制策略;平行执行通过人工网络与实际网络之间的动态交互引导实际网络逼近更优的人工网络,从而达到对网络的集中控制、整体优化[44].平行网络不仅使网络更加开放,而且可以充分利用完备的人工网络大数据,对各种可能的网络场景下的参数和控制策略预先进行学习、训练和评估[45],从而能够为网络提供更全面的解决方案,提升了网络的自适应优化能力.平行网络及其计算解析架构如图5 所示,总体而言,平行网络的ACP 由三部曲组成.
1)人工网络是与实际网络相对应的虚拟的网络,它融合了SDN 转发与控制分离、控制逻辑集中及网络能力开放的思想,将网络底层资源抽象为虚拟的、逻辑独立的网络容器,并向控制平面提供开放的可编程接口,形成一个与底层物理网络无关的软件可控的系统.借助知识表示、知识工程与多智能体建模等方法,人工网络可以构建大量可编程、可重构、可计算的软件定义的对象、软件定义的流程、软件定义的场景,进而将它们共同组合成复杂网络的“计算实验室”[46].人工网络由真实网络的小数据驱动,通过对真实网络的参数学习产生人工网络的初始参数,并结合一定的规则学习方法生成智能体之间的交互规则、行为规则,产生大量不同的人工网络子系统.人工网络中智能体的产生、交互和演化是完备的[47],能够产生大量且完备的人工网络大数据,能够模拟所有可能的网络场景,因而能够模拟整个网络系统.
图5 平行网络及其计算解析Fig.5 Parallel network and its computational analysis
2)计算实验可以基于人工网络这一“计算实验室”设计各类网络智能体的组合及交互规则,生成各种网络场景,并且利用各种学习和训练手段求得适用于各种网络场景下的不同策略,并基于一定的策略评估不同的方案,得到针对不同网络场景的最佳方案[48].因此,计算实验主要包含两种模式,即“学习与训练”和“实验与评估”[49].在学习与训练模式下,它能够自动学习和生成人工网络数据的标注信息,从而可以基于数据学习到大量不同场景的知识,进行许多无法在真实网络中开展的实验[50].同时,也可以设定具体的目标,面向特定的网络场景和应用进行训练.例如,计算实验可以基于一定的规则生成许多危险网络场景如网络遭受攻击,并基于此类场景的数据学习应对此类场景的策略.在实验与评估模式下,它能够模拟所有方案在人工网络中的效果[51],进而评估其在对应场景中的表现.
3)计算实验能够基于人工网络“大数据”和实际网络“小数据”组成的“海量数据”进行大量的学习[52],训练并评估特定场景下最佳的网络运行方案,此时,人工网络的结果不再是实际网络的仿真,而是系统运行的一种可能结果.平行网络的目标是基于在人工网络上的计算实验训练及优化特定场景的人工网络模型参数[53],并通过平行执行引导实际网络朝着更优的人工网络优化运行.一方面,计算实验得到的优化参数和策略可以应用到实际网络上,提升实际网络的性能;另一方面,人工网络接收到实际网络的反馈,进行实时、在线的借鉴、预估和引导,使两者平行调谐,协同优化[54].
4)在数据层面,平行网络基于实际网络数据,借助生成式对抗网络等计算实验手段生成相对完备的“海量网络数据”,通过对海量网络数据的学习、训练求解网络优化解并进行优化解评估,使之具有更广泛的适用性;在控制层面,平行网络利用人工网络与实际网络的虚实交互、双向验证实现两者的协同进化以及对整个网络的多目标优化管理与控制.它不仅可以优化整个网络,还可以主动学习并评估网络管控效果并自适应调整未来策略,因此更智能.
传统的网络仿真技术通过数学建模和数值方法模拟网络运行过程,其主要目的是逼近真实网络的状态[55−56].而计算实验方法通过在人工网络上构建大量的网络场景生成完备的人工网络数据,基于对人工网络大数据和实际网络数据的训练和评估生成各种网络场景下的最优方案,以优化的人工网络引导实际网络[57],从而提升网络的性能.
计算实验的主要流程是:基于机器学习、统计分析等技术,从真实网络的数据中提取网络的特征和规律[58].随后,基于提取到的特征构建人工网络智能体的行为和交互规则并生成网络场景,实现对真实网络的模拟,在此基础上,可以针对特定的目标和应用设计特定的实验方案,进而基于完备的人工网络数据训练和评估相应场景下的控制策略[59],并将最符合实验目标的控制策略作为网络的优化方案.
基于以上思想,计算实验平台的系统流程图如图6 所示,它包含实验设计、动态仿真、学习优化、分析评估与数据中心五个主要模块[60],通过模块之间的交互和协作,实现对复杂网络系统的解析、预测和引导[61].
实验设计模块的主要任务是协助用户制定相应的实验方案,并生成相应的人工网络规则和场景.它的主要功能是通过物理信号传感器和社会信号传感器获取实际网络信号和社会舆情信号并借助机器学习、数据挖掘等技术对其进行学习,从而获取实际网络的参数.通过自然语言处理、平行学习等知识自动化技术,它可以解析用户对网络的需求,从而理解网络优化任务,并通过智能规划、专家系统等方法生成相应的实验方案.基于解析的实验目标和方案,它可以自动生成人工网络智能体的行为和交互规则,进而生成相应的网络场景.
动态仿真模块基于传统的网络仿真平台,能够执行基于智能体的网络实验,演化出完备的人工网络数据.它的主要功能是基于实验设计模块产生的网络场景和规则生成一定数量的智能体并模拟它们的行为及交互,并采集实验的过程数据,同时根据指定的目标对数据进行标注或处理.
学习优化模块的主要功能是对动态仿真产生的人工网络大数据结合实际网络数据进行分析和学习,从而获取网络的具体知识,产生网络的优化调参方案.学习优化模块包含模糊控制、动态规划、人工神经网络、遗传算法、蚁群算法等控制算法,也包含深度学习、强化学习等人工智能算法,能够基于大量的计算实验优化网络参数.同时,学习优化模块还具有一定的自我学习和调整能力,可以灵活地对计算实验用到的算法进行选择和优化.
分析评估模块主要负责对计算实验的过程和结果数据进行评价和分析,从而判断最符合实验目标的网络运行方案,并对实验过程进行检查,查看实验过程是否产生错误并对错误进行分析和纠错.
基于大量的场景实验和训练评估,计算实验平台能够生成大量针对不同场景的优化方案和控制策略.为了便于在面临新的网络状况时快速给出相应的解决方案,数据中心模块将存储各种网络场景下的最优方案,并可基于实际网络的参数快速查询相应场景的解决方案[53].
图6 计算实验平台系统流程图Fig.6 System flowchart of computational experiment platform
由此可见,仿真器是网络智能体运行和交互的场所,是计算实验平台的核心,基础仿真平台的选择将直接影响到计算实验平台的性能.平行网络计算实验平台仿真器的选择将主要基于以下几点:是否拥有标准的可编程接口、是否开源、是否具有较高的灵活性和可扩展性、是否具有全面的说明文档等[55].基于本文对通用网络仿真平台的介绍和分析,满足以上需求的仿真平台有很多,例如NS-3 等都可以作为候选的仿真器嵌入计算实验平台.
但是,计算实验方法与仿真方法有着本质的不同,计算实验是一种主动控制技术[57],它不仅能够模拟和预测真实网络的状态,而且能够基于对完备的人工网络数据的学习找到各种网络场景下和优化参数和最佳控制方案,进而引导实际网络系统优化运行[60].
基于其更全面的控制策略和全局网络的自适应优化能力,计算实验将在下一代网络中具有广泛且重要的应用,为网络升级和服务能力提升提供强有力的助力.例如,当前,中国的4G 网络基站数已经达到了100 万以上,长期演进(Long term evolution,LTE)网络有大量的参数可供优化,存在很大的服务质量提升空间.然而,上万级的规模为网络参数的最优配置带来了困难,既很难在海量的参数中选择有价值的参数进行优化,又难以在实际基站小区中进行实验,同时面对复杂多变的网络场景也不能自适应地进行调整.为此,可以构造与真实小区相对应的软件定义的人工网络,在其上进行大量的计算实验,综合运用专家系统推荐算法、机器学习算法、聚类算法等[78]提取网络的个性化特征,自动推荐个性化的网络参数,对重要的参数计算分析其优化值.由此,便可自动完成海量参数的选择、优化,并可通过对大量场景的学习提升网络的自适应调节优化能力.
计算实验方法能够有效利用社会信号[79−81]和物理网络信号解析网络,针对具体场景提供最佳的网络优化指导.为了验证计算实验方法的有效性,本小节设计了基于该方法的网络优化实验.本文以微信网络的数据传输为例,基于多种计算实验方法分析其朋友圈链接内容被浏览并转发的可能性,并进一步将相关数据缓存至转发者附近的服务器,从而降低转发者的跟随好友的访问时延.
微信是国内使用最广泛的即时通信软件,微信朋友圈之间存在一种双向链接关系[82],即通信双方彼此为好友.微信朋友圈只能被自己的好友看到,但同时好友具有一定的转发权限,进而影响好友的好友,使信息进一步扩散出去.通常,微信好友多为与用户拥有更多相似性的本地好友,数据多存放在更多被访问的发布者本地服务器,因此,转发者及其跟随者访问数据也需要访问较远距离的本地服务器,增加了跟随者的访问时延和本地服务器的负载.
为了从整体上提高微信用户的访问效率,Zhang等[83]提出了一种对服务器重新分配位置的反向贪婪算法,通过计算所有可能的组合形式,并计算每种可能组合的整体通信负载选择具有最小负载的方案,进而提升网络的服务质量.然而,该算法需要遍历所有可能的组合,计算复杂度高,且该方法对网络的优化需要将服务器的位置重新安置,成本需求较高.在通信网络中,缓存机制被认为是一种有效的降低网络负载并提高用户体验的技术并得到了广泛的研究.通常,缓存是将一片区域内最流行的内容存储到该区域内的服务器[84],当用户提出请求浏览该内容时,可以就近从本地服务器上获取,进而降低传输时延,并且避免大量请求造成的通信过载.
为了更有效地优化微信数据传输网络,我们首先基于对微信转发行为的特征提取分析微信用户的行为模式,进而利用多种机器学习方法预测用户的转发行为,分析用户对网络的需求.接着,我们通过缓存机制优化网络性能,并基于仿真平台预测和评估网络的性能,进而验证该方案的效果.
我们基于文献[85]公布的微信朋友圈链接浏览记录数据集分析用户的行为特征,该数据集由大量的五元组构成,包含链接ID、发布者ID、浏览者ID、浏览者地址、浏览时间等内容.浏览者在浏览发布者发布的链接内容时,可能对感兴趣的链接进行转发,而后转发者的好友仍可能浏览或转发该链接.为了分析微信朋友圈的转发行为,我们首先对数据集进行标注,将由转发产生的数据标注为1,其他标记为0,从而将问题转化为一个二分类问题[86−87].接着,我们对能够有效预测用户行为的特征进行提取,数据中的特征包括浏览日期、持续浏览时间、浏览页数、总页数、二者之比等.同时,用户的个性是对其转发与否的重要影响因素,个别用户比较倾向于转发好友的链接.为此,我们基于数据集计算生成了一个新的特征,即用户的历史转发频度.在此,我们选取3 个主观上最有价值的特征,即持续浏览时间、浏览页数/总页数、用户的历史转发频度.
分类算法的性能一般用准确率来表示,其定义如式(1)所示,其中,TP、TN、FP、FN 分别表示转发样本被正确预测数、未转发样本被正确预测数、未转发样本被错误预测数及转发样本被正确预测数.
通常,转发数据相比一般的浏览数据较为稀疏,在本数据集中只有2.5% 左右.而为了较高精度的做到提前缓存,我们更关注转发数据被正确预测的比例,即分类模型的召回率:
随机选取一个链接,提取其数据记录并将其分为训练集和测试集,基于不同的特征组合和分类算法,我们得到转发预测的召回率如表5 所示.表中未列出的特征和分类算法组合不能正确分类转发与未转发数据,由预测结果可知,基于浏览时间和历史转发频度,以支持向量机(Support vector machine,SVM)作为分类器可以达到最高的分类性能,其预测召回率高达92.07%.因此,这两类简单的社交网络特征可以帮助我们精准预测用户的转发行为,进而为网络优化提供参考.
表5 转发预测召回率Table 5 Recall rate of retweet prediction
基于对用户行为和网络需求的精准分析,可以通过将数据预先缓存至转发者附近的服务器,降低后续浏览者的访问时延,优化网络的服务.为了验证该方案的效果,我们选取了一段时间内某链接的浏览记录进行了简化处理.本实验通过OPNET 仿真软件进行了对比仿真,对相应的时延和本地服务器吞吐量进行了分析.在该实验中,共有50 个不同省市的节点向位于北京的发布者本地服务器请求数据,其中,有16 个节点为位于广东的转发者的本地跟随者,根据以上设计,本实验设定了两种实验场景,一种为所有节点向北京本地服务器发送请求,另一种为基于转发预测结果将数据缓存至广州本地服务器,跟随者节点向转发者本地服务器发送请求.网络为客户机/服务器模式,网络拓扑结构为星型,服务器节点模型选择Sm_Int_server,客户机节点模型为Sm_Int_wkstn,网络业务为Light database 业务,链路带宽为10 Mbps,仿真时间设置为30 分钟.
两种方式的整体时延和北京本地服务器的负载分别如图7(a)和7(b)所示.可见,基于转发预测及缓存方法,可以有效降低用户的平均访问时延,同时,服务器的负载得以均衡化,有利于整体提升网络的利用率和服务质量.因此,基于计算实验方法,能够基于数据有效解析用户的网络需求,并评估网络优化方案的效果,以此指导实际网络的优化.
本节介绍了平行网络架构及其计算实验方法,该方法基于实际网络数据建模人工网络,并进一步生成完备的人工网络大数据,同时,它可以基于社会信号解析用户的网络需求,基于特定的目标从人工网络大数据和实际网络数据中学习和训练针对具体场景的网络优化方案.基于微信朋友圈转发预测和内容缓存的网络优化实验证明计算实验方法可以有效提升网络的服务能力,更好地满足用户的需要.
图7 传统网络与计算实验优化性能对比Fig.7 Performance comparison of traditional method and parallel network computational experiment
网络仿真技术为网络设计、开发和诊断提供了强有力的工具.本文全面调研了主流的通用型网络仿真平台,对各种软件的主要特点和技术基础进行了介绍,并对比分析了不同平台的优缺点.同时,本文还对网络仿真技术的主要问题和发展趋势进行了分析,在此基础上介绍了基于ACP 方法的平行网络架构,并重点介绍了其计算实验平台.
平行网络有效提升了网络的灵活性及自适应优化能力,其计算实验方法综合仿真、数据挖掘、机器学习及知识自动化等技术,以可计算、可比较、可实现的方式解析复杂的网络系统,为未来网络的智能管理和控制提供了新思路及方法.
此外,网络系统是一个涉及到多方个体的复杂系统,与用户的主观和客观因素有很大关系.ACP方法中基于多智能体的建模方式能够有效模拟各种个体的行为及其相互影响,为车联网等多种网络系统的规划、管理和资源分配等提供适应的解决方案,使网络从“人适应系统”向“系统适应人”转变.平行网络系统作为一个集成验证平台,必将成为未来网络系统发展的一个重要方向,为不断发展的网络业务需求,特别是智联网[88−89]的需求提供有力支持.