网络仿真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参数,观测对端到端时延、丢包率的影响,分析结果
实验总结及感想:实验总结,对本实验的感想、建议等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478464.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3+threejs新手从零开发卡牌游戏(三):尝试在场景中绘制一张卡牌

首先我们思考下,一张最简单的卡牌有哪些东西构成:卡牌样式和卡牌数据。一张卡牌有正面和背面,有名称、属性、种族、攻击力等数据,我们先不考虑数据,先尝试在场景中绘制一张卡牌出来。 一、寻找卡牌素材 为了简单我直…

2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024)

2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024) 会议简介 2024第二届经济管理、贸易与信息技术创新国际会议(ICEMITI2024)将在中国郑州举行。这是一个重要的学术会议,旨在讨论当前经济管理、贸易和信…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似,有时候为了方便,需要专门创建一个类,将相关的函数全部写入到该类中,方便后续创建对象,再使用类中函数。那么如何创建完类,在其他文件中使用类中函数,这是这篇…

Design Script 官方案例解析3:函数

在本练习中,我们将创建一个通用定义,该定义将通过输入的点列表创建球体。这些球体的半径由每个点的 Z 特性驱动。 首先从 0 到 100 的十个值范围开始。将这些值插入 Point.ByCoordinates 节点,以创建对角线。 创建代码块,然后使用一行代码引入定义:def sphereByZ(inputPt)…

“找不到msvcr100.dll”或“msvcr100.dll丢失”的多种解决方法分享

当计算机系统中msvcr100.dll文件发生丢失时,导致某些应用程序无法正常运行。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分,对于许多基于Windows操作系统的应用程序正常运行至关重要。小编将介绍5种解决msvcr100.dll丢失问题的方法…

LeetCode-热题100:17.电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入: digits “23” 输出&a…

云打印和无线打印有什么区别?

近段时间,云打印的概念越来越火热,而与此同时,无线打印也逐渐被大家所接受。那么云打印和无线打印有什么区别?今天带大家来了解一下。 云打印和无线打印有什么区别? 想要了解云打印和无线打印的区别,首先我…

org.springframework.boot:type=Admin,name=SpringApplication异常

javax.management.InstanceNotFoundException: org.springframework.boot:typeAdmin,nameSpringApplication 问题描述: IDEA 新建 SpringBoot 项目,启动时后台报错: javax.management.InstanceNotFoundException: org.springframework.boot…

图论必备:Dijkstra、Floyd与Bellman-Ford算法在最短路径问题中的应用

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:アンビバレント—Uru 0:24━━━━━━️💟──────── 4:02 🔄 ◀️ ⏸ ▶️ ☰ …

电脑文件msvcp100.dll丢失原因,如何快速修复msvcp100.dll

电脑文件msvcp100.dll丢失原因,最近有朋友在问这个,显然会问这个的人,一般都是遇到了msvcp100.dll丢失的问题了,今天我们就来详细的给大家说说msvcp100.dll这个文件吧,我们只有了解了msvcp100.dll这个文件,…

uniapp 云开发省钱之调整函数执行内存大小

我这个5块钱一个月的服务空间配置: 现在还只有少量的用户和自己测试之用,目前消耗的情况: 云函数的使用量还是挺高的,目前还是正好能覆盖一个月的使用量,等用户量上来肯定是不行的,所以得想想办法压榨一下云…

Docker 笔记(七)--打包软件生成镜像

目录 1. 背景2. 参考3. 文档3.1 使用docker container commit命令构建镜像3.1.1 [Docker官方文档-docker container commit](https://docs.docker.com/reference/cli/docker/container/commit/)Description(概述)Options(选项)Exa…

软考 网络工程师 每日学习打卡 2024/3/21

学习内容 第8章 网络安全 本章主要讲解网络安全方面的基础知识和应用技术。针对考试应该掌握诸如数据加密、报文认 证、数字签名等基本理论,在此基础上深入理解网络安全协议的工作原理,并能够针对具体的 网络系统设计和实现简单的安全解决方案。 本章共有…

一触即发,全栈联动:使用Docker Compose部署Spring Boot应用+MySQL+Redis实战指南

在云原生时代的快车道上,Docker Compose无疑是那辆助您疾驰的豪华跑车,它凭借其简洁高效的YAML配置文件,让您能够轻松部署和管理包含Spring Boot应用、MySQL数据库以及Redis缓存服务在内的完整堆栈。本文将深入浅出地引导您通过一个docker-co…

蓝桥杯:Python基础学习一

目录 一、遍历列表 1.使用for 循环和 enumerate()函数实现 2.案例代码 二、对列表进行统计和计算 1.统计数值列表的元素和 2.案例代码 三、对列表进行排序 1.使用列表对象的sort()方法 2.使用内置的 sorted()函数实现 四、列表推导式 1.从列表中选择符合条件的元素组…

WMI接口设计实现

WMI是Windows操作系统管理数据和操作的基础设施,系统管理员可以使用VB Script、PowerShell及Windows API(C、C#等)管理本地或远程计算机。 使用WMI框架应用程序可以直接访问EC RAM、 I/O端口、Memory地址、寄存器、Setup NV设定值&#xff0c…

unicloud 云函数 介绍及使用

普通云函数 callFunction方式云函数,也称之为普通云函数。 uni-app的前端代码,不再执行uni.request联网,而是通过uniCloud.callFunction调用云函数。 callFunction方式避免了服务器提供域名,不暴露固定ip,减少被攻击…

京东商品详情页数据抓取:探索背后的技术与合法途径

京东的商品详情页面数据通常是通过其API进行获取的,但是京东的API并不是公开的,需要注册京东开放平台并获取相应的API密钥。此外,直接爬取京东网站的数据可能违反了京东的服务条款,并且可能涉及到法律问题。 如果你确实有合法的需…

提升商品销量必备!淘宝商品评论电商API接口全解析

评论是电商销售中至关重要的一环,它能直接影响到商品销量。淘宝商品评论电商API接口的全面了解和合理的应用,将成为提升销量的利器。联讯数据将从不同角度详细解析淘宝商品评论电商API接口,为您揭示成功提升商品销量的关键。 淘宝商品评论电…

手写简易操作系统(十四)--内存管理系统

前情提要 前面我们实现了一个简单的C库,现在我们将实现一个内存池。 之前我们的内存都是自己规划的,我们需要 0xc0001500 这个地址,就将程序放在哪儿。但是程序多了怎么办?还需要我们自己去一个一个安排位置吗,有一块…