复杂混合网络中拥塞控制算法仿真实验设计

2021-03-04 08:41姜雨菲梁向阳
实验技术与管理 2021年1期
关键词:点对点公平性控制算法

姜雨菲,梁向阳

(西安工业大学 计算机科学与工程学院 新型网络与检测控制国家地方 联合工程实验室,陕西 西安 710021)

“计算机网络”及其相关课程是教育部指定的计算机专业和信息类专业本科生和研究生的核心基础课程[1]。课程以网络体系结构为框架展开,由于网络概念一般比较抽象,学生难以理解,而实验教学环节能很好地弥补这一缺陷。又由于实际的网络实验受到环境、规模的限制,采用仿真方法便成为最经济有效的课程教学实验手段[2]。

TCP拥塞控制是“计算机网络”教学中的一个重点和难点[3]。随着当前传统的单一网络结构转变为多种异构网络结合的复杂混合网络结构,也对相关的实验教学内容提出了新的挑战和要求。复杂混合网络中的拥塞控制不仅是网络稳定、高效运行的关键,同时又是实现各种服务的基础和前提。本文基于NS3仿真平台,以TCP拥塞控制为实验目标,详细论述了当前普遍使用的多种TCP拥塞控制算法的仿真实现过程,并在多个网络环境下对各类算法的公平性以及友好性进行了实验比较。

1 NS3仿真概述

NS3是一种基于 Linux的开源、免费的网络仿真软件,由于其能够更符合实际地模拟现实世界中的各种网络,因而其可靠性得到世界上众多研究者和企业界的认可[4]。同时由于其适应性非常广泛,可以实现多类复杂混合的网络传输环境和拓扑环境,因而对“计算机网络”教学有着非常重要的辅助价值和现实意义。图1为其可模拟的典型复杂混合网络。

图1 模拟真实环境中复杂网络拓扑

NS3仿真模块基本涵盖了网络通信的所有层次,包括应用层的各种分组产生器,传输层的 TCP和UDP,网络层的IPv4和IPv6协议,链路层和物理层的点对点(PPP)、CSMA,以及 IEEE 802.11a/b/g/n和LTE协议等无线网络。

2 实验平台的实现

NS3提供各种用于网络模拟的应用程序接口(application programming interface,API),可以在模拟脚本中调用这些 API来构建自己的仿真网络结构[5-6],其仿真的基本模型如图2所示。

图2 NS3基本模型

其中,Node类提供了用来管理模拟器中网络组件表示的各种方法,包括应用程序、协议栈、外接卡和驱动程序。Application类为仿真中的用户级应用程序提供了各种方法。在这些应用程序中,发送方和接收方应用程序都用于在仿真网络中发送和接收数据包。Channel类用于描述通信子网对象,并提供一种方法来管理它们并将它们连接到节点。NetDevice类用于描述 NS3中的网络设备,包括 CsmaNetDevice、PointToPointNetDevice、Wi-FiNetDevice等。NetDevice类的主要功能是管理节点和连接信道对象。Topology Helper用于帮助连接网络设备和节点以及网络设备和通道,并帮助安排IP地址。

网络中 Channel的传输方式主要包括点对点(PPP)、CSMA和无线。点对点仿真使用点对点协议(point-to-point protocol,PPP)传输分组。对于点对点信道来说,对应的网络设备类是PointToPointNetDevice,信道类是PointToPointChannel。构建点对点网络链路的核心代码如图3所示。

图3 点对点网络链路的核心代码

CSMA网络与PPP都属于有线网络技术,不同之处是 CSMA信道可以连接多个节点,如总线型网络等,需要节点竞争信道使用权。其链路仿真构建的核心代码如图4所示。

图4 CSMA链路仿真构建的核心代码

无线网络由一个接入点(access point,AP)和多个nWifi移动节点组成,无线链路仿真构建的核心代码如图5所示。

在NS3仿真平台上可以通过自主创建节点、配置信道属性、创建信道并连接节点来实现网络拓扑的建立。NS3的所有模块都为用户提供了丰富的助手类,可以屏蔽复杂操作的实现细节,从而降低了编写模拟脚本的复杂度。

图5 无线链路仿真构建的核心代码

3 TCP拥塞控制算法实验案例

3.1 实验场景设计与搭建

实验场景如图6所示,其中0—3,6—9节点可以同时作为发送端和接收端,4,5节点为交换路由节点,4~5链路为典型的瓶颈链路。传输方式是有线,通过设置节点发送速率和链路的传输时延,可模拟多种混合网络环境,具有较好的普适性。

图6 4∶4哑铃网络拓扑结构

本文使用 NS-3.29版本,仿真环境为 Ubuntu 16.04。构建图6网络拓扑结构的主要代码如图7所示。

3.2 TCP拥塞控制算法的实现

在网络运行的某段时间,如果对网络传输资源的需求超过了该资源所能提供的可用部分,网络的性能就要发生变化,这种情况叫拥塞[7]。拥塞控制能防止过多的数据同一时间注入到网络当中,从而使网络中的设备资源或链路不致过载。拥塞控制常常是在TCP中实现的,因此也叫TCP拥塞控制。

NS3中TCP的属性和trace变量都集中在以下3个核心类中。TcpSocket:这是一个虚类,主要定义了一些基本的TCP属性;TcpSocketBase:窗口管理、拥塞控制等主要TCP算法都在这个类中实现;TcpL4Protocol:是与网络层的接口,也负责TcpSocketBase对象。

图7 图6网络拓扑结构的主要代码

实验人员在仿真程序的顶部以及在为节点创建网络协议栈之前添加相应代码,就可以设置所需要的TCP拥塞控制算法。例如,设置Cubic拥塞控制算法如下:

拥塞控制算法的公平性和友好性一般是通过吞吐量的值来衡量的,而吞吐量的获取需要套接字的属性[8]。通过 Socket::CreateSocket()函数创建套接字,其返回值就是一个套接字指针,其参数必须是ns3::SocketFactory对象,需要通过配置套接字指针把属性和 TcpL4Protocol对象关联在一起,采用的方法是通过配置系统函数Config::Set(),其核心代码如下:

4 实验及结果分析

4.1 拥塞控制算法理论验证性实验

NS3支持的拥塞控制算法有十多种之多,基本涵盖了当前所有常用的拥塞控制算法,包括NewReno、Cubic、Vegas、Yeah、Hybla等。对 NS3支持的主要TCP拥塞控制算法进行仿真,将仿真参数设置如下:链路带宽 100 Mbps,时延 100 ms,仿真时间 250 s,丢包率0.000 001。去掉前50 s非稳态区数据后的仿真实验结果如图8所示。

图8 TCP拥塞控制算法的cwnd(网络拥塞窗口)

下面两小节将以其中两个典型的拥塞控制算法NewReno和Cubic为例,进行验证性分析。

4.1.1 NewReno拥塞控制算法的验证性分析

NewReno是 Windows系统多个版本中采用的TCP拥塞控制算法[9],也是大部分“计算机网络”课程中的教学事例算法,其核心思想涉及对拥塞控制窗口和慢启动阈值的调节机制。

在慢启动阶段,发送端每收到了一个新的 ACK(确认字符),拥塞窗口就增加一个 MSS(最大数据段长度),拥塞窗口的计算方法为:

在拥塞避免阶段,拥塞窗口的增长幅度相对于慢启动阶段有所放缓。窗口大小在一个RTT(往返时延)内增加一个 MSS,从指数增加变成了线性增加。此时,发送端收到一个新ACK时,新拥塞窗口的计算方法为:

RTO(重传超时时间)超时、快速重传与快速恢复时,拥塞事件可以由RTO超时和重复ACK引起。若发送方连续收到N(一般为3)个重复ACK,则发送方确定数据包丢失,它将立即重新发送数据包,而不等待RTO超时,之后进入快速恢复阶段。此时,慢启动阈值的计算方法为:

截取图 8(g)中 NewReno拥塞控制窗口变化的部分数据放大,如图9所示。

图9 NewReno算法拥塞控制窗口局部放大图

由图9可见,拥塞控制窗口在增加的时候有一个明显的指数上升阶段和一个线性上升阶段,而当发生重传时,慢启动阈值会降为当前拥塞窗口的一半,并基于此进入拥塞避免阶段。由此可见,该算法的仿真结果和理论分析完全一致[10]。

4.1.2 Cubic拥塞控制算法的验证性分析

Cubic算法是在 Bic算法基础上改进而来的,并被应用在当前多个Linux操作系统版本中[11],也是较流行的一种拥塞控制算法,对其进行研究有助于理解Linux操作系统的网络特性。

Cubic算法使用一个如下的三次立方函数来代替Bic算法中的窗口探测曲线,其拥塞窗口的计算方法为:

截取图8(h)中Cubic拥塞控制窗口变化的部分数据放大,如图10所示。

从图 10可见,除了发生丢包重传而使得拥塞控制窗口数值突然下降外,整个拥塞控制窗口的变化完全符合三次立方函数的变化趋势,和理论分析完全一致[12]。

除了上述两个典型的拥塞控制算法,文献[13—25]也分别说明了其他算法仿真结果的合理性与准确性。

图10 Cubic算法拥塞控制窗口局部放大图

4.2 拥塞控制算法的公平性实验

公平性是TCP拥塞控制算法的重要特征之一,是指采用同一种拥塞控制算法的 TCP流对网络共享资源(如瓶颈链路)的占用公平程度。对NS3内支持的主要TCP拥塞控制算法进行公平性实验仿真,每次仿真中,有4条采用相同拥塞控制算法的TCP流,2条基于高延时(100 ms)、高带宽(100 Mb·s-1)的链路,2 条普通链路(2 ms,1 Mb·s-1),以各链路的吞吐量作为比较的指标依据。其仿真结果如图11所示。仿真时间为 250 s,丢包率为 0.000 001。

图11 TCP拥塞控制算法不同链路吞吐量对比

仍以NewReno算法和Cubic算法为例进行分析说明。NewReno算法是 RTT敏感性算法,在网络运行初期,低延迟的TCP流具有较小的RTT,因此其拥塞窗口增长很快,吞吐量激增,而当高延迟TCP流的拥塞窗口也增长上来后,在网络传输错误率不高的情况下,网络带宽的大小将决定对瓶颈链路的占用比例。由此可见,NewReno算法对网络环境是较为敏感的,不同的网络环境会有不同的性能特征,但同质网络环境下的公平性却非常好。而Cubic算法的拥塞窗口增长函数是由连续两个拥塞事件之间的时间间隔决定的,与RTT无关[26],这就使得Cubic算法在多个共享瓶颈链路的TCP流之间表现出良好的公平性,且不受网络环境的影响。由此可见,采用Cubic的Linux操作系统在网络环境略差的情况下还可以保持相对优良的网络传输性能。

4.3 拥塞控制算法友好性实验

友好性是TCP拥塞控制算法的另一个重要特征,是指采用不同拥塞控制算法的 TCP流之间对网络共享资源(如瓶颈链路)的占用公平程度。下面以Cubic为基准,实现其与其他拥塞控制算法的友好性对比实验。每次仿真有4条TCP流,2条采用Cubic,2条采用其他算法,各链路的带宽为 100 Mb·s-1,时延为 100 ms,仿真时间250 s,丢包率为0.000 001。其仿真结果如图12所示。

图12 Cubic算法与其他拥塞控制算法友好性对比

由图12可见,在本实验设定的网络环境中,Cubic具有较好的传输性,网络吞吐量稳定,且不会受其他TCP流的影响。由于每种拥塞控制算法的设计都有其适应性范围和条件,因此也可以得出,一些拥塞控制算法(如 NewReno、YeAH)在当前网络实验环境下与Cubic相比的友好性较差。

5 结语

文章采用NS3仿真工具,搭建了多种类TCP拥塞控制算法的哑铃型混合网络实验环境,并详细论述了实验平台实现的方法,包括拓扑构建、网络环境参数设置、协议栈和套接字的安装、拥塞控制算法的配置等关键步骤。文章对多个拥塞控制算法进行了验证性仿真实验,并以NewReno和Cubic算法为例进行了理论分析对比。在此基础上,对多个算法在不同网络环境下的公平性进行了仿真和结果分析,并以 Cubic为对象,仿真对比了该算法与其他拥塞控制算法的友好性。仿真结果符合理论分析,实验设计成功,结果正确。该实验方法和平台不仅可以服务于本科生和研究生教学,也可以通过修改拥塞控制算法源代码,产生新的拥塞控制算法,使其进一步成为可靠的研究性实验平台。

猜你喜欢
点对点公平性控制算法
“点对点”帮2万名农民工返岗
基于虚拟电厂能量管理的点对点市场交易模型分析
高管薪酬外部公平性、机构投资者与并购溢价
农民工返岗复工点对点服务微信小程序上线
OptiX155622H设备点对点以太网透传业务故障分析
基于ARM+FPGA的模块化同步控制算法研究
高精度位置跟踪自适应增益调度滑模控制算法
关于公平性的思考
基于航迹差和航向差的航迹自动控制算法
基于普查数据的我国18个少数民族受教育程度及公平性统计分析