网络仿真3-NS2协议修改和移植

Ns2实现原理

OTcl与C++关联

执行路径:Tcl->Otcl->C++

返回路径:C++->Otcl->Tcl

NS2协议修改和移植

NS2中的各种网络协议在底层通过C++实现,在网络仿真过程中最终通过调用底层C++代码实现网络行为、算法、功能等各种仿真

NS2协议修改:通过NS2中已有协议的修改,完成网络研究中通过对现有协议或算法改进效果的测试和验证

NS2协议移植:将新开发的网络协议移植到NS2中,以便能够对协议性能进行测试和比较

两个实验:
实验二:网络拥塞避免仿真实验

实验三:洪泛无线路由协议移植实验

实验二:网络拥塞避免仿真实验

网络拥塞形成的原因
存储容量的限制 :端口转发数据的速率低于数据包到达速率,造成存储空间被占满的情形,后到达的数据包将被丢弃

带宽容量的限制:低速链路难以应对高速数据流的输入

处理器性能的限制:工作效率不能满足高速链路的需求

其它原因:网络规划不合理、路由协议不完善、网络链路性能不稳定等

拥塞的表现形式(对源端):

丢包->重传->...->更大的拥塞->...->网络崩溃

拥塞检测( TCP中的假设):

丢包由拥塞引起

接收端向源端发送ACK

1到2个重复ACK:可能由报文乱序引起

3个或更多重复ACK :报文被丢弃

拥塞避免:

队列管理:在一定程度上缓解拥塞(降低丢包率)

Droptail、RED等

拥塞窗口:慢启动、加法增大、乘法减小

丢包的假设

在TCP协议中,丢包通常被视为网络拥塞的迹象。TCP使用一系列的机制来检测并响应网络拥塞:

  • 接收端向源端发送ACK(确认):ACK是接收端告诉发送端已成功接收数据包的方式。
  • 1到2个重复ACK:当发送端收到一个或两个重复的ACK时,这可能表明数据包是乱序到达而不是被丢弃。在这种情况下,TCP可能会稍作等待,以允许乱序的数据包被正确排序。
  • 3个或更多重复ACK:当发送端收到三个或更多重复的ACK时,这被解释为一个数据包已经被网络中的某处丢弃。TCP使用这个信号作为网络拥塞的明确指示,并触发快速重传机制,同时进入拥塞控制模式。

拥塞避免策略

为了应对和避免网络拥塞,TCP实施了几种机制:

  • 队列管理:网络设备使用队列管理算法来处理传入的数据包,以减少拥塞和丢包。例如:

    • Droptail:一种简单的队列管理策略,当队列满时简单地丢弃新到达的数据包。这种策略容易导致全局同步和队列振荡。
    • RED(Random Early Detection):一种主动队列管理算法,通过在队列达到饱和前就开始丢弃数据包来避免拥塞,丢包概率与队列长度成正比,以平滑流量并避免队列过长。
  • 拥塞窗口调整:TCP通过调整拥塞窗口大小来控制发送端的数据流量,主要通过以下几种方式:

    • 慢启动:连接开始时,拥塞窗口从一个较小的值开始,每收到一个ACK就将窗口大小加倍,快速增加网络中的数据量,直到达到阈值。
    • 加法增大(AIMD):在慢启动阈值之后,拥塞窗口以线性方式增加,每个RTT(往返时间)增加一个MSS(最大段大小),使得窗口增长更为谨慎。
    • 乘法减小(MD):当检测到丢包事件(如收到三个重复ACK)时,将拥塞窗口大小减半,以减少网络中的数据流量,避免进一步拥塞。

这些机制共同作用,使TCP能够适应网络状况的变化,优化数据传输效率,同时减少数据丢失和延迟的可能性。通过这样的策略,TCP确保了网络资源的合理利用和公平分享,同时避免了网络的过度拥塞

NS2中的Droptail队列管理:

\ns-allinone-2.29\ns-2.29\queue\drop-tail.cc

RED(Random Early Detection)

for more details, please access

http://www.icir.org/floyd/papers/red/red.html

C:\cygwin\home\admin\ns-allinone-2.29\ns-2.29\queue\red.cc

Pa是随队列长度增加而增大的函数,设置的方式可以有很多种,右图为其中的一种

实验目的:

  1. 了解NS2的架构和基本组件的结构

  2. 在NS2已有算法的基础上,掌握通过修改NS2底层文件更改这些算法的方法,从而达到仿真自己设计算法的目的

实验步骤:

  1. 基于实验一仿真环境,使用drop-tail丢包模式,分析节点队列长度对端到端时延、丢包率的影响

  2. 学习随机早期检测(RED)拥塞避免方法的原理

  3. 用C++实现简单的RED算法,要求算法中涉及的参数可在Tcl/OTcl脚本中设定,给出RED算法的实现步骤和代码

  4. 将实现的RED算法添加到drop-tail文件中,在相同长度队列的条件下,比较添加RED算法前后端到端时延、丢包率的情况,给出添加RED算法前后端到端时延和丢包率的对比图

  5. 仿真分析RED算法中不同参数设定对端到端时延、丢包率的影响

修改drop-tail.h:

定义参数:

修改drop-tail.h:

绑定参数

设置新定义的参数值

在\ns-allinone-2.29\ns-2.29\tcl\lib\ns-default.tcl中添加参数默认值

或在脚本中直接定义,语法和默认配置相同

修改drop-tail.cc

修改函数体:

保存修改和的文件

重新编译make(ns2.29目录下)

修改Tcl脚本进行测试

实验结果要求:

仿真脚本代码

修改后的文件(.cc and .h)

实验报告

按照格式完成

实验步骤详细描述实验过程,RED实现步骤和代码描述

实验结果及分析

drop-tail丢包模式下,队列长度对丢包率的影响

相同队列长度下,比较drop-tail和RED对端到端时延、丢包率的影响,分析结果

调整RED参数,观测对端到端时延、丢包率的影响,分析结果

实验总结及感想:实验总结,对本实验的感想、建议等

相关推荐
Fab1an5 小时前
打靶记录18——narak
服务器·网络·安全·web安全·网络安全
2401_872514975 小时前
在线代理提取IP:一文详解其含义和应用
服务器·网络·网络协议·tcp/ip·安全
小白爱电脑6 小时前
路由器的天线有什么用?数量多≠信号强?
网络·智能路由器
xjjeffery6 小时前
网络基础概念和 socket 编程
linux·c语言·网络·后端
TeYiToKu6 小时前
笔记整理—内核!启动!—linux应用编程、网络编程部分(6)随机数与proc文件系统
linux·c语言·arm开发·笔记·嵌入式硬件
程序猿进阶6 小时前
定时任务上云改造方案
java·服务器·网络·数据库·性能优化·定时任务·上云
TravisBytes7 小时前
虚假唤醒(Spurious Wakeup)详解:从概念到实践
开发语言·网络
滔滔不绝tao7 小时前
五子棋双人对战项目(1)——WebSocket介绍
网络·websocket·网络协议
zhyhgx7 小时前
数据链路层之以太网
linux·运维·网络·网络协议·tcp/ip
山语山8 小时前
网络安全的方方面面
网络·安全·架构·人机交互·安全架构