网络仿真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 分钟前
网络安全概论
网络·web安全·php
怀澈1229 分钟前
高性能服务器模型之Reactor(单线程版本)
linux·服务器·网络·c++
耗同学一米八39 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题二
运维·网络·mariadb
skywalk81631 小时前
树莓派2 安装raspberry os 并修改成固定ip
linux·服务器·网络·debian·树莓派·raspberry
C++忠实粉丝1 小时前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
黑客Ela1 小时前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php
qdprobot2 小时前
ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
网络·人工智能·百度·文心一言·arduino
hakesashou3 小时前
Python中常用的函数介绍
java·网络·python
C++忠实粉丝3 小时前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
九州ip动态3 小时前
做网络推广及游戏注册为什么要换IP
网络·tcp/ip·游戏