当前位置:文档之家› 基于NS2的TCP拥塞控制仿真

基于NS2的TCP拥塞控制仿真

基于NS2的TCP拥塞控制仿真
基于NS2的TCP拥塞控制仿真

基于NS2的TCP建模与仿真

摘要:TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。本文利用NS2网络仿真器对TCP/IP中的拥塞控制与拥塞窗口,快速重传与快速恢复算法进行了仿真,使对协议中的几种机制和算法有了形象的理解。

关键字:TCP/IP协议,NS2仿真,拥塞控制,快速重传,快速恢复

一、引言

TCP/IP协议是计算机之间常用的组网形式,是互联网事实上的工业标准,由IETF负责制定,其具体内容通过RFC文档公开发布。例如,TCP协议在RFC793中正式定义;RFC1122对如何检测错误和不一致性以及解决方法进行了说明;RFC1323给出了对TCP的一些扩展功能;RFC2518中重点阐述了TCP的拥塞控制机制描述了更新后避免过度拥塞的算法;RFC3168描述了对显示拥塞的报告等。据统计,当前在所有因特网的数据包中,大约有95%包的传送使用了TCP 协议,因此针对TCP协议相关机制的研究很有实际意义。

在TCP协议的研究中,仿真是一种有效又经济的研究方法,而且可以给人以更加形象的认识。目前的网络仿真工具主要包括两类:一是基于大型网络开发的网络仿真工具,如OPNET、GloMoSim等;二是基于小型网络开发的网络仿真工具,如NS2、COMNET III等。大多数网络仿真工具的价格昂贵,而本文采用的NS2是一种应用广泛、影响力较大和源代码公开的免费网络模拟软件。

二、网络仿真器NS2

NS是Network Simulator的英文缩写,又称网络仿真器。它是一款开放源代码的网络模拟软件,最初由加州大学伯克利分校(UC Berkeley)开发。NS-2支持Windows、Linux、Unix、Mac以及其他支持POSIX标准的操作系统,它主要支持的操作系统是Linux系统,目前几乎支持所有主流的Linux发行版本,本文使用的是Windows+Cygwin平台。

NS2是一个可扩展、易配置和可编程的事件驱动网络仿真引擎。底层的仿真

引擎由C++编写,同时利用面向对象的OTCL语言作为仿真时命令和配置的接口语言。C++的特点:具有很快的运行速度,但每次改变均需要编译,较为复杂,适合处理繁琐但比较固定的工作。OTCL在运行速度上无法和C++比拟,但相对来说更加灵活,适合用来设计个人的仿真方案。C++和OTCL之间通过TCLCL 工具包实现互相调用。

图1NS2进行网络模拟的基本流程

为了分析仿真结果,NS2提供了两种基本数据追踪能力:一是跟踪,生成“.nam”和“.tr”文件。能够将每个数据包在任何时刻的状态保存到指定文件中,记录包在队列或链路中丢弃、到达、离开等行为;二是监视,用户有选择地记录自己需要的数据,可利用Gawk、Gnuplot等工具统计发送包、接收包及丢弃包等结果进行分析。

在本文的仿真中,我们没有进行源代码的修改,而是利用NS2中已有网络组建进行了仿真模拟,并利用图形界面给出了形式化的仿真结果。

三、TCP协议中相关机制

TCP(Transmission Control Protocol:传输控制协议)对应于ISO/OSI模型的第四层——传输层,传输层提供从源端到目的端的“端到端”连接。通过三次握手协议进行了会话连接后,TCP进入了会话维持阶段,在该阶段TCP的一个重要功能就是流量控制和拥塞控制,它用于处理网络中不同网段间不同速率的匹配,防止网络发生拥塞,并在数据包丢失时重发,以此提供稳定可靠的网络服务。

3.1拥塞控制与拥塞窗口

拥塞控制室TCP协议的精髓,与流量控制只关注收发两端流量不同,拥塞控制关注整个网络的流量,是一种全局控制机制。

TCP提供了一系列的检测,避免和拥塞控制的方法。最著名和常用的就是“慢启动”(slow start)和动态拥塞窗口机制(Dynamic Congestion Window)。两者在实际应用中结合使用,系统为每个TCP连接维护两个变量:拥塞窗口(cwnd)和慢启动门限(ssthresh)。慢启动门限一般代表我们对网络容量的一个评估。在网络连接好后,初始发送的拥塞窗口为1,即第一次只能发送一个数据包,当得到该包的确认后,拥塞窗口大小翻倍,即cwnd=2,以此类推,窗口大小乘指数增长一直到慢启动门限大小,即cwnd=ssthresh。这相对于一开始就使用门限大小的窗口发送数据来说是慢启动。慢启动结束后,系统进入了所谓的“冲突避免”(Congestion avoidance)阶段,该阶段拥塞窗口呈线性增长,每次窗口大小增加1。当冲突发生时,将采取冲突控制策略,同时动态调整拥塞窗口cwnd和慢启动门限值ssthresh,如:ssthresh=ssthresh/2;谈后拥塞窗口职位1,并重新启动慢启动过程。

3.2快速重传与快速恢复

在TCP连接中如果收到1~2个重复的确认包

ACK(表示对第i个数据的确

i

认包),这可能是一些报文段的重新排序,但如果连续收到3个或3个以上的重ACK,则可能是一个序列号为i的报文段丢失了。此时我们重传丢失的报文复

i

段,而无需等待定时器超时。这就是快速重传算法。接下来执行的不是慢启动算法而是拥塞控制算法,该拥塞控制算法就是快速恢复算法。

这个算法的实现过程如下:

1、当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3个重复

的ACK,表明有3个“老”的数据包离开了网络。

2、再收到重复的ACK时,拥塞窗口增加1。

3、当收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

NS2中对TCP协议中的上述几种机制都提供了支持。

四、仿真过程

4.1TCP慢启动算法仿真

本仿真中我们创建两个节点n0、n1,并在这两个节点之间创建一条TCP连接,为了便于对操作窗口大小进行配置,我们采用命令行传参的方式运行模拟脚本。

(1)编写tcl脚本

在脚本中我们定义整个仿真过程,包括网络拓扑结构,tcp创建等,为了进一步绘制慢启动与非慢启动的对比图,我们还需要添加Record过程。

在仿真中我们设定带宽为1Mb ,时延为100ms ,窗口大小64,模拟时间5s 。在startxwin 窗口下输入ns slowstart.tcl 1Mb 100ms 64 5,开始运行仿真,得到如下仿真图:

图2(a ) 仿真开始

图2(b ) 第二次发送数据包

图2(c ) 第三次发送数据包

图2(d ) 第n 次发送 需要注意的是,在NS2中提供了多个TCP 代理,其中TCP/RFC793edu 不支持慢启动,而TCP/Reno 支持慢启动,我们对他们分别进行了仿真,并记录到不同的Trace 文件中。为了对比慢启动和非慢启动,我们利用曲线图进行比较,这

里我们利用NS2中的Xgraph进行绘图。

图3慢启动对照曲线图

通过仿真图我们可以形象的看到TCP协议慢启动的过程,在慢启动过程中,一次发送的数据包数目在慢启动开始成指数型增长,达到慢启动门限后成线性增长;而非慢启动过程在连接建立后立即大量传输数据,如此容易造成拥塞。

4.2TCP快速重传和快速恢复仿真

由于TCP/Reno已经实现了快速重传和快速恢复算法,因此,仿真过程采用该协议进行仿真,为了产生丢包,我们在拓扑过程中设置了一个瓶颈,因此在拓扑结构中采用了四个节点0、1、2、3,其中1、2之间网络带宽为0.5Mb,0、1之间和2、3之间网络带宽为5Mb。

仿真结果如下图:

图4TCP快速重传与快速恢复仿真图

图5数据包丢失后进行拥塞控制效果图

通过对图4、5的对比分析,我们可以形象的看到TCP在快速重传和快速恢复的过程。由于本人对NS2中的gunplot工具不熟悉,没有将数据重传的具体的收发过程绘制出来,还请老师见谅。

五、总结

本文利用NS2网络仿真器对TCP协议中的拥塞控制中慢启动、快速重传、快速恢复机制进行了仿真,并给出了仿真结果,使读者可以更加形象更加深入的了解TCP的这几种算法,达到了仿真的目的。

其实利用NS2网络仿真器,我们不仅可以对TCP、UDP等网络协议进行仿真,还可以对路由队列管理机制,路由算法,以及无线网络、LAN、移动IP和

卫星通信网络等进行仿真。而且由于它的开源性,仿真这可以自己编写相应的模块来实现自己要仿真的目标。

参考文献

[1]王宇, 赵千川. 用网络仿真软件NS2进行IP网络的仿真[J]. 计算机应用与软件, 2003, (2): 28-30

[2] 于斌, 孙斌, 温暖等. NS2 与网络模拟[M]. 人民邮电出版社,2007

[3] 夏乐音,王秋光. 无线传感器网络的NS2仿真[J]. 计算机应用与软件, 2008, (2): 28-30

[4] W. Richard Steven著TCP/IP协议详解卷1:协议[M]. 机械工业出版社,2007

TCP协议中的流量控制和拥塞控制研究(毕业论文)

毕业设计(论文) TCP协议中的流量控制和拥塞控制研究 院别数学与统计学院 专业名称信息与计算科学 班级学号 学生姓名 指导教师 年月日

TCP协议中的流量控制和拥塞控制研究 摘要 计算机网络技术是当今发展最迅速的计算机技术之一,而保证网络稳定可靠运行的关键是计算机网络协议。TCP协议作为网络协议中的核心协议之一,其重要性更是不言而喻,因而对于该协议的研究与完善是促进网络发展的重要手段之一。 随着互联网规模和互联网应用的快速增长,网络拥塞和数据冲突问题已引起人们密切的关注。拥塞控制与流量控制技术针对网络中的拥塞和数据冲突而成为网络领域的核心技术。其中流量控制的对象是接收端,目的是使发送端的发送速率不超过接收端的接收能力;拥塞控制的对象是网络环境,目的是使负载不超过网络的传送能力。 TCP的流量控制主要依赖于滑动窗口,通过流量约束,减少接收端出的数据流失,提高发送效率,充分利用接收端资源。 TCP的拥塞控制主要原理依赖于一个拥塞窗口(cwnd)来控制,窗口值的大小就代表能够发送出去的但还没有收到ACK的最大数据报文段,显然窗口越大那么数据发送的速度也就越快,但是也就越可能使得网络出现拥塞,如果窗口值为1,那么就简化为一个停等协议,每发送一个数据,都要等到对方的确认才能发送第二个数据包,显然数据传输效率低下。TCP拥塞控制算法就是要在这两者之间权衡,选取最的cwnd值,从而使得网络吞吐量最大化且不产生拥塞。 本文首先对TCP协议的发展做了简要的概述,然后分析了TCP协议的报文段格式和结构,TCP的数据传输过程,接着讨论了TCP的流量控制机制,最后针对TCP 的重点部分拥塞控制进行了分析,讨论了几个TCP拥塞控制算法。 关键词:TCP协议,流量控制,拥塞控制

NS2网络仿真实验

NS2网络仿真实验 实验目的: 通过修改NS2的TCP协议代码,来简单的观察窗口阈值的不同算法对网络资源利用率的影响。 实验步骤: 1. 实验环境搭建 (1)系统环境: 虚拟机:virtrulbox; 操作系统:linux/ubuntu 10.04 工作目录:/home/wangtao/workspace/ (2)NS2安装与使用: 下载NS2软件包到工作目录, 地址https://www.doczj.com/doc/3717074998.html,/sourceforge/nsnam/ns-allinone-2.33.tar.gz 解压(注:以下斜体字为命令行命令) tar -zxf ns-allinone-2.33.tar.gz cd ns-allinone-2.33 ./install (中间的两个bug已经修改,此处忽略) 耐心等待安装完毕后将出现如下画面说明安装正常: 接下来是系统环境配置,重新进入终端 cd ~ vim .bashrc(如果没有安装vim最好安装一下,sudo apt-get install vim) 在打开的.bashrc的末尾加上以下内容:

PATH="$PATH:/home/wangtao/worksapce/ns-allinone-2.33/bin:/home/wangtao/worksapce/ns-a llinone-2.33/tcl8.4.18/unix" export LD_LIBRARY_PATH="$LD_LIBRARY_PAHT:/home/wangtao/worksapce/ns-allinone-2.33/otcl-1.13,/ home/wangtao/worksapce/ns-allinone-2.33/lib" export TCL_LIBRARY="$TCL_LIBRARY:/home/wangtao/worksapce/ns-allinone-2.33/tcl8.4.18/library" 保存并退出,重新进入终端 安装xgraph sudo apt-get install xgraph 运行一个简单的例子,以证明环境安装完成: ns /home/wangtao/workspace/ ns-allinone-2.33/tcl/ex/simple.tcl 出现如下图说明成功: 2.修改https://www.doczj.com/doc/3717074998.html,代码 vim /home/wangtao/workspace/ns-allinone-2.33/tcp/https://www.doczj.com/doc/3717074998.html, (将窗口阈值一半变为的窗口阈值1/3——wt_https://www.doczj.com/doc/3717074998.html,) 第一处: …… if (cwnd_ < ssthresh_) slowstart = 1; if (precision_reduce_) { //halfwin = windowd() / 2; //wangtao halfwin = windowd() / 3;

NS2网络模拟

网络协议分析与仿真课程设计报告 网络模拟 一、课程设计目的 掌握网络模拟工具NS2的使用,学习基本的网络模拟方法。 二、课程设计内容 协议模拟 工具:NS2,awk,shell,perl等; 要求:掌握NS2网络模拟的基本流程; 内容:NS2网络模拟基本流程 编写TCL脚本,搭建如下图所示的一个网络,共6个节点,其中2、3节点用做ftp服务器和客户端,4、5节点用做cbr流量的源和目的,而0、1节点用做转发设备。各节点间的链路属性见图。 cbr null packet size = 1kbytes, rate=1Mbps 模拟时间设为13秒钟,在0.1秒开始产生cbr流量,在1.0秒开发发送发ftp流量; 8.0秒ftp流量结束,12.0秒cbr流量结束。编写脚本(可用shell,awk,或perl等) 分析模拟日志文件,统计每0.5s内0、1节点间链路通过的分组数以及字节数。 三、设计与实现过程 1.仿真脚本代码与详细注解 #Create a simulator object set ns [new Simulator] #Define different colors for data flows (for NAM) $ns color 1 Blue $ns color 2 Red #Open the NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #Open the Trace file

set tf [open out.tr w] $ns trace-all $tf #Define a 'finish' procedure proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 } #Create four nodes set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #Create links between the nodes $ns duplex-link $n0 $n2 1.5Mb 10ms DropTail $ns duplex-link $n0 $n4 1.5Mb 10ms DropTail $ns duplex-link $n0 $n1 2Mb 20ms DropTail $ns duplex-link $n1 $n3 1.5Mb 10ms DropTail $ns duplex-link $n1 $n5 1.5Mb 10ms DropTail #Set Queue Size of link (n2-n3) to 10 $ns queue-limit $n0 $n1 10 #Setup a TCP connection set tcp [new Agent/TCP] $ns attach-agent $n2 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Setup a UDP connection set udp [new Agent/UDP] $ns attach-agent $n4 $udp set null [new Agent/Null] $ns attach-agent $n5 $null

TCP拥塞控制算法性能比较-Read

TCP拥塞控制算法性能比较 一、NS2仿真 1.仿真实验的网络结构图 如图所示0、1、2为源节点,3为路由器,4为目的节点。源节点0、1、2为TCP代理节点,频宽为8Mbps,传递延迟时间为0.1ms,仿真时使用FTP流量。路由器的队列管理机制使用DropTail,频宽为0.8Mbps,传递延迟为100ms。在这个实验中建立3条TCP数据流,0和4、1和4、2和4。在OTCL编码中,代理节点的协议代理分别设置为TCP/Reno、TCP/Newreno、TCP/Sack1和tcp/Vegas,来模拟这四种算法。 二、模拟结果与算法分析比较 1、模拟拥塞控制四种算法的cwnd变换图:

2、TCP拥塞控制的四个阶段 这是TCP拥塞控制的核心,也体现了TCP拥塞控制的基本思想,它分为启动阶段,拥塞避免,快速重传和快速恢复阶段。 (1) 启动阶段 当连接刚建立或在发生一次超时的情况下,进入慢启动阶段。 一个新的TCP连接建立后,cwnd被初始化为1,源端只被允许发送一个报文段。当发出的报文收到接受端的ACK确认后,cwnd加1,即增加一个报文段发送。在这个阶段中,cwnd随RTT呈指数增长。 采用慢启动方法,可以防止TCP在启动一个新的连接时发送过多的数据而造成数据丢失和网络拥塞,同时,由于cwnd实际上以指数规律增长也就避免了单纯的AIMD算法造成的吞吐量增加过慢的问题。 cwnd的无限增长必将引起网络拥塞,于是引入一个状态变量:慢启动阈值ssthresh。 当cwndssthresh是,则采用拥塞避免算法,减缓cwnd的增长速度。 (2) 拥塞避免阶段

基于NS2的无线传感器网络软件仿真实验

目录 ●课程设计目的 ●课程设计内容 ●课程设计实验原理 ?WSN路由协议 ?WSN MAC层协议 ?修改的路由协议 ●课程设计小组分工 ●课程设计实验流程 ●课程设计实验结果分析 ●课程设计心得体会 ●课程设计总结 ●参考文献 ●源代码

一、课程设计目的 无线传感器网络是物联网的基本组成部分,是物联网用来感知和识别周围环境的信息生成和采集系统,传感器网络对信息处理来说如同人体的感觉突触一样重要。为了方便感知和部署并提高网络的可扩展性,传感器网络一般采用无线通信方式,从而形成了节点之间可自组织拓扑结构的无线传感器网络。本课程设计的目的综合应用学生所学知识,建立系统和完整的传感器网络概念,理解和巩固无线传感器网络基本理论、原理和方法,掌握无线传感器网络开发的基本技能。 二、课程设计内容 软件仿真实验。 要求使用相关软件仿真一个无线传感器网络,要求如下: ●自行参考相关资料,成功安装NS2(或OPNET也可以); ●利用NS2自带的范例,构建一个100个节点的无线传感器网络, 能够成功运行;最好能有界面显示; ●利用利用NS2自带的范例或其它已有脚本,仿真上述无线传感器 网络一种路由协议(例如一种多播路由协议); ●利用利用NS2自带的范例或其它已有脚本,仿真上述无线传感器 网络采用一种MAC协议; ●修改或自行编写一个简单路由协议或MAC协议,并进行仿真运 行。

三、课程设计实验原理 a)WSN路由协议 传统计算机网络对路由协议要求如下:正确性,健壮性,稳定性,公平性,最优性。除此之外,无线传感器网络对路由协议更注重以下特殊要求:能源有效性,简单性,多路性。无线传感器网络是以数据为中心(Data Centric)进行路由的,不同于传统Ad hoc网络以地址为中心(Address Centric)进行路由的模式。由于传感器最基本任务就是感知、采集数据,无线传感器网络邻近节点间采集的数据必然具有相似性,存在冗余信息,需经数据融合(Data Fusion)处理再进行路由。有研究表明,在分布密度为ρ(x, y)的随机区域,传感器间冗余数据为:η=ζSeρ。直接传输这些未经处理、存在冗余的数据,将会造成网络带宽、节点能源的巨大浪费,导致节点迅速死亡,缩短整个网路的生命周期。 无线传感器网络中的大部分节点不像传统Ad hoc网络中的节点一样快速移动,因此没有必要花费很大的代价频繁地更新路由表信息。常规路由协议通常认为底层的通信信道是双向的,但是在采用无线通信的无线传感器网络环境中,由于发射功率或地理位置等因素的影响,可能存在单向信道。它给常规路由协议带来三个严重的影响:认知单向性、路由单向性和汇点不可达。

网络模拟器NS2中仿真功能的问题分析及改进

第21卷第2期 系 统 仿 真 学 报? V ol. 21 No. 2 2009年1月 Journal of System Simulation Jan., 2009 网络模拟器NS2中仿真功能的问题分析及改进 况晓辉1, 赵 刚1,2, 郭 勇1, 3 (1.北京系统工程研究所, 北京 100101; 2.清华大学计算机科学与技术系, 北京 100084; 3.国防科技大学信息系统与管理学院, 长沙 410073) 摘 要:网络仿真技术为解决大规模网络规划、应用和协议设计面临的挑战提供了新的途径。作为广泛应用的网络模拟器,NS2为建立可扩展的网络仿真环境奠定了重要基础。在描述NS2仿真功能实现的基础上,重点分析了NS2仿真功能存在的不足。针对发现的问题,提出并实现了NS2仿真功能扩展,最后验证了仿真功能扩展的正确性。 关键词:网络仿真;NS2;报文转换;功能扩展 中图分类号:TP393 文献标识码:A 文章编号:1004-731X (2009) 02-0427-05 Improvement of Emulation Function in Network Simulator KUANG Xiao-hui 1, ZHAO Gang 1,2, GUO Yong 1, 3 (1. Beijing Institute of System and Engineering, Beijing 100101, China; 2. Department of Computer Science and Technology, Tsinghua University, Beijing 100084, China; 3. Department of Information System and Management of NUDT, Changsha 410073, China) Abstract: Network emulate technology which enables real hosts and a real network to interact with a virtual network, becomes a very important way to resolve the challenge faced in network plan, application and protocol design. As a famous network simulator, NS2 proposed a foundation to construct network emulate platform. The emulation function of NS2 was described firstly. Based on analysis the problem of emulation function in NS2, the extension of NS2 emulation function was proposed and implemented. The correctness of extension was dominated in the end. Key words: network emulation; NS2; packet reform; function extension 引 言互联网的迅速发展与膨胀对网络的规划、应用和协议的 设计提出了新的挑战。在试验环境中对网络规划、新的应用和协议进行评估是应对上述挑战的有效手段之一[1-3]。当前构建复杂网络试验环境的实现技术主要包括测试床、网络模拟(network simulation )和网络仿真(network emulation )[4]等三种类型。 测试床具有逼真度高的优点,但是造价较高、规模和复杂性有限。网络模拟具有可控性强、灵活性高、代价低以及能够实现复杂网络拓扑等优点,但是对于网络流量以及实现细节支持不够,交互性不高。网络仿真综合了测试床和网络模拟的优点。在仿真环境中,网络应用运行在实际的硬件平台上,且能够与实际的环境交互,扩展性和灵活性较高,同时网络试验环境可配置、可控制、可重复,能够生成真实网络流量,从而成为当前构建网络试验环境的重要技术。当前网络仿真技术研究思路分为两种:一种思路是将仿真网络看作简单的延迟黑盒(simple delay lines ),仅关注网络出入口的设置,该思路具有硬件要求低的优点。相关研究包括:Dummynet [5],NIST net [6]等。另一种思路是通过建立虚拟网络模拟进行实时网络仿真。真实网络流量能够通过仿真 收稿日期:2007-06-10 修回日期:2008-02-09 作者简介:况晓辉(1975-), 男, 湖南新化, 博士, 副研究员, 研究方向为计算机网络, 信息安全;赵刚(1969-), 男, 河北保定, 研究员, 研究方向为计算机网络, 信息安全; 郭勇(1966-), 男, 湖南常德, 研究员, 研究方向为计算机网络, 计算机软件。 器,虚拟网络能够根据交互生成网络流量。相关的研究包括VINT/nse [7],ModelNet [8],NetBed [9], Virtual Routers [10],PlanetLab [11]以及IP-TNE [1]等。 随着网络复杂性的提高,基于延迟黑盒的网络仿真环境难以满足应用需求。因此,建立在网络模拟基础上的仿真环境成为网络仿真技术的研究重点。在网络模拟器实现中,NS2 [12]能够支持有线和无线、本地或卫星、局域网和广域网等各种网络类型以及网络分层模型,具有强大的二次开发能力以及可扩展、易配置和编程的事件驱动特性,为构建网络仿真平台提供了良好基础。然而,NS2已有的仿真功能在IP 地址支持、路由机制、协议支持等方面存在不足,难以满足网络技术研究和协议设计开发的实际需求。 本文在深入分析NS2仿真功能的基础上,重点分析了已有功能存在的不足,描述并实现了NS2仿真功能扩展,解决了IP 地址支持、动态路由以及拓扑验证的问题。最后,通过试验验证了仿真功能的正确性和有效性。 1 NS2网络仿真功能分析 事件驱动的网络模拟器NS2是DARPA 支持的VINT 项目中的核心部分,由Berkeley, USC/ISI 、 LBL 和Xerox PARC 等大学和实验室合作开发,其目的是构造虚拟的网络平台和模拟工具,以支持网络协议的研究、设计和开发。 1.1 仿真功能 NS2仿真模块实现了模拟器与实际网络的连接功能,

TCP拥塞控制分析

TCP 拥塞控制分析 摘要:随着计算机网络的飞速发展,网络用户数量急剧增加,Internet 在各个领域也发挥越来越重要的作用,但随着其流量的急剧增加,由此引发的网络拥塞已经成为制约网络发展和应用的瓶颈问题。拥塞容易造成传输延迟和吞吐量等性能指标的下降,严重影响带宽、缓存等网络资源的利用率。TCP 作为应用最广泛的传输协议,它的拥塞控制已经成为其成功的关键。本文针对这一现象对TCP 性能及拥塞控制进行研究,我们将简单探讨网络拥塞出现的原因,着重介绍TCP 拥塞控制的原理并分析四个TCP 拥塞控制算法,最后论述TCP 拥塞控制所面临的问题,根据此提出进一步的研究方向。 关键词:TCP 拥塞、拥塞控制、TCP Tahoe 、TCP Reno 、TCP SACK 、TCP Vegas 1. 拥塞产生的原因 拥塞是一种持续过载的网络状态,此时用户对网络资源(包括链路带宽,存储空间和处理器的处理能力等)的需求超过了其固有的容量。拥塞导致的直接结果就是分组丢失率增加,端到端延时加大,甚至有可能使整个系统发生崩溃。 网络产生拥塞的根本原因在于用户或端系统提供给网络的负载大于网络资源容量和处理能力,即网络提供的资源不足以满足用户的需求,这些资源包括缓存空间、链路带宽容量和中间结点的处理能力等,使其产生数据包时延增加、丢弃概率增大、上层应用系统性能显著下降等典型现象。拥塞产生的直接原因有三点: (1)存储空间不足。缓存的容量不够大,当缓存已经装满,没有空闲的空间时就只能将新到达的分组丢弃。 (2)带宽容量不足,低速链路对高速数据流的输入也会产生拥塞。任何信道带宽最大值为()N +B =S C 1log 2(N 为信道噪声平均功率,S 为信源平均功率,B 为信道带宽) [1]。 要求所有信源发送的速率R 必须小于等于信道容量C 。 (3)处理器处理能力弱,速度慢。低速链路对高速CPU 也会产生拥塞。 要避免拥塞的发生,必须对链路带宽、路由器处理速度和存储容量等问题予以考虑,尽可能使系统的各个部分相互匹配。但由于网络流量分布的不均衡性,随着用户数量和

TCP拥塞控制算法比较

TCP拥塞控制算法比较 TCP发展到现在已经形成了TCP Tahoe、TCP Reno、TCP NewReno、SACK、Vegas等不同版本,这些算法各有利弊。 Tahoe算法是TCP的早期版本。它的核心思想是:让cwnd以指数增长方式迅速逼近可 用信道容量,然后慢慢接近均衡。它包括了3个基本的拥塞控制算法:慢启动、拥塞避免、快速重传。Tahoe的缺点体现在快速重传后转向慢启动算法,这样不能有效的利用网络带宽并且还引入较大的延时。 Reno算法是针对Tahoe算法的不足而做的改进。改进主要有两方面:一是对于收到连 续3个重复的ACK确认,算法不经过慢启动,而直接进入拥塞避免阶段;二是增加了快速重传和快速恢复机制。Reno算法以其简单、有效和鲁棒性成为TCP源算法的主流,被广泛的 采用。但它不能有效的处理多个报文分组从同一发送窗口中丢失的情况。 NewReno对Reno中快速恢复算法进行了补充,它考虑了一个发送窗口内多个报文分组 同时丢失的情况。Reno算法中,发送方收到一个不重复的应答后就退出快速恢复,而NewReno 中,只有当所有的报文分组都被应答后才退出快速恢复状态。NewReno的实现只要修改TCP 发送端的实现代码,实现简单。 SACK算法也针对一个窗口内多个报文分组丢失的情况而对Reno算法进行改进:SACK 定义了一个变量pipe来表示出现在路由器上报文分组的估计数量,接收方TCP发送SACK 分组来通知发送方的接收状况,这样源端就能准确的知道哪些报文分组被正确的传到接收端,从而避免不必要的重传,提高网络吞吐量。但SACK算法的实现需要修改TCP发送端和接收端的实现代码,增加了TCP的复杂性,因此不易大规模的应用。 Vegas与上述的算法不同,它是以RTT的变化作为拥塞信号,调节源端的发送速率。通过监测RTT的变化来改变cwnd的大小。由于Vegas采用RTT的改变来判断网络的可用带宽,能较好的预测网络带宽的使用情况,其公平性、效率都较好。但是,由于Vegas与其它算法在竞争带宽方面存在不公平现象,因此未能在因特网中普遍采用,还需要继续改进。

NS2实验报告

NS2实验报告 一、实验平台和环境 本实验是在Windows XP操作系统平台下安装了Cygwin软件以模仿Linux 下的编程环境,然后在Cygwin模仿的环境中安装了ns-allinone-2.34软件包,该软件包包含nam、otcl、tcl、tclcl、tk以及xgraph等软件包和辅助分析工具。 二、实验步骤 2.1 安装与配置 1.安装cygwin a)在cygwin官方网站下载setup.exe。 b)运行setup.exe,使用默认配置选择unix安装。 c)在选择安装组件时确认安装以下内容:XFree86-base, XFree86-bin, XFree86-prog,XFree86-lib, XFree86-etc,make,patch,perl,gcc,gcc-g++, gawk,gnuplot,tar 和gzip。 Diffstat,diffutils,libXmu,libXmu-devel,libXmu6,libXmuu1, X-startup-scripts xorg-x11-base xorg-x11-bin xorg-x11-devel xorg-x11-bin-dlls xorg-x11-bin-lndir xorg-x11-etc xorg-x11-fenc xorg-x11-fnts xorg-x11-libs-data xorg-x11-xwin 2.安装NS2 a)在NS2官方网站下载ns2-allinone-2.34.tar.gz安装包。 b)将ns2-allinone-2.34.tar.gz拷贝放入cygwin用户目录下。 c)运行cygwin,命令行下输入tar xvfz ns2-allinone-2.34.tar.gz。 d)进入ns2-allinone-2.34目录,执行./install开始安装。

基于NS2的UDP仿真报告

基于NS2的UDP协议仿真 1. UDP协议的特点 UDP 是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。UDP协议称为不可靠的传输协议。 UDP报头由4个域组成,其中每个域各占用2个字节,具体如表1所示: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1819 20 21 22 23 24 25 26 27 28 29 30 31 源端口目的端口 段长校验和 表1 UDP报头结构 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。 2. NS2软件的安装与配置 2.1 ubuntu实验环境 Ubuntu是Linux的一个版本,是一款免费的操作系统,Ubuntu 项目完全遵从开源软件开发的原则;用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。NS2在linux环境下运行比在windows下更稳定,出现更少的错误,还可以更改linux内核,使得仿真效果更好。 2.2 软件安装 NS2可以再Linux平台下运行,因此一般需要安装Linux操作系统。也可以采用Windows+虚拟机(VMware,Virtual PC)+NS组合的方式。 若要在Ubuntu上运行NS2,下面的软件是在安装和使用NS2中需要用到的,必须先行安装。

NS2仿真实例汇总

NS-2仿真模拟实例汇总 (以方路平的书为主) 1.例4.5a:DropTail队列管理的NS_2模拟实例(P161) set ns [new Simulator] set nf [open out.nam w] $ns namtrace-all $nf set tf [open out.tr w] set windowVsTime [open win w] set param [open parameters w] $ns trace-all $tf proc finish {} { global ns nf tf $ns flush-trace close $nf close $tf exec nam out.nam & exit 0 } set n2 [$ns node] set n3 [$ns node] $ns duplex-link $n2 $n3 0.7Mb 20ms DropTail set NumbSrc 3 set Duration 50 for {set j 1} {$j <=$NumbSrc} {incr j} { set S($j) [$ns node] } set rng [new RNG] $rng seed 2 set RVstart [new RandomVariable/Uniform] $RVstart set min_ 0 $RVstart set max_ 7 $RVstart use-rng $rng for {set i 1} {$i <=$NumbSrc} {incr i} { set startT($i) [expr [$RVstart value]]

NS2仿真实验报告

Ns2简单有线网络仿真实验报告 一、实验概述 1、在windows系统下安装Centos虚拟机 2、在Centos系统下安装NS2仿真工具包 3、Nam方式示例 二、实验内容 1)NS2仿真工具包安装说明 1.在Centos系统下设置root账户 2.解压NS2文件 3.安装ns-allinone-2.35 设置环境变量 4.验证NS2工具包安装情况 2)Nam方式 Otcl脚本 # 产生一个仿真的对象 set ns [new Simulator] #针对不同的资料流定义不同的颜色,这是要给NAM用的 $ns color 1 Green $ns color 2 Red #开启一个NAM trace file set nf [open out.nam w] $ns namtrace-all $nf #开启一个trace file,用来记录封包传送的过程 set nd [open out.tr w] $ns trace-all $nd #定义一个结束的程序 proc finish {} { global ns nf nd $ns flush-trace close $nf close $nd #以背景执行的方式去执行NAM exec nam out.nam & exit 0 } #产生6个网络节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node]

set n4 [$ns node] set n5 [$ns node] #把节点连接起来 $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns duplex-link $n2 $n3 1.7Mb 20ms DropTail $ns duplex-link $n3 $n4 1.7Mb 30ms DropTail $ns duplex-link $n3 $n5 1.5Mb 30ms DropTail #设定ns2到n3之间的Queue Size为10个封包大小$ns queue-limit $n2 $n3 10 $ns queue-limit $n3 $n4 5 #$ns queue-limit $n3 $n5 10 #设定节点的位置,这是要给NAM用的 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n2 $n3 orient right $ns duplex-link-op $n3 $n4 orient right-up $ns duplex-link-op $n3 $n5 orient right-down #观测n2到n3之间queue的变化,这是要给NAM用的$ns duplex-link-op $n2 $n3 queuePos 0.5 #建立一条n0-n5TCP的联机 set tcp [new Agent/TCP] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n5 $sink $ns connect $tcp $sink #在NAM中,TCP的联机会以Green表示 $tcp set fid_ 1 #在TCP联机之上建立FTP应用程序 set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #建立一条UDP的联机 set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null #在NAM中,UDP的联机会以红色表示 $udp set fid_ 2 #在UDP联机之上建立CBR应用程序 set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp

程序员面试必考题(十八)--TCP的拥塞控制机制

拥塞控制(congestion control)是TCP协议的一项重要功能,TCP 的拥塞控制机制是从端到端的角度,推测网络是否发生拥塞,如果推断网络发生拥塞,则立即将数据发送速率降下来,以便缓解网络拥塞。TCP的拥塞控制采用的是窗口机制,通过调节窗口的大小实现对数据发送速率的调整。TCP的发送端维持一个称为拥塞窗口cwnd的变量,单位为字节,用于表示在未收到接收端确认的情况下,可以连续发送的数据字节数。cwnd的大小取决于网络的拥塞程度,并且动态地发生变化。拥塞窗口调整的原则是:只要网络没有出现拥塞,就可以增大拥塞窗口,以便将更多的数据发送出去,相当于提高发送速率;一旦网络出现拥塞,拥塞窗口就减小一些,减少注入网络的数据量,从而缓解网络的拥塞。 发送端判断网络发生拥塞的依据是:发送端设置一个重传计时器RTO,对于某个已发出的数据报文段,如果在RTO计时到期后,还没有收到来自接收端的确认,则认为此时网络发生了拥塞。 TCP的拥塞控制算法包括了慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fast retransmit)和快速恢复(fast recovery)四部分。 慢启动算法作用在TCP数据传输的开始阶段,当主机开始发送数据时,因为不知道网络中的负荷情况,如果立即发送大量的数据,有可能会引起网络的拥塞。因此,TCP采用试探的方法,逐渐增大拥塞窗

口。通常在刚开始发送数据报文段时,先将拥塞窗口cwnd设置为一个TCP最大段长度MSS的值。而在每收到一个数据报文段的确认后,cwnd就增加一个MSS的数值。这样就可以逐渐增大发送端的拥塞窗口,使数据注入网络的速率比较合理。如果定义从发送端发出一个数据报文段到收到这个数据报文段的确认的时间间隔为往返时间RTT,则在慢启动阶段,每经过一个RTT,cwnd的值就加倍。 为了防止拥塞窗口增长过快而引起网络拥塞,TCP还需要设置一个慢启动阈值ssthresh,当拥塞窗口的值增加到ssthresh时,就要减缓拥塞窗口的增长速度,具体的做法是每经过一个RTT,拥塞窗口cwnd 的值加1(单位为MSS),这样就可以使cwnd按线性规律缓慢增长,这个过程称之为“加性增加”(Additive Increase)算法。通常情况下,拥塞窗口cwnd的初值被设置为1,慢启动阈值ssthresh的初值被设置为16。当拥塞避免算法执行到某个时刻,发送端在规定时间内没有收到接收端的确认,即发生了网络超时,则意味着网络发生了拥塞。此时,发送端首先将ssthresh的值变为发生超时时cwnd值的一半,同时将cwnd的值置为1,重新执行慢启动算法。这样做的好处是,当网络频繁出现拥塞时,ssthresh下降得很快,可以大大减少注入网络中的数据报文段。通常称这个过程为“乘性减小”(MultiplicativeDecrease)算法。TCP中的“加性增加”和“乘性减小”算法合起来称为AIMD算法。

(完整word版)NS2网络仿真实验

移动自组织网络 实 验 报 告 NS2网络仿真实验 何云瑞 13120073 电信研1301班

1.实验目的和要求 1.学会NS2的安装过程,并熟悉NS2的环境; 2.观察并解释NAM动画,分析Trace文档。 3.学会用awk和gnuplot分析吞吐量、封包延迟、抖动率和封包丢失率。2.实验环境 先在PC上安装VMware虚拟机,再在虚拟机上安装Ubuntu系统,最后再Ubuntu系统上安装NS2软件,本次实验采用的是NS-2.34版本。 3.基本概念 3.1 NS2简介 NS2是一款开放源代码的网络模拟软件,最初由UC Berkeley开发。它是一种面向对象的网络模拟器,它本质上是一个离散事件模拟器,其本身有一个模拟时钟,所有的模拟都由离散事件驱动。其采用了分裂对象模型的开发机制,采用C++和OTcl两种语言进行开发。它们之间采用TclCL进行自动连接和映射。考虑效率和操作便利等因素,NS2将数据通道和控制通道的实现相分离。为了减少封包和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++编写,这些对象通过TclCL映射对OTcl解释器可见。 目前,NS2可以用于模拟各种不同的通信网络,它功能强大,模块丰富,已经实现的主要模块有:网络传输协议,如TCP和UDP;业务源流量产生器,如FTP、Telnet、CBR、Web和VBR;路由队列管理机制,如Droptail、RED和CBQ;路由算法;以及无线网络WLAN、移动IP和卫星通信网络等模块。也为进行局域网的模拟实现了多播协议以及一些MAC子层协议。 3.2 NS2的功能模块 NS2仿真器封装了许多功能模块,最基本的是节点、链路、代理、数据包格式等,下面对各个模块进行简单的介绍: (1)事件调度器:目前NS2提供了四种具有不同数据结构的调度器,分别是链表、堆、日历表和实时调度器。

TCP协议拥塞控制算法

TCP协议拥塞控制算法研究 摘要:自从1986年互联网出现严重的拥塞崩溃现象后,网络拥塞控制受到了广泛的关注。随着网络的不断发展,网络用户及需求急剧增加,网络拥塞也越来越严重。如何有效解决网络拥塞,成为人们急需解决的问题。TCP作为目前互联网上使用最广泛的一种传输协议,TCP拥塞控制机制对互联网的稳定运行起着重要的作用。本文阐述了TCP的拥塞控制机制以及几种TCP拥塞控制算法,并对它们进行了仿真,比较了他们各自的优缺点,并指出了进一步改进TCP拥塞控制的必要性。 关键字:互联网;TCP;拥塞控制 Abstract:Since the advent of the Internet congestion collapse in 1986, network congestion control has been widespread concern. With the continuous development of the network, network users and the demand are increasing rapidly, network congestion has become increasingly serious. How to effectively solve network congestion become an urgent problem. TCP currently used on the Internet as the most widely used transport protocol, TCP congestion control mechanisms for the stable operation of the Internet plays an important role. This paper describes the TCP congestion control mechanisms as well as several TCP congestion control algorithms, and their simulation to compare their advantages and disadvantages, and pointed out the need for further improvement of TCP congestion control. Keywords:Internet;TCP;Congestion control 1 引言 近年来以IP为基础的internet呈爆炸式增长,网络用户数量迅速增加,internet 在各个领域也发挥着越来越重要的作用,但随着其流量急剧增加,由此而引发的网络拥塞已经成为制约网络发展和应用的瓶颈问题。在计算机网络中的宽带、交换节点中的缓存和处理机等,都是网络资源。如果网络相对于负载需求表现为节点存储空间不足、链路带宽不足、处理器处理速度慢,以及系统各部分性能不匹配等等,从而导致网络上的包时延增加,丢包率上升,吞吐量下降,直接使服务质量下降。概括来说就是在某一时间段里,如果网络中的某一资源的需求量超过了该网络所能提供的网络资源的可用部分,网络的性能就能变坏。诸如网络延时

网络性能的仿真+ns2

实验一:网络性能的仿真 一、实验要求 1)对64个计算机结点,每个计算机采用若干100Mbps集线器(HUB)的 方式连接到一台服务器上。采用NS2仿真软件,对于以上的具体环节进 行网络性能的仿真,给出网络的吞吐量,丢包率,总时延,抖动率等参 数的仿真曲线,并对结果进行分析。 2)将以上环境中的集线器(HUB)换成交换机(switch),给出网络的信道 利用率,吞吐量,传输时延,排队延迟等参数的仿真曲线,并对结果进 行分析。 二、实验目的 通过本次实验的完成,首先能够学会在Ubuntu环境下安装搭建NS2运行的环境。其次对于tcl语言有了更加全面的了解。通过对具体环境的网络环境进行仿真,可以加深对网络的信道利用率,吞吐量,传输时延,排队延迟等参数的计算及了解。最后通过仿真环境中集线器(HUB)和交换机(Switch)之间的仿真的区别,加深对HUB和交换机之间差别的理解。 三、实验原理 1、NS2( Network Simulator version 2),NS(Network Simulator)是一种针对网络技术的源代码公开的,免费的软件模拟平台。计算机网络是一个相当复杂的系统,包含了各种通信协议和网络技术,而网络仿真是网路通信技术研究的重要手段之一,网络仿真是指采用计算机软件对网络协议,网络拓扑,网络性能进行模拟分析的一种研究手段。NS2是一种面向对象的网络仿真器,本质是一个离散事件模拟器,它可以仿真各种不同的IP网,实现一些网络传输协议,比如TCP和UDP,还包括业务源流量产生器,比如FTP,CBR等。NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。NS是用Otcl和C++编写的。由于效率的原因,NS将数据通道和控制通道的实现相分离。为了减少分组和事件的处理时间,事件调度器和数据通道上的基本网络组件对象都使用C++写出并编译的,这些对象通过映射对Otcl解释器可见。当仿真完成以后,NS将会产生一个或多个基于文本的跟踪文件。只要在Tcl脚本中加入一些简单的语句,这些文件中就

相关主题
文本预览
相关文档 最新文档