NS2仿真分析无线网络的攻击防御(2)

牙说:继续上一篇博文进行翻译。

4. NS和我们的工作

我们试图评估黑洞攻击在无线Ad-hoc网络中的影响。 为了实现这一点,我们已经使用NS 网络模拟 [14]程序模拟了一个含有黑洞节点的无线自组网络场景。为了模拟无线自组织网络中的黑洞节点,我们实现了一种将数据包吸引到自身之后丢弃数据包的新协议。在本章中,我们介绍了NS以及我们对这个软件的改变。

4.1 NS网络模拟器

NS是一个事件驱动的网络模拟器程序,加利福尼亚州伯克利大学开发,其中包括许多网络对象,如协议,应用程序和流量来源行。 NS是VINT项目软件的一部分[15],自从1995年以来一直由DARPA资助。

   图13 NS-2模式

在仿真层,NS使用OTcl(面向对象的工具命令语言)编程语言来解释用户仿真脚本。 OTcl语言实际上是面向对象的Tcl语言扩展。 Tcl语言与C ++编程语言完全兼容。在顶层,NS是用户TCL脚本的解释器,它们与C++代码一起使用,在第五章将详细介绍TCL语言的使用。

如图13 [16]所示,用户编写的OTcl脚本由NS解释。 当OTcl脚本被解释时,NS同时创建两个主要的分析报告。 其中之一是NAM对象,显示模拟的视觉动画。另一个是由模拟中所有对象的行为组成的跟踪对象。它们都是由NS创建的文件,与NS一起使用的NAM软件使用.nam文件。 Latter是一个“.tr”文件,其中包含文本格式的所有模拟轨迹。(牙注:翻译不好,词大致达意)

在本研究中,我们使用了ns一体式的2.29版本,并使用Cygwin在Windows环境中安装了该软件包。 在版本2之后,NS通常使用NS-2,在我们的论文中,我们将其称为NS-2 我们在文本编辑器中编写了“.tcl”文件,并使用Unix操作系统的“cat”,“awk”,“wc”和“grep”命令分析了“.tr”文件的结果。 AODV协议的黑洞行为的实现阶段是使用C ++编写的。

4.2 在NS中实现新的路由协议以模拟黑洞行为

在[17]中描述了NS-2中新的Manet单播路由协议的实现。在我们的工作中,我们已经使用了使用AODV协议的无线自组织网络中显示黑洞行为的节点(牙注:这句话非常绕口,考验语文水平……)。 由于节点表现为黑洞,因此它们必须使用可以参与AODV消息传递的新路由协议。 下面详细介绍这种新的路由协议的实现:

NS中的所有路由协议安装在“ns-2.29”的目录中。 我们复制此目录中AODV协议,并将目录的名称更改为“blackholeaodv”

我们把这个目录中标记为“aodv”的所有文件的名称将更改为“blackholeaodv”,如blackholeaodv.cc,blackholeaodv.h,blackholeaodv.tcl,blackholeaodv_rqueue.cc,blackholeaodv_rqueue.h等,除了“ aodv_packet.h“。 我们的工作重点是AODV和黑洞AODV协议将相互发送相同的AODV数据包。 因此,我们没有将“aodv_packet.h”文件复制到blackholeaodv目录中。

我们目录中的所有文件所有类,函数,结构体,变量和常量名称都改变了(牙注:改变大概是说改aodv为blackholeaodv吧),而不包括属于AODV packet.h代码的结构体名称。我们设计了aodv和blackholeoadv协议来发送对方的aodv数据包。 这两个协议实际上是一样的。

在上述更改之后,我们更改了NS-2共享的两个常见文件,将新的blackholeaodv协议集成到模拟器中。以下是更改说明:


图16  blackholeaodv“协议代理添加在”\ tcl \ lib \ ns-lib.tcl“中

第一个修改的文件是“\ tcl \ lib \ ns-lib.tcl”,其中协议代理程序被编码为一个过程。 当节点使用blackholeaodv协议时,该代理在模拟开始时进行调度,并分配给将使用blachholeadodv协议的节点。 blackholeaodv的代理程序如图14所示。

在“ns-2.29”的根目录中修改的第二个文件是“\ makefile”。 在所有实现准备好之后,我们必须再次编译NS-2来创建对象文件。 我们将图15中的下面的行添加到“\ makefile”中。


图17 “/makefile”中添加的部分

到目前为止,我们已经实施了一个新的路由协议,被标记为blackholeaodv。 但是,这种新的路由协议还没有实现黑洞行为。 要将黑洞行为添加到新的AODV协议中,我们在blackholeaodv / blackholeaodv.cc C ++文件中进行了相同的更改。 我们将在blackholeaodv / blackholeaodv.cc文件中描述我们在AODV和Black Hole AODV协议下的工作机制的这些改变。

当通过“aodv / aodv.cc”的“recv”功能接收到数据包时,它将根据其类型处理数据包。 如果数据包类型是许多AODV路由管理数据包中的任何一个,它将数据包发送到下面我们将要解释的“recvAODV”函数下。如果接收到的数据包是数据包,通常AODV协议将其发送到目标地址,但是作为黑洞,它会丢弃所有数据包。 在下面的代码中,第一个“if”条件提供如果它是目标时节点接收数据包的情况,“else”条件会丢弃所有剩余的数据包。 If语句如图16所示。


图16 接收或者丢弃数据包的情况

如果分组是AODV管理分组,则“recv”函数将其发送到“recvblackholeAODV”功能。 “recvblackholeAODV”功能将检查AODV管理包的类型,并根据包的类型将其发送到具有“case”语句的适当函数。 例如; RREQ数据包发送到“recvRequest”函数,RREP数据包发送到“recvReply”函数等,“recvblackholeAODV”函数的case语句如图17所示。


图17 用于选择AODV控制消息类型的案例语句

在我们的情况下,我们将考虑RREQ功能,因为黑洞行为是在恶意节点接收到RREQ数据包时进行的。 当恶意节点接收到RREQ数据包时,它会立即发送RREP数据包,就好像它有足够的能力快速到达目的地。恶意节点通过这样的方式欺骗节点。AODV协议的最大序列号是4294967295(32位无符号整数值中的最大值)。为了达到最好的欺瞒效果,恶意节点将发送的RREP数据包的序列号设置为4294967295,跳数设置为1。

黑洞攻击的伪RREP消息如图18所示。


图18 黑洞攻击的虚假RREP消息


所有更改完成后,我们重新编译所有NS-2文件以创建对象文件。 完成编译后,我们有一个新的测试台来模拟AODV协议中的黑洞攻击。 在下一章中我们将介绍模拟和仿真结果。


5.黑洞攻击模拟及其影响

   在本章中,首先,我们将简要介绍Tcl语言来了解仿真场景,接着展示了如何测试黑洞的实现以及展示黑洞攻击的模拟来演示其效果。然后我们将评估黑洞攻击在Ad-Hoc网络中的影响。

5.1 NS中的TCL语言

   TCL是加州大学伯克利分校的John Ousterhout开发的强大的解释性编程语言。 [18] TCL是一个非常强大和动态的编程语言。Tcl是一个真正的跨平台语言,易于部署而且具有高扩展性。

   Tcl语言最显着的优点是与C语言完全兼容,Tcl库可以直接与C程序进行互操作。我们将在下一节中描述我们设计用于实施黑洞攻击的Tcl代码。

5.2 测试黑洞AODV

为了更加直观地显示实验结果,我们使用了NAM应用程序进行观测。比较黑洞节点的的效果,我们使用了两个模拟:在第一种情况下,我们没有使用任何黑洞AODV节点(开展黑洞攻击的恶意节点称为黑洞节点),在第二种情况下,我们在模拟中添加了一个黑洞攻击节点,然后我们使用NAM比较了模拟的结果。

5.2.1 模拟参数和测试指标

为了从模拟节点中获得等价准确的结果,我们使用了UDP协议。在使用UDP协议的时候,即使数据包丢失,源节点也会持续不断地发送数据包,但是如果是TCP协议,它就会断开连接。使用UDP,我们可以观察到仿真期间发送节点和接收节点之间的连接流动,还能够分开发送和接收的数据包,因为在仿真期间UDP连接不会丢失。 如果使用TCP协议,我们不能对发送或接收的数据包进行计数,因为如果没有收到TCP ACK数据包,则启动TCP连接的节点将在一段时间后完成连接。

我们生成一个具有7个节点的小型网络,并在节点2和节点5之间建立UDP连接,附加通过UDP连接生成常量数据包的CBR(Constant Bit Rate)。CBR数据包的大小选择为512字节长,数据速率设置为1M字节/s(牙注:有疑问……/s?)。场景大小为79m x 659m的持续时间设置为20s,CBR的连接在时刻1s开始并且持续到仿真结束。我们手动定义了节点的适当位置以显示数据流,并且还向节点1引入一个运动,以显示网络中的数据流的变化。 Tcl脚本包含第一次模拟的黑洞AODV,如附录A所示。(牙注:附录见最后

5.2.2 模拟评估

在没有黑洞AODV节点的第一种情况下,当我们使用NAM查看模拟的动画时,节点5和节点4之间的连接是正常的不连接,图19显示了从节点2到节点5的数据流。当节点1移动离开节点2的传播范围时,通过节点3建立了新的连接。新的连接路径如图20所示。

19 节点2和节点5通过节点1和节点6建立的数据流

19 节点2和节点5通过节点3和节点4建立的数据流

    在第二种情况下,注释掉Tcl脚本中的三个语句,如图21所示,我们可以轻松地将Black Hole行为添加到Node0中。第一个语句“$ ns node-config -adhocRouting blackholeAODV”是添加黑洞AODV行为到从此点创建的节点。 但是我们只将节点0定义为黑洞AODV,并且在节点0再次使用第三个语句之后,我们必须更改为AODV协议。 第二个声明只是向Node0发出通知,将其定义为黑洞节点。


图21 在Tcl脚本中创建和配置节点

节点0为黑洞AODV节点,它吸收从节点2到节点5的连接中的数据包。图22显示了黑洞AODV节点如何吸收流量。


图22 节点0(黑洞节点)吸收节点2到节点5的数据包

因为我们不能轻易地看到黑洞AODV Node在大量节点和连接中的影响,在实际的仿真中进行实验之前,我们必须在具有少量节点的小型模拟中测试实现。


5.3 黑洞攻击的测试

5.3.1 模拟参数和测量指标

在偶数节点(包括0(零))和奇数节点之间建立UDP连接,我们使用了20个节点,节点18和节点19没有连接到网络中的任何其他节点

在这些情况下,偶数节点(节点0 - 节点16)是发送节点,奇数节点(节点1 - 节点17)是接收节点,偶数节点将分组发送到下一个奇数节点,例如 节点0到节点1,节点2到节点3,节点4到节点5等等。我们可以对任何2个节点之间的发送和接收分组进行计数。我们将 UDP代理连接到偶数节点,并且NULL代理附加到奇数节点。

这个场景中,18个节点之间共有9个连接,并且所有这些连接总是位于相同的节点之间。 但是,在每种情况下,每个单个节点都被放置在不同的坐标上并且有着不同的运动表现,这有助于我们使用相同的节点得到不同的结果,。节点位置和移动由NS的第三方应用程序“./setdest”随机生成,并保存在模拟根目录的“/ scenario”目录中。 使用“./setdest”的参数命名每个场景,例如 “scen1forAODV-n20-t500-x750-y750”,“./setdest”应用程序会在750 x 750米的平面空间中,在500秒内,随机选择速度,从20个节点之间产生一个从随机起点移动到随机目的地的场景。

我们附加通过UDP连接生成常量数据包的CBR(常数比特率)应用程序。 场景的持续时间为500秒,CBR连接在场景的第一秒开始,持续到场景的450秒。在本实验中,CBR参数如下:

包大小:512bytes

数据速率:10Kbits

在这个仿真中,我们没有使用随机包。

连接类型由NS的第三方应用程序“./cbrgen”生成,并在模拟根目录的“/ scenario”目录中保存为名为“cbr”的文件。 附录A中注释的for循环将创建相同的cbr连接。

仿真中的节点由Tcl语言的“for”循环语句生成。 创建节点的这些语句如图23所示。第一个循环创建图24中配置的前19个节点。“$ ns_ node-config - adhocRouting blackholeAODV”语句将节点配置的路由协议更改为NS中实现的“blackholeAODV”。在这句语句后面的第二个循环创造了最后一个节点。改变“$ val(nnaodv)”变量,我们可以根据需要创建AODV和Black Hole AODV节点。

23 使用循环创建无线节点

24 无线节点配置

我们的模拟文件以其模拟数字和“BlackHole”定义命名,例如“sim1forBlackHole.tcl”用于模拟1.为了比较具有黑洞AODV节点的模拟与没有的模拟文件,我们更改了“ $ val(nnaodv)“变量为20,并在”$ ns_ node-config -adhocRouting blackholeAODV“语句前放置注释”#“,然后我们将Tcl脚本复制到同一目录中,用“AODV”更改”BlackHole“定义的文件名,例如“sim1forAODV.tcl”用于模拟1.黑洞AODV的第一个模拟文件的内容,如附录A所示。

5.3.2 检查跟踪文件并获取结果

我们从Tcl脚本的输出跟踪文件中获取模拟结果,该文件具有.tr扩展名。 跟踪文件包括模拟中的所有事件,例如发送数据包,哪个节点生成它们,哪个节点已经接收到那个类型的数据包被发送,如果它被丢弃为什么被丢弃等等。在我们的模拟中,我们使用特别用于无线网络的“new-trace”文件格式,并包括详细的事件信息。 新追踪文件示例如附录B所示。

为了从跟踪文件获得结果,我们只需要字段1中的事件种类,字段4中的节点id(-Ni)和跟踪级别(-Nl),字段5中的源地址,目标地址和数据包类型。要识别 以上来自跟踪文件的信息,我们使用UNIX的“cat”命令,并将其输出写入文件以供模拟的所有跟踪文件使用。 在所有输出中,我们只需要:

字段0中的事件信息的“s”值,以计算发送节点发送的CBR数据包数量

字段0中的事件信息的“r”值,以计算接收节点接收到的CBR数据包数量

node id”值为字段4中的节点id信息,用于发送节点或接收节点

“MAC”值在字段4中的跟踪级别信息,以过滤MAC级别(牙注:过滤mac级别是什么意思?)

字段5中的源地址和目的地地址信息的“源地址”和“目的地址”值,以计数从发送节点到接收节点的数据包。

cbr:字段5中的数据包类型,用于过滤cbr包(牙注:过滤cbr包是什么意思?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合之HashMap源码分析

以下源码均为jdk1.7 HashMap概述 HashMap是基于哈希表的Map接口的非同步实现. 提供所有可选的映射操作, 并允许使用null值和null健. 此类不保证映射的顺序. 需要注意的是: HashMap不是同步的. 哈希表 哈希表定义: 哈希表是一种根据关键码去寻找值的数据映射结构, 该结构通…

NS2相关学习——可靠的MANET应用程序的Gossip协议分析

好久不写,应该努力啦!老师把这篇论文给了我,现在还不知道它在讲什么,来边翻译边学习吧! 文章链接:https://www.researchgate.net/publication/316844643_Analyzing_Gossip_Protocols_for_Reliable_MANET_Ap…

Java集合之LinkedList源码分析

概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的位置, 只有在链表两头的…

lex和yacc环境配置

lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。 软件需求: 系统 win7-64位(win7-32, win8, win10全部通过) c编译器: vs2010(2008,2013,2015也全部通过) lex和yacc编译器&#xff1a…

Java集合之Vector源码分析

概述 Vector与ArrayLIst类似, 内部同样维护一个数组, Vector是线程安全的. 方法与ArrayList大体一致, 只是加上 synchronized 关键字, 保证线程安全, 下面就不具体分析源码了, 具体可以查看ArrayList中的源码分析. Vector源码分析 1.主要字段 2.构造函数 3.增删改查 其他方法…

Gossip协议的P2P会员管理

阅读此论文主要目的在于理解gossip协议及其背后的原理,此部分详细翻译,其余部分看时间 文章标题:Gossip协议的P2P会员管理 作者:Ayalvadi J. Ganesh, Anne-Marie Kermarrec, and Laurent Massoulie Abstract:基于…

Java集合之LinkedHashSet源码分析

概述 LinkedHashSet与HashSet类似, 不同的是LinkedHashSet底层使用LinkedHashMap维护元素插入的顺序. LinkedHashSet继承自HashSet, 只是重写了HashSet的构造方法, 初始化一个LinkedHashMap, 其他均与HashSet相同. LinkedHashSet构造方法 HashSet的构造方法: 以上几乎就是Li…

2016-2017NBU期末考试记录

又是一年期末考 这个学期考的少,就两门 还是来记录一下都考了什么东西吧 首先编译:编译的题目是开始十道判断题,后面全都是大题。大题内容有:画出第二次递归过程中,活动记录中静态链和动态链的情况;给出一…

Java集合之ArrayList源码分析

概述 ArrayList可以理解为动态数组, 根据MSDN的说法, 就是Array的复杂版本. 与数组相比, 它的容量能动态增长. ArrayList是List接口的可变数组的实现. 实现了所有可选列表操作, 允许包括null在内的所有元素. 数组的特点, 查询快增删慢. 每个ArrayList实例都有一个容量, 该容…

视频业务原理

最近要学习如何进行视频的用户体验测量,首先学习最基础的知识,视频业务的原理是什么。 研究的视频的应用层协议是HTTP,使用的传输层协议是TCP。 工作过程如下:客户端向服务器请求相应的视频信息;服务器响应请求发回视…

Java集合之Hashtable源码分析

概述 Hashtable也是基于哈希表实现的, 与map相似, 不过Hashtable是线程安全的, Hashtable不允许 key或value为null. 成员变量 Hashtable的数据结构和HashMap一样, 采用 数组加链表的方式实现. 几个成员变量与HashMap一样: 方法 Hashtable的方法与HashMap基本一样, 只是 Ha…

视频质量检测中的TP、FP、Reacll、Precision

在看论文《Measuring Vedio QoE from Encrypted Traffic》的时候看到TP(True Positives)、FP(False Positives)、Precison、Recall的概念,这属于数据挖掘方面的内容,学习之后特来记录。 首先,下…

Java集合之LinkedHashMap源码分析

概述 HashMap是无序的, 即put的顺序与遍历顺序不保证一样. LinkedHashMap是HashMap的一个子类, 它通过重写父类的相关方法, 实现自己的功能. 它保留插入的顺序. 如果需要输出和输入顺序相同时, 就选用此类. LinkedHashMap原理 LinkedHashMap是如何保证输入输出顺序的呢? L…

视频流传输协议RTP/RTCP/RTSP/HTTP的区别

在转载之前:我研究主要是基于HTTP的视频流,正在研读的论文名:“Modeling and Analyzing the Influence of Chunk Size Variation on Bitrate Adaptation in DASH”,里面有一句话,“Compared with early connection-ori…

Java集合之HashSet源码分析

概述 HashSet是基于HashMap来实现的, 底层采用HashMap的key来保存数据, 借此实现元素不重复, 因此HashSet的实现比较简单, 基本上的都是直接调用底层HashMap的相关方法来完成. HashSet的构造方法就是创建HashMap: 基本操作 1.添加操作 2.删除操作 3.迭代器 其他方法基本也是调…

三次握手wireshark抓包分析,成功握手和失败握手

转载之前:基于HTTP的视频流中,客户端有时会打开使用多条TCP与服务器连接,为了验证每一对话的sessionID是否相同,使用wireshark进行了抓包分析(抓到的都是加密的包,无卵用orz....),这…

Java 内部类及其原理

Java中实现内部类 内部类相信大家都用过很多次了,就不说它是怎么用的了。 内部类 1.成员内部类 需要注意的是, 当成员内部类拥有和外部类同名的成员变量或这方法时, 默认情况下访问的是内部类的成员, 如要访问外部类的同名成员&…

西游日记7/27

已经到第四天了,觉得需要写一些进展来督促一下自己。 早上8点钟左右到的实验室,将昨天没有回顾完的论文再次回顾一遍,又重新发现了一些点,确实,在完全明白之前,一篇好的论文是常读常新的。在吃午饭之前&am…

JVM 垃圾回收机制

首先JVM的内存结构包括五大区域: 程序计数器、虚拟机栈、本地方法栈、方法区、堆区。其中程序计数器、虚拟机栈和本地方法栈3个区域随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题。而Java堆区和方法区则不一样…

Modeling and Analyzing the Influence of Chunk Size Variation on Bitrate Adaptation in DASH 名字解释0728

在看“Modeling and Analyzing the Influence of Chunk Size Variation on Bitrate Adaptation in DASH”的时候遇到挺多的名词不是很明白,在这里做一下学习笔记(按照论文顺序)。 1、CDN server:“CDN将源站内容分发至最接近用户的…