ns2无线局域网隐藏节点仿真实验

2023-09-19 00:59:06

实验内容

无线网络与移动技术第二次实验,用ns2完成无线局域网隐藏节点仿真实验。

实验原理

隐藏节点指在接收节点的覆盖范围内而在发送节点的覆盖范围外的节点。 由于听不到 发送节点的发送,隐藏节点可能向相同的接收节点发送分组,导致分组在接收节点处冲突。 隐藏节点可以分为隐发送节点和隐接收节点。 如教材第 80 页的图 3.17 所示,节点 A 和 C 同时想发送数据给节点 B,但 A 和 C 都不在对方的传送范围内。所以当 A 发送数据给 B 时,C 并未检测到 A 也在发送数据, 会认为目前网络中无数据传送,会将数据发送给 B。这样, A 和 C 同时将数据发送给 B, 使得数据在 B 处产生冲突,最终导致发送的数据不可用。这种因传送距离而发生误判的问 题称为隐藏节点问题。 为了解决隐藏节点问题,可以使用请求发送(Request to Send,RTS)和清除发送(Clear to Send, CTS)的控制信息来避免冲突。当发送方发出数据前,先送出一个 RTS 包,告知在 传送范围内的所有节点不要有任何发送操作。如果接收方目前空闲,则响应一个 CTS 包, 告诉发送方可开始发送数据,此 CTS 包也会告知所有在接收方信号传输范围内的其它节点 不要进行任何传输操作。

实验过程

相关模块安装

1.下载 mUDP, mUdpSink 的模块文件,具体有下列几个文件主要文件; mudp.cc mudp.h mudpsink.cc mudpsink.h
下载ns2脚本:Hidden_Terminal.tcl
资源链接:https://pan.baidu.com/s/1whtWkV7MW097hBLkPP7XkQ?pwd=8888
提取码:8888
2.在/ns-allinone-2.35/ns-2.35/下新建 measure 文件夹,把mUDP, mUdpSink 模块中的四个文件放入其中
3.修改/ns-allinone-2.35/ns-2.35/common/下的 packet.h 文件,将下面代码添加到对应位置中

int frametype_;
double sendtime_;
unsigned int pkt_id_;
unsigned int frame_pkt_id_;

在这里插入图片描述
4.修改/ns-allinone-2.35/ns-2.35/下的 Makefile 文件, 将以下代码添加到文件中的指定位置

measure/mudp.o measure/mudpsink.o \

在这里插入图片描述
5.修改/ns-allinone-2.35/ns-2.35/tcl/lib/下的 ns-default.tcl,将以下代码添加到文件的最后 一行

Agent/mUDP set packetSize_ 1000

6.修改mudp.cc源代码,修改后的代码:

mUdpAgent::mUdpAgent() : UdpAgent(), id_(0), openfile(0)
{
	bind("packetSize_", &size_);
	//UdpAgent::UdpAgent();
}

在这里插入图片描述
7.在/ns-allinone-2.35/ns-2.35 目录下执行以下命令,执行完成即可

sudo make clean
sudo make

这里sudo make命令过程中可能会遇到一些问题,见问题总结

仿真模块

在/ns-allinone-2.35/ns-2.35中新建文件夹tmp,再新建本次实验专用文件夹,将ns2脚本Hidden_Terminal.tcl放进去,用以下命令执行即可:

ns Hidden_Terminal.tcl

执行过程中可能会遇到问题,见问题总结
命令执行完会出现以下图像
在这里插入图片描述
调试过后(仿真过程中的一个图像):
在这里插入图片描述

问题总结

问题一

sudo make命令执行过程中出现以下问题:
在这里插入图片描述

这里是由于定义了两个函数名hash,此时只需要将./mdart/mdart_function.h中第230的hash改个名,在将mdart/mdart_adp.cc中第108行和第396行中的hash改成前面改后的函数名即可(文件和要改的行数在报错处标记出了)

问题二

make过程中还有可能会遇到这种问题

In file included from common/tkAppInit.cc:57:0:
./bitmap/play.xbm:5:74: error: narrowing conversion of ‘252’ from ‘int’ to ‘char’ inside

我将其总结为一类问题:

common/tkAppInit.cc:57:0
error: narrowing conversion of ‘252’ from ‘a’ to ‘b’ inside

在当前文件common/tkAppInit.cc的第57行
在将数据类型a转化成数据类型b时出了问题,此时我们可以将该处涉及到的数据强制转换成b这种类型即可
本题修改示例
在这里插入图片描述
本次是因为数据类型转换时超出范围,所以还有一种改法是在char前面加上unsigned

问题三

执行ns Hidden_Terminal.tcl过程中可能会遇到以下问题:
在这里插入图片描述

这里是因为权限问题,将当前目录下的对应文件权限修改为777即可,考虑到当前目录下其他文件权限也不够,直接修改当前目录下所有文件的权限即可

chmod 777 *
更多推荐

FastAPI学习大纲

FastAPI是一个现代的、快速的(高性能的)、基于标准Python类型的Web框架,用于构建APIs。它基于标准的Python类型提示,并且它的主要优点是速度、类型安全以及自动的API文档生成。如果您要使用FastAPI,以下是一些必须了解的关键点及相关命令:安装:pipinstallfastapi[all]pipi

第三、四、五场面试

第三场共享屏幕做题(三道简单题)替换空格成%20(双指针)删除升序链表中的重复元素(指针)有效的括号(栈)第四场、第五场自我介绍项目拷打整个项目架构rpc模块的情况分析的数据从那里获取,如何获取整个项目还有哪些不足与改进docker模块的主要工作说一下DNSmap底层的红黑树跟二叉搜索树有什么区别?介绍一下HTTP介绍

DataSheet专业名词解读——每天10个专业名词(1)23.9.18 (NXP)MPC5604B/C

文章目录1.variablelengthencoding(VLE)可变长度编码2.ErrorCorrectionCode(ECC)纠错编码3.Memoryprotectionunit(MPU)内存保护单元4.Interruptcontroller(INTC)中断控制器5.Frequencymodulatedphase-

机器视觉-标定篇

3D结构光标定结构光视觉的优点:非接触、信息量大、测精度高、抗干扰能力强。结构光视觉传感器参数的标定包括:摄像机参数标定、结构光平面参数标定。结构光视觉测量原理图我们不考虑镜头的畸变,将相机的成像模型简化为小孔成像模型,则特征点的图像坐标Pf与其在摄像机坐标系下的三维坐标P之间的关系可表示为:其中:(u,v)是特征点的

在Vue中使用Immutable.js

在Vue3中使用Immutable.js以下是如何在Vue.js中使用Immutable.js的步骤:首先,需要安装immutable.js。你可以通过npm或yarn来安装:npminstallimmutable或者yarnaddimmutable在你的Vue组件中导入Immutable:import{Map,Lis

OOM问题排查解决方案、Arthas分析高CPU问题

一、OOM问题分析流程:第一步:进程分析,分析老年代回收次数和消耗时间第二步:日志分析,找出OOM发生时间的日志来锁定执行方法,对应的机器ip第三步:找到对应的ip机器查看,进一步分析第四步:下载的dump,使用mat分析堆内存,找到堆占用率前3,查看堆指向问题产生:查看新生代最高1000M,如果大数据量调用,jvm会

TypeScript逆变 :条件、推断和泛型的应用

TypeScript逆变:条件、推断和泛型的应用1一个类型问题有一个名为test的函数,它接受两个参数。第一个参数是函数fn,第二个参数options受到fn参数的限制。乍一看,这个问题貌似并不复杂,不是吗?糊业务的时候,这种不是常见的需求嘛。“创建一个泛型类型Test,以确保这两个参数之间存在约束关系就完事了,睡醒再

Vue3 - 实现动态获取菜单路由和按钮权限控制指令

GitHubDemo地址在线预览前言关于动态获取路由已在这里给出方案Vue-vue-admin-template模板项目改造:动态获取菜单路由这里是在此基础上升级成vue3和ts,数据和网络请求是通过mock实现的具体代码请看demo!!!本地权限控制,具体是通过查询用户信息获取用户角色,在路由守卫中通过角色过滤本地配

Postgresql JIT README翻译

WhatisJust-in-TimeCompilation?=================================Just-in-Timecompilation(JIT)istheprocessofturningsomeformofinterpretedprogramevaluationintoanativ

Linux基础指令(四)

目录前言1.find&which指令1.1find1.2which1.3alias1.4where2、grep指令3、xargs指令结语:前言欢迎各位伙伴来到学习Linux指令的第四天!!!在上一篇文章Linux基本指令(三)当中,我们学会了通过学习echo指令,引入了Linux系统中,输出重定向、追加重定向、输入重定

基于海康Ehome/ISUP接入到LiveNVR实现海康摄像头、录像机视频统一汇聚,做到物联网无插件直播回放和控制

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB281811、海康ISUP接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例3、通道配置3.1、直播流接入类型海康ISUP3.2、海康ISUP设备ID3.3、启用保存3.4、接入成功4

热文推荐