当前位置: 一起学习网 > 学习电脑 > 基础知识 > 正文

ns3网络模拟器基础及应用

ns3网络模拟器基础及应用篇一:基于NS3的虚拟网络实验室构建及可视化实现

龙源期刊网 .cn

基于NS3的虚拟网络实验室构建及可视化实现

作者:陈显涛 金伟祖 于志安

来源:《电脑知识与技术》2014年第01期

摘要:随着网络的发展, 网络研究与实验也变得越来越复杂,但高校开展新颖网络实验却举步艰难,特别是针对某些需要大量物理设备才能顺利进行的实验,因为许多普通高校无法提供足够的硬件资源。因此,网络虚拟实验的实现就十分必要。当前,网络仿真实验以及网络仿真软件已有一定的发展基础,但在线可视化的虚拟网络平台上依旧是一块空缺。 本文采用Linux下流行的LAMP架构,使用HTML5、JavaScript、 Django和NS3等技术,开发了基于NS3的虚拟网络实验室构建及其在线可视化。

关键词:NS3;Python;Django;JavaScript;HTML5

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)01-0020-04

作为培养和提高学生动手实践能力、观察能力、分析问题和解决问题能力等方面有着先天优势的实验教学是高校教育改革的关键问题之一[1]。目前,我国传统实验教学环节不足、实验资源投资不足,严重制约着实验教学的发展,虚拟实验可以有效解决解决上述问题,虚拟实验的建设有利于降低实验室建设成本,缓解财政压力给实验教学带来的不利影响,有利于培养学生实验操作能力[2]。因此,虚拟实验教学环境的研究已经成为当前教育研究的新热点,究其缘由主要是信息技术的蓬勃发展已经使部分虚拟实验环境的设计与开发成为现实,使各类虚拟实验室建设成为可能[3]。如今网络仿真实验以及网络仿真软件已有一定的发展基础,但在线可视化的网络仿真平台上依旧是一块空缺。

1 系统设计

1.1 体系架构

本虚拟实验室在总体设计上,共分为四层架构,结构如图1所示。

1) 前端网页显示层,它定义了与页面中UI组件相关联的属性和处理逻辑,使用了HTML和JavaScript技术,通过网页来显示虚拟实验结果。

2) 服务层,提供页面处理服务,选用了Apache作为网站的服务器,Apache服务器具有安全性高和跨平台性等特点。

3) 控制层,它控制着各个页面的跳转以及页面间数据流的处理,并负责调用与NS3程序相关的模块。选用了Django网络开发框架,来负责页面数据处理和传递的控制。Django遵循

ns3网络模拟器基础及应用篇二:高级计算机网络实验报告 ns3模拟数据中心

Project1-ns3模拟数据中心

实验要求

根据上面的数据中心拓扑图,完成以下要求:

1. 根据给定的数据中心的拓扑结构,利用ns3进行仿真

2. 模拟两种通信模式(traffic pattern)

o all-to-all:每个服务器都发送消息给其他服务器消息,由拓扑结构可知,超过50%的消息传送将跨越两个簇(cluster)

o many-to-one:每个服务器都发送消息给其中一个服务器

3. 测量两种模式下网络的仿真可以达到的吞吐量,找出网络瓶颈,并且说明如何改进 注:拓扑中的网络都是Ethernet网

实验内容

数据中心模拟

①实现及主要代码解释

a. 设置自定义的attribute

为了做实验方便,设置如下自定义attribute:

?

?

?

?

?

? pattern:通信模式,all-to-all或many-to-one,默认为1 defaultDst:多对一模式下,接收消息的默认服务器序号,默认为0 verbose:enable或者disable PacketSink和OnOffApplication的日志,默认为false DataRate1:定义数据中心拓扑第一层的数据传输速率(Mbps),默认为1.0 DataRate2:定义数据中心拓扑第二层的数据传输速率(Mbps),默认为1.0 DataRate3:定义数据中心拓扑第三层的数据传输速率(Mbps),默认为1.5 实现代码如下:

b. 创建结点

根据实验要求,总共需要创建15个结点,包括:

?

?

?

? 8 servers 4 ToR switches 2 Aggregation switches 1 Core switch

实现代码如下:

c. 创建CSMA网络节点

整个数据中心网络拓扑从下往上可以分为三层,即

? 第一层:由服务器与ToR组成的ethernet网络,共有4个,编号为

?

? 第二层:由ToR与Aggregation组成的ethernet网络,共有2个,

第三层:由Aggregation与Core组成的ethernet网络,共有1

个,编号为将创建好的15个网络结点分配到这7个CSMA网络中,实现代码如下:

d. 设置CSMA网络attribute,并将其安装到相应结点上

根据实验要求中的网络拓扑,设置相应网络的属性

?

? 所有直接相连的两个结点之间的延迟都为500ns 第一层和第二层CSMA网络的数据传输速率都为1.0Mbps,第三层为1.5Mbps

然后安装到相应的网络结点上,实现代码如下(DataRate可以通过命令行参数设置,默认值即为原实验要求):

e. 分配网络IP

根据实验要求,为每个结点安装协议栈,并为7个CSMA网络分配IP,实现代码如下

ns3网络模拟器基础及应用篇三:ns-3网络仿真

NS-3网络仿真

一:实验要求

用NS-3仿真某个特定的网络环境,并输出相应的仿真参数(时延,抖动率,吞吐量,丢包率)。

二:软件介绍

NS-3 是一款全新新的网络模拟器,NS-3并不是NS-2的扩展。虽然二者都由C++编写的,但是NS-3并不支持NS-2的API。NS-2的一些模块已经被移植到了NS-3。在NS-3开发过程时,“NS-3项目”会继续维护NS-2,同时也会研究从NS-2到NS-3的过渡和整合机制。 三:实验原理及步骤

NS-3是一款离散事件网络模拟驱动器,操作者能够编辑自己所需要的网络拓扑以及网络环境,来模拟一个网络的数据传输,并输出其性能参数。

软件中包含很多模块:节点模块(创造节点),移动模块(仿真WIFI,LTE可使用), 随机模块(生成随机错误模型),网络模块(不同的通信协议),应用模块(创建packet 数据包以及接受packet数据包),统计模块(输出统计数据,网络性能参数)等等; 首先假设一个简单的网络拓扑:两个节点之间使用点对点链路,使用TCP协议进行通信,

假设随机错误率为0.00001,节点不可移动(因为不是无线网络),具体代码如下:NodeContainer nodes;

nodes.Create (2);

创建两个节点;

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));

pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));

设置链路的传输速率为5Mbps,时延为2ms;

NetDeviceContainer devices;

devices = pointToPoint.Install (nodes);

为每个节点添加网络设备

Ptr<RateErrorModel>em=CreateObject<RateErrorModel> ();

em->SetAttribute("ErrorRate",DoubleValue(0.00001));

devices.Get(1)->SetAttribute("ReceiveErrorModel",PointerValue (em));

创建一个错误模型,讲错误率设置为0.00001,仿真TCP协议的重传机制。

InternetStackHelper stack;

stack.Install (nodes);

为每个节点安装协议栈;

Ipv4AddressHelper address;

address.SetBase ("10.1.1.0", "255.255.255.252");

Ipv4InterfaceContainer interfaces = address.Assign (devices);

为每个节点的网络设备添加IP地址;

这样一个简单的网络拓扑就建立完成。

接下来就是为这个网络节点添加应用程序,让他们在这个网络中模拟传输数据,具体代码如下:

uint16_t sinkPort = 8080;

Address sinkAddress (InetSocketAddress (interfaces.GetAddress (1), sinkPort)); PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", InetSocketAddress (Ipv4Address::GetAny (), sinkPort));

ApplicationContainer sinkApps = packetSinkHelper.Install (nodes.Get (1)); sinkApps.Start (Seconds (0.));

sinkApps.Stop (Seconds (10.));

将接受数据的应用程序设置在Node.Get(1)节点上,端口设置为8080;程序起始时间为0s,终止时间为10s;

Ptr<MyApp> app = CreateObject<MyApp> ();

app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps")); nodes.Get (0)->AddApplication (app);

app->SetStartTime (Seconds (1.));

app->SetStopTime (Seconds (10.));

将发送数据的应用程序设置在N

ns3网络模拟器基础及应用

ode.Get(0);发送起始时间为1s;结束时间为10s; 这样网络拓扑和节点之间应用程序的设定已完成,接下来就是应用统计模块,输出节点之间具体通信性能的参数,及时延,吞吐量,抖动率,丢包率;

NS-3中,有一个回调机制,方便我们来输出具体某个条件发生改变时就自动执行某个函数,回调的实现是TraceConnectWithoutContext函数,举个例子,在我的时延仿真中,输出时延的代码我是这样写的:

static void

CalculateDelay (Ptr<const Packet>p,const Address &address)

{

static float k = 0;

k++;

static float m = -1;

static float n = 0;

n += (p->GetUid() - m)/2-1;

delayJitter.RecordRx(p);

Time t = delayJitter.GetLastDelay();

std::cout << Simulator::Now ().GetSeconds () << "\t" << t.GetMilliSeconds() << std::endl;

m = p->GetUid();

}

首先定义一个时延的计算函数,是全局变量函数;

其次在main函数中使用回调机制:

sinkApps.Get(0)->TraceConnectWithoutContext("Rx",

MakeCallback(&CalculateDelay));

含义就是当接受端节点每收到一个TCP包,就会执行一次CalculateDelay函数,计算这个数据包在网络中传输的时延,并输出;

这样就完成了程序的编写;接下来就是输出具体数据:

在终端打开,到指定的文件夹中,输入

./waf --run scratch/delay >delay.dat 2>&1

按指定格式输出.dat文件之后,再在终端用GNUPLOT来作出.dat文件中的图形即可:

下面用同样的拓扑,应用程序以及同样的错误模型仿真输出TCP拥塞窗口值随时间的变化,抖动率,丢包率,吞吐量:

拥塞窗口随时间的变化:

丢包率 抖动率