Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
rrpp协议_网络协议三要素,希望能够帮助你!!!。
RPL (Routing Protocol for low - power and Lossy Networks)是一种低功耗、易丢包的无线网络路由协议。它是一种基于距离向量的主动协议,运行在IEEE 802.15.4和上,为多跳和多对一通信进行了优化,但也支持一对一的消息。
RPL协议中有关键的三种控制用数据报文,分别是DAO,DIO,DIS。而RPL协议下构成的网络呈现有向无循环图的样式,其中每个拓扑的一个子域被称为DODAG。在这个树图中,与根节点最近的一级秩为1,然后逐层递加。
如上图所示,DAG可以构造为一个树图,其中根节点具有最大的路由表,知道整个RPL网络中的各地路由路径与评估方法。
控制数据包 | 作用 |
---|---|
DIS | 当一个网络即将形成之前,网络还不存在拓扑结构,但是已经选定了根节点(根节点很多种选择方式),此时根节点会向整个网络中的邻居节点发送DIS数据包,并请求将它们的信息告诉自己。 |
DIO | 当某节点收到了DIS请求,则会回复DIO数据包告知对方自己节点的信息。包括自己的物理地址、Rank(秩)、节点类型等 |
DAO | 用于进行一对一的请求,请求某一个就具体目标,这个目标是它的唯一的父节点。当存在复数个可以称为父节点的节点存在时,需要通过算法最终选择一个最佳节点并作为父节点,然后传送DAO。DAO用于通知父节点自己已更新完路由表,并准备好提供服务,当所有节点的DAO汇聚于根节点,则网络拓扑完成。 |
因此,整个组网过程就是由根节点进行DIS广播,然后所有节点回复DIO,中继节点以此过程开始确认父节点,最终形成一个DAG。而每一个父节点下的小树状图都称为DODAG。
由于这是一个网络拓扑结构,因此,所有的攻击基于计算机网络的一些原理。
Hello-Flood
:是一种类似TCP、IP的SYN或Land攻击的一种。某恶意节点收到DIS报文后,会持续不断向根发送当前节点的DIO报文。这会导致根节点不断地处理这些DIO数据,并且计算对应的秩和距离,但是这种计算是冗余的。这是一种浪费计算机资源的攻击方式,因为中继节点与根节点都在处理大量的无用信息。
版本号攻击
:当网络出现变动,如某条链路不能工作或某路由器故障,甚至某节点新加入网络,都需要更新当前拓扑结构以及路由表。更新后整个网络的版本号会增加且不可逆。而攻击者利用某些微小的变动或恶意的变动,就会导致网络一直更新,版本号一直增加。网络更新需要消耗整个网络中的计算资源与时间,会对网络整体造成很大的效率影响。
恶意攻击包括且不限于以下几种形式:
天坑攻击
:天坑攻击是指某些节点篡改自己的秩(Rank)。由于在这种DAG的结构中,RANK决定了分级,对于RPL网络就是决定了网络中的路由表,这会导致路由重定向和更新路由表的情况发生,与此同时,由于更改了RANK导致原本正在传输的数据因路由路径问题大量丢包,进而形成了接收端接收信息不完全、无法还原数据整体,无法对接收到的数据解码等一系列问题。根据路由路径的选择不同,可能会有更多数据流经恶意节点,恶意节点也有更多的机会进行附加操作。
黑洞攻击
: 这是一种人为的对DODAG再生的利用。当某路径丢失的时候,会根据节点间的距离,节点之间的状态,和能量级别等诸多因素形成一个新的DODAG。这种情况下,每次丢包结束都会形成新的DODAG,这是最大限度增加网络节点的计算开销和资源消耗。这是一种刻意控制丢包来阻断网络效率,进而阻断服务的一种攻击方式。
一般而言攻击是无法中断的,只有未发生和已发生两种状态。我们能做的是尽可能监控网络中的数据流量,有异常时对其进行排查,确认是否属于恶意攻击,如果是则我们尝试处理这种恶意攻击(一般是撤销它在网络中的地位或者已经认证的行为,但是无法阻断正在进行的行为,如转发数据)
那么对于上述四种攻击,我们有一个比较简单的阈值来逐层判定它们是否是恶意攻击。如果满足所有的阈值条件,则被认定为恶意攻击。并采取相应的撤销操作。
检测网络中DIS与DIO数据报文的数量,当且仅当
C o u n t : D I S > D I O Count:DIS>DIO Count:DIS>DIO
则说明即将形成新的DAG,此时判断
T i m e : D I S < D A O A C K ( A v g ) Time: DIS<DAO_{ACK}(Avg) Time:DIS<DAOACK(Avg)
出现异常,DAO的反应时间过长说明在DODAG生成上花了过多时间。此时撤销本次DIS,并进一步对恶意场景进行筛选
如果DIO的最大间隔时间大于DAO的ACK平均时间且DIS的长度比平均DIO数据包长。则判定为HF攻击
DAO包的数量要大于当前版本号,不然不需要更新。当有更新行为发生时,测量DIO的最大长度和数据 平均长度,如果数据长度比DIO这种控制数据很要小,说明有问题 ,此时计算DIO的平均时间和数据包的间隔时间,如果数据间隔时间更长则说明是恶意攻击,舍弃当前版本更新的请求。
检测自己的Rank和父节点的RANK,如果自己的级别更高,则比较DIO和最大长度和DAO-ACK的最大长度,如果DAO-ACK更长,则计算DAO-ACK的平均时间和DAO的最大间隔时间,如果平均ACK时间更长,则说明是天坑攻击,舍弃本次DIO报文。
检测自己的Rank和上一级的最小RANK节点,如果自己的RANK更大,则计算最大的DAO时间和平均DAO-ACK时间,如果DIO包的最大长度大于DAO-ACK,则找一个rank-1级的节点,用这个节点发一个最短的数据报文,如果接受时间比发送时间长,则正常。否则检查数据的平均到达时间和最小到达时间,如果最小大大事件比最大的DAO时间还要小,则说明这是一个恶意节点,此时我们标记他并丢弃他所有的DIO包。并尝试选择新的合适的节点作为转发节点。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章