网络仿真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参数,观测对端到端时延、丢包率的影响,分析结果

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

相关推荐
蓝胖的四次元口袋5 小时前
服务器网络与系统基础-面试题
服务器·网络
程序员JerrySUN6 小时前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
视觉AI7 小时前
VS Code Remote-SSH 连接Jetson踩坑完整解决记录(网段不通+主机密钥变更双重故障)
运维·网络·人工智能·windows·ssh·边缘计算
明志数科7 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒7 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
欧神附体1237 小时前
在虚拟机中添加网卡,修改网卡名并关闭SElinux
linux·服务器·网络
德迅云安全-上官7 小时前
源站隐身 + 流量清洗,高防 IP 品牌实力精选
网络·网络协议·tcp/ip
Triv20258 小时前
Profinet与Modbus协议转换网关HD67602的硬件特性与配置方法
网络·plc·modbus·profinet·工业网关·协议转换
珠***格10 小时前
XGF10-Z-4典型接入方式解析:10千伏专变用户380伏多点分布式光伏如何并网?
网络·人工智能·分布式·安全·边缘计算
盟接之桥10 小时前
跨越数字鸿沟,重塑全球信任:盟接之桥EDI如何以长期主义赋能中国制造出海
网络·人工智能·安全·汽车·制造