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

2023-11-08

实验内容

无线网络与移动技术第二次实验,用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 *
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ns2无线局域网隐藏节点仿真实验 的相关文章

随机推荐

  • 【PTA】数组合并

    合并两个升序数组 使得合并后的数组仍然是升序 输入格式 输入两个整数n和m 表示两个数组的长度 接着输入n个整数表示第一个数组的元素 然后输入m个整数表示第二个数组的元素 要求输入时按升序输入 import java util public
  • idea导入eclipse项目(保姆式教学)

    直接上操作吧 这里的红色箭头点击OK的不用 标错了 配置全部完成之后再点击OK 然后配置自己的tomcat 正常配置就好 如果是maven项目 则右键pom xml文件 点击maven 红色的pom xml文件变为蓝色则完成 这样就将ecl
  • 模拟退火算法matlab求函数最大值实例

    模拟退火算法matlab求函数最大值实例 模拟退火算法的思路基本上是 1 粒子按照不同的概率在不同的方向漂移 随机运动 2 向目标点漂移的概率更大 趋向于能量低的点 3 随着时间的推移粒子每次漂移的步长变短 温度降低 这里粒子的速度采用正态
  • 解决GD32F20X支持包安装后打开官方例程无法识别芯片问题

    今天分享一个自己遇到的一个问题 就是在安装了GD32F20x的支持包后 发现打开keil5的工程后 提示缺少芯片的device 于是以为keil5的版本不够 又去官网下了其补丁包 没想到还是不行 后来发现迁移到keil5格式就可以找到相应的
  • 最小二乘法的矩阵推导

    顾名思义 从数学意义推导最小二乘法公式 一 解释 最小二乘法本质是寻找一组x 使Ax与b距离最近 写成二范数的形式为 最合适的x一般出现在函数的极值点 也就是导数为0的点 所以为求导计算方便 我们用二范数的平方作为计算公式 补充知识 设下列
  • nginx + lua 构建网站防护waf(一)

    最近在帮朋友维护一个站点 这个站点是一个Php网站 坑爹的是用IIS做代理 出了无数问题之后忍无可忍终于要我帮他切换到nginx上面 前期被不断的扫描和CC 最后找到了waf这样一个解决方案缓解一下 话不多说直接开始 waf的作用 防止sq
  • 111端口rpcbind漏洞

    rpcbind是NFS中用来进行消息通知的服务 实验环境 攻击机 kali linux ip 192 168 172 134 目标机 Metasploittable2 ip 192 168 172 129 攻击过程 setp1 使用nmap
  • k宝无法连接计算机,农行K宝无法识别

    2013 10 21 k宝怎么插入电脑后点击没反应是怎么回事 原因分析 静电 主板电压和系统设置等原因导致 简易步骤 1 拔出所有USB设备 关机 拔掉电源 笔记本需拔出电池 按开机键5 6下 开机重新插入USB设备 2 右键点击 我的电脑
  • 拓展:EPSILON = 1e-8

    EPSILON 是一个希腊字母 叫做艾普西隆 它代表一个常量 通常用于表示一个很小的浮点数值 其值为 1e 8 在计算机中 由于浮点数的精度限制 当两个浮点数非常接近时 它们可能由于舍入误差而不相等 为了解决这种问题 常常会使用一个很小的数
  • 图论 笔记

    关于存图 如果是有权值的边 可以用pair define pii pair
  • springboot集成es 使用x-pack

    引入架包
  • 软件测试工程师笔试题及答案(二)

    测试人员考试试卷二 考试时间90分钟 满分100分 一 判断题 每题2分 正确的 错误的 1 好的测试员不懈追求完美 2 测试程序仅仅按预期方式运行就行了 3 不存在质量很高但可靠性很差的产品 4 软件测试员可以对产品说明书进行白盒测试 5
  • 代码随想录算法训练营19期第36天

    435 无重叠区间 代码随想录 初步思路 重叠区间 贪心 总结 按照右边界排序 从左向右记录非交叉区间的个数 最后用区间总数减去非交叉区间的个数就是需要移除的区间个数 如果按照左边界排序直接求 重叠的区间 使用变量count为记录重叠区间数
  • 单一职责原则

    单一职责原则 就一个类而言 应该只有一个引起它变化的原因 如果一个类承担的职责过多就等于把这些职责耦合在一起 至少会造成以下两方面的问题 我们要去修改该类中的一个职责可能会影响到该类的其它职责 这种耦合会导致脆弱的设计 当变化发生时 设计会
  • 一个月能做什么?成长&感悟分享

    一个月做了什么 八月做了些什么 单词打卡 第一件事情就是单词打卡 英语很差的我 一样继续打卡 今天是第736天 当你还在纠结扇贝和不背 可可英语哪一个好的时候 别人已经同时使用了 当你还在咨询学编程 敲代码需不需要英语的时候 别人已经开始同
  • springboot整合log4j打印日志

    1 排除springboot自带log依赖
  • Hamcrest 测试匹配框架

    为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架 可以通过现有的匹配器类检查代码中的条件 也可以通过自定义的匹配器实现 要在JUnit中使用Hamcrest匹配器 可以用它的assertThat语句 并且可添加一个或
  • pycharm打开chrome自动退出解决方法

    先查谷歌版本和驱动版本 from selenium import webdriver driver webdriver Chrome str1 driver capabilities browserVersion 查看chrome版本 st
  • ARP欺骗

    目录 一 ARP协议 二 ARP欺骗的原理 三 实验环境 四 实验步骤 一 ARP协议 每一个主机都有一个ARP高速缓存 此缓存中记录了最近一段时间内其它IP地址与其MAC地址的对应关系 如果本机想与某台主机通信 则首先在ARP高速缓存中查
  • ns2无线局域网隐藏节点仿真实验

    ns2无线局域网隐藏节点仿真实验 实验内容 实验原理 实验过程 相关模块安装 仿真模块 问题总结 问题一 问题二 问题三 实验内容 无线网络与移动技术第二次实验 用ns2完成无线局域网隐藏节点仿真实验 实验原理 隐藏节点指在接收节点的覆盖范