ns-3网络仿真
基于GNS3软件构建三网融合仿真实训平台

作者简介 :李元元 ,硕士 ,讲师 。
等 内容需要有相 应的实验平 台作为支撑 ,然而构 建这 样一个完整的平台,需要大量 的路 由器 、交换机 、终 端P C、服务器 和 电话软 交换等 网络设备才 能完全 实 现 ,成本非常高。在硬件设备有 限的情况下 ,为了使 学 生更好地掌握相关技 能,使用仿真软件构建实训平
台 是 一个 很 好 的选 择 。三 网融 合 技 术 基 于I 网络 , 这 P
12三网融合技术 发展对通信技 术专业课程建 设 .
的 影 响
三 网融合技术的发 展使传 统意义 上只用 于计算机 通信网的T PI通信协议开始应用于 电话网络和电视 C/ P
收稿 日期 :2 1-80 0 1 .5 0
样就可 以使用模拟I通信网络 的仿真软件来实现 。 P
2 . 2网络仿真软件 的选择
台建设提出新的要求。以GNS 软件 为基础构建三 网融合仿真 实训平 台,开通并实现各项业务 ,阐述其在三网融合技术教学 3
中的具体应用。
关键词:G 3 NS ;计算机 网络 ;仿真 ;实训平 台
Ba e nt eGN S ot r o sr c ren t so i uainpaf 11 s do h 3s f waet c n tu t h e esf in s o t u m lt lto" o 1 1
网络 ,未来将进一步应用于物联网。掌握I网络 的组 P
网、网络协议配置、融合业 务开通 已成为通信行业人
才必须掌握 的基本技能 。 然而传统的通信专业在这方面的课程 设置显得较 为薄弱,在专业核心课程讲述的相 关技术 已经过时 ,
基于移动通信网络的计算机ns仿真

黧。
塑羔叁凰.基于移动通信网络的计算机N S仿真魏勇a匕京怀柔装备指挥技术学院研究生院研四队,北京市100000)c}裔鞫移动通信网络,国内又称为自组网,是由一组带有无线收发装置的移动节点组成的一个多跳的、临时l生的自治系统。
网络中的各个节点可以任意移动,因而网络的拓扑结构是随时变化的,所以在任一时刻,节点间通过无线俪差连接形成一个任意的网状拓扑结构。
【关键词】移动通信网络;自治系统;节点;拓扑结构’移动通信网络是一种特殊、新型而且应用前景广阔的移动无线网络,具有组网速度快、抗毁自愈能力强等优点。
N S是针对网络研究的源代码公开的离散事件仿真器,网络仿真是网络研究的重要方法和手段,网络仿真软件在网络仿真领域中占有十分重要的位置。
1移动通信网络的计算机N S仿真体系结构在移动通信网络中,节点兼备主机和路由器两种角色。
一方面,节点作为主机运行相关的协设和应用程序:另一方面,节点作为路由器需要运行相关的路由协议,进行路由发现、路由维护等常见的路由操作,转发目的地不是自己的分组。
移动通信网络和常见的有线固定网络以及无线局域网相比,具有独特的网络特性,如自组性、节点的随机移动而产生的动态网络拓扑、多跳性、无线宽带资源受限、分布式控制网络、安全性差等。
参照O SI 的七层网络参考模型。
在这个体系结构中,物理层完成无线信号的编码译码、发送和接收等工作。
数据链路层控制对共享无线信道的访问。
网络层是自组网的重点,也是它与其他现有网络的主要区别所在,其中,IPV4协议、I P V6协议或其它网络层协议提供网络层数据服务:路由协议完成数据包的正确转发和收发,确保节点之间的通信:网际互联支持通信网络与其他现有网络的互联:Q oS.提供可保证的Q oS服务:路由安全提供对路由协议的安全保障。
上层应用协议提供面向用户的协同应用服务。
N S软件包主要由T c I/Tk,O Tc l,N S和Tc l C L组成。
其中T e l是一种开放式的脚本语言,用于对N S编程,实现网络模拟。
选择重传协议实验报告(3篇)

第1篇一、实验目的1. 了解选择重传协议(SR)的基本原理和特点;2. 理解选择重传协议与GBN协议的区别;3. 通过实验验证选择重传协议在实际网络环境中的性能。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 网络模拟器:Mininet三、实验原理选择重传协议(SR)是一种数据链路层协议,用于解决GBN协议中累计确认导致的批量重传问题。
SR协议允许接收方仅对出错的帧进行确认,从而减少网络资源的浪费,提高数据传输效率。
四、实验步骤1. 构建实验拓扑结构:使用Mininet创建一个简单的网络拓扑,包括发送方、接收方和交换机;2. 编写实验代码:使用Python编写选择重传协议的发送方和接收方代码;3. 配置实验参数:设置发送方窗口大小、接收方窗口大小、数据帧大小、确认帧间隔等参数;4. 运行实验:启动网络模拟器,运行实验代码,观察实验结果;5. 分析实验结果:分析实验数据,评估选择重传协议的性能。
五、实验结果与分析1. 实验结果:(1)发送方窗口大小为5,接收方窗口大小为3,数据帧大小为100字节,确认帧间隔为1秒;(2)实验过程中,发送方共发送了10个数据帧,接收方成功接收了8个数据帧;(3)实验过程中,共发生4次重传,其中3次为单个帧重传,1次为批量重传。
2. 实验分析:(1)选择重传协议在实际网络环境中表现良好,与GBN协议相比,减少了批量重传的情况,提高了数据传输效率;(2)发送方窗口大小和接收方窗口大小对实验结果有较大影响,适当增大窗口大小可以进一步提高传输效率;(3)数据帧大小和确认帧间隔也会影响实验结果,需要根据实际情况进行优化。
六、实验结论1. 选择重传协议在实际网络环境中具有较好的性能,可以有效解决GBN协议中批量重传的问题;2. 实验结果表明,通过调整发送方窗口大小、接收方窗口大小、数据帧大小和确认帧间隔等参数,可以进一步提高选择重传协议的性能;3. 选择重传协议在实际应用中具有较高的研究价值和实用价值。
NS-3在计算机网络课程教学中的运用

验 课 堂 , 何 让 学 生 通 过 实 验 理 解 实验 原 理 . 强 如 增
通 过建 立 网络 设备 和 网络链 路 的统 计模 型, 模 拟 并 网络流 量 的传 输, 而获 取 网络 设计 或 优化 所 需 要 从 的网络性 能数据 的 仿真技 术 仿真 技术 可 以根据需
要 设 计 网 络 模 型 , 用 相 对 较 少 的 时 间 和 费 用 获 悉 网
络在 不 同条件 下 的各种特 性 , 获取 丰富 的研究 数据 网络仿 真技 术在 现代 通信 网络设 计 和研 究 中的作用 将 会越 来越大 21 N 一 特点 . S 3 N 一 few r i uao ) 一 种 新 的 仿 真 器 , S 3N tok s lt 3是 m r
第 1 3卷 第 2期
再 庆科技 学 院学报 ( 自然 科 学 版 )
N 一 在 计 算 机 网络 课 程 教 学 中 的运 用 S3
沈 德 海
( 海 大 学 , 州 1 1() 渤 锦 l 2 0)) (
摘
要: 计算 机 网 络 课 程 理 论性 强 , 验 难度 大 , 导敛 学 生学 习兴 趣 不 高 , 学 效 果 普 遍 不 好 . }此 , m将 新 的 网 敦 .} j 提
与 N 一 不 向 后 兼 容 , S 3 然 还 是 采 用 了 C +语 S2 N一虽 +
排. 与实 际应用 的距离较大 .例如 , 教材 中介绍 _路 由 r
器 的 工作 理 及 相 应 路 由算 法 , 实 际 算 法 的 运 行 效 但 果 学 生 们 却 不 能 直 观 地 看 到 , 致 学 生 对 算 法 不 易 导 理 解 , 习兴 趣不 高 。 学 计 算 机 网 络 课 程 不 仅 是 一 『 理 论 性 很 强 的 课 J 程 . 时 也 是 一门 实 践 性 很 强 的 课 程 生 只有 通 过 同 学
网络仿真软件介绍

1、Matlab
2、SPW 3、NS2/NS3
4、OPNET
5、主流网络仿真软件比较
主流网络仿真软件简介
MATLAB
MATLAB 是英文 MATrix LABoratory(矩阵实验室)的缩写。MATLAB 软件是由美国
Mathworks 公司推出的用于数值计算和图形处理的科学计算系统环境。MATLAB 环 境下,用户集成了程序设计、数值计算、图形绘制、输入输出、文件管理、网络仿 真、人工智能/神经网络、 工业控制等各个领域的研究功能。 MATLAB 提供了一个人机交互的系统环境,该系统的基本数据结构是矩阵,在生成 矩陈对象时,不要求作明确的维数说明。与利用 C语言或FORTRAN语言作数值计 算的程序设计相比,利用MATLAB可以节省大量的编程时间。
主流网络仿真软件简介
SPW/SPD
SPW(Signal Processing Worksystem)仿真软件是 CoWare Inc.公
司的产品,现已改名为SPD (Signal Processing Designer)
它提供了面向电子系统的模块化设计、仿真及实施环境,是进行算
法开发,滤波器设计,C 代码生成,硬/软件结构联合设计和硬件 综合的理想环境。 SPW的一个显著特点是他提供了HDS ( Hardware Design System ) 接口和MATLAB接口。MATLAB里面的很多模型可以直接调入 SPW,然后利用 HDS 生成 C 语言仿真代码或者是 HDL(Hardware Description Language) 语言仿真代码。 SPW 通常可以应用于无线和有线载波通信、多媒体和网络设计与 分析等领域。
OPNET标准模型库
无线通信系统能效优化仿真模型构建与真实业务场景验证

无线通信系统能效优化仿真模型构建与真实业务场景验证无线通信系统的能效优化一直是研究的热点之一。
为了提高通信系统的能效,科学家们提出了许多模型和方法。
其中,利用仿真模型构建和验证真实业务场景是一种有效的手段。
本文将介绍如何构建无线通信系统能效优化的仿真模型,并通过真实业务场景验证其有效性。
首先,我们需要选择一个合适的仿真工具。
常见的无线通信仿真工具有MATLAB、ns-3、OPNET等。
根据研究需求和资源限制,选择适合自己的仿真工具。
接下来,我们将按照以下步骤构建无线通信系统能效优化的仿真模型:1. 系统框架设计:根据研究的目标和需求,设计无线通信系统的框架。
包括网络拓扑、通信协议和算法、用户行为模型等。
例如,可以选择基于LTE的无线通信系统作为研究对象,考虑到网络中的基站、用户终端、信道模型等要素。
2. 参数设置和模型搭建:根据研究的问题,设置仿真模型的参数。
包括系统容量、用户数量、工作频段等。
搭建仿真模型,使用仿真工具实现系统各个组件的模型,并设置各个部分的参数。
例如,设置基站发射功率、用户终端的移动速度、信道衰落模型等。
3. 数据采集和分析:运行仿真模型,采集各个节点的数据。
包括网络状态、系统性能、能耗等。
利用仿真工具的数据分析功能,对数据进行统计和分析。
可以得到系统的能效指标,如能量效率、能耗分布等。
4. 优化算法设计和验证:根据系统模型和分析结果,设计能效优化算法。
例如,可以通过功率控制、资源分配、调度算法等手段来提高系统的能效。
在仿真模型中验证算法的有效性。
根据不同的场景和问题,设计不同的实验,利用仿真模型进行验证。
例如,可以比较不同的算法在系统能效、用户体验等方面的表现。
5. 真实业务场景验证:在仿真模型的基础上,选择一个真实的业务场景进行验证。
可以选择现有的真实网络或者搭建实验环境。
在真实业务场景中进行测试和评估,比较仿真模型的结果和真实场景的数据。
可以评估仿真模型的准确性和可靠性。
NS-3环境搭建与测试

实验4---NS-3环境搭建与测试姓名:学号:一、目标任务任务一NS-3安装与使用。
通过运行“./test.py -c core”脚本进行ns-3软件包单元测试。
任务二测试运行实例程序。
分别运行 二、编程语言C++三、关键代码//头文件声明#include "ns3/core-module.h"#include "ns3/network-module.h"#include "ns3/Internet-module.h"#include "ns3/point-to-point-module.h"#include "ns3/applications-module.h"//namespace的声明using namespace ns3;//声明了一个叫FirstScriptExample的日志构件,通过引用FirstScriptExample这个名字的操作,//可以实现打开或者关闭控制台日志的输出。
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");int main (int argc, char *argv[]){Time::SetResolution (Time::NS);//下面两行脚本是用来使两个日志组件生效的。
它们被内建在Echo Client 和Echo Server 应用中//设置日志为LOG_LEVEL_INFO级别LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);/********************网络拓扑部分************************///创建ns3节点对象,它们在仿真中代表计算机NodeContainer nodes; //声明了一个名为”nodes”的NodeContainernodes.Create (2); //调用了nodes对象的Create()方法创建了两个节点//构建一个点到点的连接//使用PointToPointHelper来配置和连接ns-3的PointToPointNetDevice和PointToPointChannel对象PointToPointHelper pointToPoint; //在栈中初始化了一个PointToPointHelper的对象PointToPointpointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); //创建一个PointToPointNetDevice对象时使用“5Mbps"来作为数据速率pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms")); //使用"2ms"(2毫秒)作为每一个被创建的点到点信道传输延时值//完成设备和信道的配置NetDeviceContainer devices;devices = pointToPoint.Install (nodes);//安装PointToPointHelper 对象和点到点网络设备的网络协议栈InternetStackHelper stack;stack.Install (nodes);//为节点上的设备设置IP地址//地址分配默认是从1开始并单调的增长,所以在这个基础上第一个分配的地址会是10.1.1.1,紧跟着是10.1.1.2等等Ipv4AddressHelper address; //声明了一个地址生成器对象address.SetBase ("10.1.1.0", "255.255.255.0");//使用Ipv4interface对象将一个IP地址同一个设备关联起来Ipv4InterfaceContainer interfaces = address.Assign (devices);/********************网络拓扑部分结束*********************//**********************应用程序部分*********************///在我们之前创建的节点上设置一个UDP 回显服务应用UdpEchoServerHelper echoServer (9); //声明了UdpEchoServerHelper,用来帮助创建真正应用的对象//ApplicationContainer的方法Start和Stop来设置时间点//使echo服务应用在1s时开始(生效)并在10s时停止(失效)ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));serverApps.Start (Seconds (1.0));serverApps.Stop (Seconds (10.0));//使用UdpEchoClientHelper来管理UdpEchoClientApplicationecho,设置客户端的应用UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);//创建了一个生成器并告诉它设置客户端的远端地址为服务器节点的IP地址。
ns无线网络仿真节点设置及说明.

ns无线网络仿真节点设置及说明要做一个4个节点的Ad hoc网络仿真,实验环境和要求是:采用的无线网拓扑结构,主机节点数共有4个;节点1到4的初始位置坐标分别为(0,1 000、(0,800、(0,600和(400,600,节点1和2在仿真中保持静止不动,节点3和4则以60m/s速度分别向坐标(0,0和 (400,0位置方向垂直移动。
系统带宽为2Mbps,系统节点缺省无线传输半径约为500m。
仿真使用的业务流量为FTP,每包发送512字节,发送速度10包/s。
采用静态路由方式,节点1在1.5s发包给节点2,节点3在3.5s发包给节点4。
仿真时间一共10s,选取节点2处的估计可用带宽进行分析。
下面是基本环境仿真的adhoc.tcl源码:# This script is created by emile.Y.S Xiang#===================================# 定义模拟变量#===================================set val(chan Channel/WirelessChannel ;# channel typeset val(prop Propagation/TwoRayGround ;# radio-propagation modelset val(netifPhy/WirelessPhy ;# network interface typesetval(mac Mac/802_11;# MAC typeset val(ifq Queue/DropTail/PriQueue ;# interface queue type setval(ll LL;# link layer typesetval(ant Antenna/OmniAntenna ;# antenna modelsetval(x 1000;# X dimension of topologysetval(y 1000;# Y dimension of topologysetval(cp "";# node movement model filesetval(sc "";# traffic model fileset val(ifqlen50 ;# max packet in ifqsetval(nn 4;# number of mobilenodesset val(seed 0.0setval(stop 10.0;# time of simulation endsetval(tr adhoc.tr;# trace file namesetval(rp DSDV;# routing protocolset AgentTrace ONset RouterTrace ONset MacTrace OFF#===================================# 建立相关档案#===================================# Initialize Global Variablesset ns_ [newSimulator] ;#产生ns simulator实例$ns_ color 1 Blue$ns_ color 2 Red# 设定trace file$ns_use-newtrace;#使用新的trace formatset namfd [open adhoc.namw] ;#产生nam trace file $ns_ namtrace-all-wireless $namfd $val(x $val(y ;#模拟时产生需要的结果文件set tracefd [open $val(trw] ;#产生trace file$ns_ trace-all$tracefd ;#模拟时产生需要的结果文件#建立topology对象,以记录mobilenodes在拓扑內移动的情况set topo [new Topography]# 拓扑的范围为 1000m x 1000m$topo load_flatgrid $val(x $val(y# 建立channelset chan [new $val(chan]# 创建godset god_ [create-god $val(nn]#===================================# 无线节点配置#===================================# Create the specified number of mobile nodes [$val(nn] and "attach" them to # the channel. Four nodes are created : node(0, node(1, node(2 and node(3# 设定Mobile Node的参数$ns_ node-config -adhocRouting $val(rp \-llType $val(ll \-macType $val(mac \-ifqType $val(ifq \-ifqLen $val(ifqlen \-antType $val(ant \-propType $val(prop \-phyType $val(netif \-channel $chan \-topoInstance $topo \-agentTrace ON \-routerTrace OFF \-macTrace OFF \-movementTrace OFF#===================================# 新建Node#===================================for {set i 0} {$i < $val(nn } {incr i} {set node_($i [$ns_ node]$node_($i random-motion 0 ;# 使各节点非随机移动}# Provide initial (X,Y, for now Z=0 co-ordinates for mobilenodes # 建立第0个Node,开始时,位置在(0.0, 1000.0$node_(0 set X_ 0.0$node_(0 set Y_ 1000.0$node_(0 set Z_ 0.0# 建立第1个Node,开始时,位置在(0.0, 800.0 $node_(1 set X_ 0.0$node_(1 set Y_ 800.0$node_(1 set Z_ 0.0# 建立第2个Node,开始时,位置在(0.0, 600.0 $node_(2 set X_ 0.0$node_(2 set Y_ 600.0$node_(2 set Z_ 0.0# 建立第3个Node,开始时,位置在(400.0, 600.0 $node_(3 set X_ 400.0$node_(3 set Y_ 600.0$node_(3 set Z_ 0.0# Load the god object with shortest hop information # 在节点0和节点1之间最短的hop数为1 $god_ set-dist 0 1 1# 在节点1和节点2之间最短的hop数为1 $god_ set-dist 1 2 1# 在节点0和节点2之间最短的hop数为2$god_ set-dist 0 2 2# 在节点2和节点3之间最短的hop数为1$god_ set-dist 2 3 1# 在节点0和节点3之间最短的hop数为1$god_ set-dist 0 3 1# 在节点1和节点3之间最短的hop数为1$god_ set-dist 1 3 1#===================================# 产生Movement#===================================# Now produce some simple node movements# Node_(2 and Node_(3 starts to move downwardset god_ [God instance]#node移动不能到边界,否则会报错# 从0秒开始,节点2开始从位置(0,600移動到(0,0,速度為60.0 m/s $ns_ at 0.0 "$node_(2 setdest 0.1 0.1 60.0"# 从0秒开始,节点3开始从位置(400,600移動到(400,0,速度為60.0 m/s $ns_ at 0.0 "$node_(3 setdest 400.0 0.1 60.0"#===================================# 建立FTP业务,基于TCP来承载#===================================# 在节点0和节点1间设定第0个连线(FTP-TCP,且在时间为1.5秒开始发送set tcp0 [new Agent/TCP/Newreno]$tcp0 set fid_ 1set sink0 [new Agent/TCPSink]$ns_ attach-agent $node_(0 $tcp0$ns_ attach-agent $node_(1 $sink0$ns_ connect $tcp0 $sink0set ftp0 [new Application/FTP]$ftp0 attach-agent $tcp0$ns_ at 1.5 "$ftp0 start"$ns_ at 10.0 "$ftp0 stop"# 在节点2和节点3间设定第1个连线(FTP-TCP,且在时间为3.5秒开始发送set tcp1 [new Agent/TCP/Newreno]$tcp1 set fid_ 2set sink1 [new Agent/TCPSink]$ns_ attach-agent $node_(2 $tcp1$ns_ attach-agent $node_(3 $sink1$ns_ connect $tcp1 $sink1set ftp1 [new Application/FTP]$ftp1 attach-agent $tcp1$ns_ at 3.5 "$ftp1 start"$ns_ at 10.0 "$ftp1 stop"# 在nam中定义节点初始所在位置for {set i 0} {$i < $val(nn} {incr i} {# The function must be called after mobility model is defined.$ns_ initial_node_pos $node_($i 60}# 告诉 MobileNode 模拟已结束 for {set i 0} {$i < $val(nn } {incr i} { $ns_ at $val(stop "$node_($i reset"; } #=================================== # 结束模拟 #=================================== # 结束 nam 与模拟器 $ns_ at $val(stop "$ns_ nam-end-wireless $val(stop" $ns_ at $val(stop "stop" $ns_ at $val(stop "puts \"NS EXITING...\" ; $ns_ halt" # 设定模拟器用的 stop function proc stop {} { global ns_ tracefd namfd $ns_ flush-trace close $tracefd close $namfd exec nam adhoc.nam & exit 0 } puts puts puts puts $ns_ $tracefd "M 0.0 nn $val(nn x $val(x y $val(y rp $val(rp" $tracefd "M 0.0 sc $val(sc cp $val(cp seed $val(seed" $tracefd "M 0.0 prop $val(prop ant $val(ant" "Starting Simulation..." run。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
精品文档 随意编辑 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); 为每个节点添加网络设备 Ptrem=CreateObject (); 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 app = CreateObject (); app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps")); nodes.Get (0)->AddApplication (app); app->SetStartTime (Seconds (1.)); app->SetStopTime (Seconds (10.)); 将发送数据的应用程序设置在Node.Get(0);发送起始时间为1s;结束时间为10s; 这样网络拓扑和节点之间应用程序的设定已完成,接下来就是应用统计模块,输出节点之间具体通信性能的参数,及时延,吞吐量,抖动率,丢包率; NS-3中,有一个回调机制,方便我们来输出具体某个条件发生改变时就自动执行某个函数,回调的实现是TraceConnectWithoutContext函数,举个例子,在我的时延仿真中,输出时延的代码我是这样写的: static void CalculateDelay (Ptrp,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拥塞窗口值随时间的变化,抖动率,丢包率,吞吐量: 精品文档
随意编辑 拥塞窗口随时间的变化:
丢包率 精品文档
随意编辑 抖动率 精品文档
随意编辑 吞吐量
在仿真结果中我们可以看到:当网络传输出现差错传输,导致链路拥塞,使得拥塞窗口值陡然降低,致使链路的时延变大,抖动率变化也比较明显,吞路量也变小。 下面进行WIFI环境下的网络吞吐量的仿真: 拓扑的建立和之前的建立方式大同小异,主要是WIFI多了移动模型的添加,为一个节点添加移动模型的代码如下: MobilityHelper mobility1; mobility1.SetPositionAllocator ("ns3::RandomDiscPositionAllocator", "X", StringValue ("0.0"), "Y", StringValue ("0.0"), "Rho", StringValue ("ns3::UniformRandomVariable[Min=0|Max=20]")); mobility1.SetMobilityModel ("ns3::RandomWalk2dMobilityModel", "Mode",StringValue ("Time"), "Time",StringValue ("2s"), "Speed",StringValue ("ns3::ConstantRandomVariable[Constant=100]"), "Bounds", RectangleValue (Rectangle (-100, 100, -100, 100))); mobility1.Install (wifiStaNodes.Get (0)); 精品文档
随意编辑 这样这个节点就能够随机移动,仿真WIFI下用户随机移动的特点; 仿真的拓扑图如下: 由于节点的移动导致离AP节点的距离不同,因此信道是不断变化的,所以吞吐量也是不断变化的,再次情况下仿真出来的吞吐量如下: 精品文档
随意编辑 由此可见:链路的吞吐量没有点对点链路那么平整,变化稍微大一点; 四:实验总结
经过这次实验,我体会到其实不管做什么事,只要坚持,并且冷静去寻找解决问题的途径,就能解决所有问题。这次实验实际来说给的时间并不多,两星期不到,我一开始选择了第四个题目,一个全新的东西,一开始看书,什么都看不明白,不过幸好用的语言是c++,这是唯一幸运的东西。另外NS-3要求在linux系统下运行,我就赶紧找linux安装教程,之前用过虚拟机,但是特别卡。之后关于NS-3的安装,挺顺利,没有什么差错。接下来就是NS-3软件的学习了,由于NS-3比较新,国内的教材很少,但在网上搜索的时候,发现基本没有人看教材,都在看官方文档,于是我就找到了解决这个问题的途径。一边从简单的例子着手,一边去官方文档中,对照的计算机网络的知识去解释NS-3中的各个模块的作用,含义。由于NS-3中没有直接描述吞吐量,时延,丢包率以及抖动率的函数或实例,我只好对