一种控制开销受限的MAC层传输协议设计方法与流程

文档序号:16890685发布日期:2019-02-15 23:02阅读:300来源:国知局
一种控制开销受限的MAC层传输协议设计方法与流程

本发明属于通信领域,具体涉及一种适用于无线传感器网络的控制开销受限的mac层传输协议设计方法。



背景技术:

竞争型mac协议是根据信道的分配方式进行分类的一种mac协议。当无线节点需要发送数据时,主动抢占信道,当在其通信范围内的其它无线节点需要发送数据时,也会发起对无线信道的抢占,这就需要相应的机制来保证任一时刻在通信的区域内只能有一个无线节点获得信道的使用权。s-mac协议是由us/isi的weiye等人,在802.11mac协议基础上提出的一种基于竞争的无线传感器网络的mac协议。s-mac协议针对传感器网络降低能耗的需求,从三方面进行改进:采用周期性的睡眠和监听方式来减少能量损耗;采用串扰避免机制避免串扰数据包的接收;采用消息传递机制来减少控制数据带来的能量开销。相比于802.11,s-mac提高了网络的能效性,延长了网络的生命周期。

s-mac协议的访问机制大体如下:当网络中有数据发送需求时,源节点以广播的形式向邻居节点发送访问请求rts(requesttosend)报文对信道进行请求。邻居节点收到该消息后,若节点空闲则回复cts(cleartosend)报文,即两节点握手成功。源节点接收到cts后可以一次发送多帧数据,目的节点对数据进行错误校验,若存在不可恢复的错误则丢弃此帧,向源节点发送srq(selectiveautomaticrepeatrequest)报文,其中包括请求重发的帧序列号,源节点接收到srq报文后,重新发送被请求重发的数据帧,直到目的节点回复ack(acknowledgement)报文或者重发计数器超时。

对于无线传感器网络而言,由于传感器节点的能量有限,且大多数情况下电源不可替换,使得有限的能源制约着传感器节点的使用寿命。mac层协议通常从减小空闲监听、避免消息碰撞、减少串音、降低控制报文开销等方面进行能量优化。当节点能量耗尽,链路发生断路时,受影响的通信节点不得不重新建立链路,这很大程度上会引起网络的拥塞和网络生命周期的缩短。考虑一种极限情况,如果链路频繁断路,每次进行通信的时候都要反复执行握手过程,如此整个网络基本陷于瘫痪。因此,对于无线传感器网络而言,用尽可能少的控制开销来保证链路的可靠性和稳定性,对提高网络的能效性和延长网络的生命周期尤为关键。

相比其他的经典协议,s-mac在能量开销方面具有一定优势。s-mac采用周期性的睡眠和监听方式,网络中的节点使用相同的睡眠和唤醒方式,所有节点以相同的占空比进行工作,当节点处于睡眠状态时,会自动关闭射频收发器以节省能量。网络高负载时,侦听阶段得到充分利用,而低负载时,睡眠阶段更好的节省了能量。并且s-mac的消息传递机制通过rts/cts,data/ack的握手避免了消息的碰撞,有效减少了节点间的冲突。但是,对于链路可靠性要求较高,控制开销受限的无线传感器网络,s-mac协议不能通过有限控制开销的消息传递机制发现损坏节点并及时通知源节点更换发送路径,造成了数据的丢失,能量的浪费。



技术实现要素:

本发明的目的在于提供一种用于控制开销受限情况下无线传感器网络mac层传输协议的设计方法,该方法通过监听两跳通信范围内节点发送的报文信息检测中断链路的发生,及时修改路径决策,维护网络运行的可靠性。该方法有效地降低mac层传输协议的控制开销,能够在控制开销受限情况下,及时发现网络内的中断链路并修正路径决策,保证数据报文传输的可靠性。

本发明的目的是这样实现的:

一种控制开销受限的mac层传输协议设计方法,包括以下步骤:

(1)产生数据发送需求时,源节点初始化生成data报文;

(2)节点发送rts报文;

(3)下一跳节点接收rts报文;

(4)下一跳节点发送cts报文;

(5)上一跳节点接收cts报文;

(6)上一跳节点发送data报文;

(7)判断下一跳节点能否收到data报文,若不能则下一跳节点发送req报文,上一跳节点接收req报文后,重复步骤(2),否则执行步骤(8);

(8)下一跳节点接收到data报文后判断数据信息是否存在错误帧,若存在则下一跳节点发送srq报文,上一跳节点接收srq报文后,重复步骤(6),否则执行步骤(9);

(9)判断下一跳节点是否为目的节点,若不是则重复步骤(2),否则执行步骤(10);

(10)下一跳节点发送ack报文,上一跳节点接收ack报文,流程结束。

所述网络节点初始化生成data报文的处理过程具体步骤如下:

(1.1)初始化生成data报文

网络节点将监测收集到的原始数据信息初始化生成data报文,其中的srcid字段为源节点地址,设置为本地节点地址;destid字段为目的节点地址,根据数据信息发送需求决定;nexthopid字段为下一跳节点地址,根据查找自身路由表中到达目的地址的路由信息决定;packettype字段为data报文类型;packetid字段设置为报文信息缓存区中packetid最大值加1;hopcount字段设置为1,data为具体数据信息;继续执行步骤(1.2);

(1.2)将初始化生成的data报文信息存入自身报文信息缓存区,并发送rts报文预约信道发送该data报文,具体详见发送rts报文的处理过程,该处理过程结束。

所述网络节点发送rts报文的处理过程具体步骤如下:

(2.1)初始化rts报文

网络节点发送data报文前需要初始化生成信道预约请求rts报文,其中的destid字段为目的节点地址,设置为data报文的destid;nexthopid字段为下一跳节点地址,设置为data报文的下一跳节点地址;packettype字段为rts报文类型;packetid字段设置为data报文的packetid;hopcount字段设置为data报文的hopcount;将该步骤初始化生成的rts报文信息存入自身报文信息缓存区,并将该初始化生成的rts报文发送次数清零,继续执行步骤(2.2);

(2.2)发送rts报文

网络节点将rts报文广播发送给其通信覆盖范围内的其他网络节点,该rts报文发送次数累加器加1,并启动rts报文计时器开始计时,继续执行步骤(2.3);

(2.3)如果在rts报文计时器规定时间内成功接收到下一跳网络节点回复的cts报文,则继续执行网络节点接收cts报文的处理过程,该处理过程结束;否则需进一步判断该rts报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(2.2),否则继续执行步骤(2.4);

(2.4)在自身报文信息缓存区提取原rts报文信息,并重新生成新的信道预约请求rts报文,其中新rts报文的nexthopid字段根据查找自身路由表中到达目的地址的路由信息,选择与原rts报文中下一跳节点不同的节点地址;其他字段信息保持不变,并将新的rts报文信息存入自身报文信息缓存区,rts报文发送次数清零,执行步骤(2.2);

所述网络节点接收rts报文的处理过程具体步骤如下:

(3.1)判断发送该rts报文的节点是否为本地节点的下一跳网络节点

成功接收rts报文的网络节点根据destid以及packetid字段判断自身报文信息缓存区中是否存储对应的data报文并且该data报文的hopcount为接收到rts报文的hopcount-1,如果是,则说明下一跳中继节点已成功接收data报文,该处理过程结束;否则继续执行步骤(3.2);

(3.2)判断本地节点是否为该rts报文的下一跳网络节点

成功接收rts报文的网络节点判断本地节点地址与rts报文中的nexthopid是否不相同,如果是,直接丢弃该rts报文,该处理过程结束;否则将该rts报文信息存入自身报文信息缓存区,继续执行步骤(3.3);

(3.3)回复cts报文

初始化生成cts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送cts报文的处理过程,该处理过程结束。

所述网络节点发送cts报文的处理过程具体步骤如下:

(4.1)初始化cts报文

网络节点根据接收到的rts报文信息初始化生成cts报文,其中的destid字段为目的节点地址,设置为rts报文中的destid;packettype字段为cts报文类型;packetid字段设置为rts报文的packetid;hopcount字段设置为rts报文的hopcount+1,将该cts报文信息存入自身报文信息缓存区,报文发送次数清零,继续执行步骤(4.2);

(4.2)发送cts报文

网络节点将cts报文广播发送给其通信覆盖范围内的其他网络节点,该cts报文发送次数累加器加1,并启动cts报文计时器开始计时,继续执行步骤(4.3);

(4.3)如果在计时器规定时间内成功接收到上一跳网络节点发送的data报文,则继续执行网络节点接收data报文的处理过程,该处理过程结束;否则需进一步判断该cts报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(4.2),否则继续执行步骤(4.4);

(4.4)回复req报文

初始化生成req报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送req报文的处理过程,该处理过程结束;

所述网络节点接收cts报文的处理过程具体步骤如下:

(5.1)判断是否为此次路由中的上一跳节点

判断自身报文信息缓存区中存储rts报文的destid,packetid信息是否与接收到cts报文的destid,packetid信息相同,并且rts报文的hopcount值等于接收到cts报文的hopcount-1;如果满足上述判断条件,则继续执行步骤(5.2),否则直接删除该cts报文,该处理过程结束;

(5.2)判断与接收到cts报文对应的rts报文计时器是否超时,如果是,则直接删除该cts报文,该处理过程结束,否则继续执行步骤(5.3);

(5.3)发送data报文

网络节点根据接收到的cts报文中destid以及packetid字段信息将对应的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,该处理过程结束。

所述网络节点发送data报文的处理过程具体步骤如下:

(6.1)将data报文广播发送给其通信覆盖范围内的其他网络节点,该data报文发送次数累加器加1,并启动data报文计时器开始计时;

(6.2)如果在data报文计时器规定时间内接收到下一跳节点回复的srq报文、ack报文或监听到下一跳节点发送的rts报文,该处理过程结束,否则执行步骤(6.3);其中srq报文具体详见接收srq报文的处理过程,ack报文具体详见接收ack报文的处理过程,rts报文具体详见接收rts报文的处理过程;

(6.3)判断该data报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(6.1);否则重新在路由表中选择新的下一跳节点,更新对应data报文中的nexthopid字段信息后,重新初始化生成新的rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,该处理过程结束;

所述网络节点接收data报文的处理过程具体步骤如下:

(7.1)判断本地节点是否为data报文的下一跳网络节点

接收到data报文的节点判断自身节点地址是否与data报文中的nexthopid字段或者destid字段信息都不相同,如果是,直接丢弃该data报文,该处理过程结束;否则继续执行步骤(7.2);

(7.2)判断是否存在与该data报文对应的srq报文计时器,如果不存在,继续执行步骤(7.3);反之,则需再判断与该data报文对应的srq报文计时器是否超时,如果与该data报文对应的srq报文计时器超时,直接删除该data报文,该处理过程结束,否则直接执行步骤(7.4);

(7.3)判断与接收到data报文对应的cts报文计时器是否超时,如果是,则直接删除该data报文,该处理过程结束,否则继续执行步骤(7.4);

(7.4)校验data报文中的数据信息

判断data报文中的数据信息是否不存在错误帧,如果是,则重新生成新的data报文,其中新data报文的nexthopid字段根据查找自身路由表中到达目的地址的路由信息决定,hopcount设置为原data报文的hopcount+1;其他字段信息保持不变,并将新的data报文信息存入自身报文信息缓存区,继续执行步骤(7.5);否则丢弃错误帧数据,初始化生成srq报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送srq报文的处理过程,该处理过程结束;

(7.5)判断节点是否为data报文的目的节点

判断自身节点地址与data报文中的destid字段内容是否不相同,如果是,初始化生成rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,该处理过程结束;否则初始化生成ack报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送ack报文的处理过程,该处理过程结束。

所述网络节点发送req报文的处理过程具体步骤如下:

(8.1)初始化req报文

网络节点根据cts报文信息初始化生成req报文,其中的destid字段为目的节点地址,设置为cts报文中的destid;packettype字段为req报文类型;packetid字段设置为cts报文的packetid;hopcount字段设置为cts报文的hopcount,将该req报文信息存入自身报文信息缓存区,继续执行步骤(8.2);

(8.2)发送req报文

网络节点将生成的req报文广播发送给其通信覆盖范围内的其他网络节点,该处理过程结束;

所述网络节点接收req报文的处理过程具体步骤如下:

(9.1)判断是否第一次接收到该req报文

网络节点根据destid、packettype及packetid字段内容查找自身报文信息缓存区中是否存有与其对应的req报文信息,如果是,丢弃该req报文,该处理过程结束;否则将req报文信息存到自身报文信息缓存区后,继续执行步骤(9.2);

(9.2)判断是否为此次路由中断节点的上一跳节点

网络节点根据destid以及packetid字段判断自身报文信息缓存区中是否存储对应的rts报文并且该rts报文的hopcount为req报文的hopcount-2,如果是,根据destid信息在路由表中选择新的下一跳节点,更新对应data报文中的nexthopid字段信息后,重新初始化生成新的rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,该处理过程结束;否则将该req报文转发给其通信覆盖范围内的其他网络节点,该处理过程结束。

所述网络节点发送srq报文的处理过程具体步骤如下:

(10.1)初始化srq报文

初始化生成srq报文,其中的destid字段为目的节点地址,设置为data报文中的destid;packettype字段为srq报文类型;packetid字段设置为data报文的packetid;hopcount字段设置为data报文的hopcount;frameid字段为需要重发的数据帧id,继续执行步骤(10.2);

(10.2)发送srq报文

网络节点将生成的srq报文广播发送给其通信覆盖范围内的其他网络节点,该srq报文发送次数累加器加1,并启动srq报文计时器开始计时,继续执行步骤(10.3);

(10.3)如果在srq报文计时器规定时间内接收到上一跳重新发送的data报文,则继续执行网络节点接收data报文的处理过程,该处理过程结束;否则继续执行步骤(10.4);

(10.4)判断该srq报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(10.2);否则初始化生成req报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送req报文的处理过程,该处理过程结束;

所述网络节点接收srq报文的处理过程具体步骤如下:

(11.1)判断是否为此次路由中的上一跳节点

网络节点根据接收到的srq报文中的destid,packetid信息,判断自身报文信息缓存区中是否有与其对应的data报文,并且data报文的hopcount等于接收到该srq报文的hopcount-1,如果满足上述判断条件,继续执行步骤(11.2);否则直接删除该srq报文,该处理过程结束;

(11.2)判断与该srq报文对应的data报文计时器是否超时,如果是,直接删除该srq报文,该处理过程结束;否则重新生成data报文,其中的data字段为srq报文中frameid指定的数据帧,其他字段信息保持不变,并将该新生成的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,该处理过程结束。

所述网络节点发送ack报文的处理过程具体步骤如下:

(12.1)初始化ack报文

网络节点初始化生成ack报文,其中的destid字段为目的节点地址,设置为data报文的destid;packettype为ack报文类型;packetid字段设置为data报文的packetid;hopcount字段设置为data报文的hopcount,继续执行步骤(12.2);

(12.2)发送ack报文

将生成的ack报文广播发送给其通信覆盖范围内的其他网络节点,该处理过程结束;

所述网络节点接收ack报文的处理过程具体步骤如下:

(13.1)判断是否为此次路由中的上一跳节点

网络节点根据接收到的ack报文中的destid,packetid信息,判断自身报文信息缓存区中是否有与其对应的data报文,并且data报文的hopcount等于接收到该ack报文的hopcount-1;如果满足上述判断条件,继续执行步骤(13.2);否则直接删除该ack报文,该处理过程结束;

(13.2)判断与该ack报文对应的data报文计时器是否超时,如果是,需重新将与其对应的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,并删除该ack报文,该处理过程结束;否则说明与其对应的data报文成功被目的节点接收,该处理过程结束。

本发明的有益效果在于:

本发明提出的适用于控制开销受限情况下无线传感器网络mac层传输协议的设计方法,通过监听下一跳节点发送的信道预约请求rts报文以及下二跳节点的req报文判断自身报文传输的正确性,从而及时调整更改路径信息以解决失效中继节点的规避、中断传输链路的修复问题;该协议的设计方法在有限的控制开销内,未增加额外的控制报文字段,有效避免因传输链路失效所导致的网络拥塞甚至瘫痪,从而增强了报文传输链路的鲁棒性,提高了网络的生命周期,使之更加适应无线传感器组网要求。

附图说明

图1为rts报文数据格式;

图2为cts报文数据格式;

图3为req报文数据格式;

图4为data报文数据格式;

图5为srq报文数据格式;

图6为ack报文数据格式;

图7为实施例网络拓扑示意图;

图8为初始化生成data报文的处理过程流程图;

图9为发送rts报文的处理过程流程图;

图10为接收rts报文的处理过程流程图;

图11为发送cts报文的处理过程流程图;

图12为接收cts报文的处理过程流程图;

图13为发送req报文的处理过程流程图;

图14为接收req报文的处理过程流程图;

图15为发送data报文的处理过程流程图;

图16为接收data报文的处理过程流程图;

图17为发送srq报文的处理过程流程图;

图18为接收srq报文的处理过程流程图;

图19为发送ack报文的处理过程流程图;

图20为接收ack报文的处理过程流程图;

图21为控制开销受限的mac层传输协议总流程图。

具体实施方式

下面举例对本发明做进一步详细说明。

本专利涉及图1至图6六种报文数据格式,其中网络节点的id字段包括sourceid、destid和nexthopid,由网络的规模决定,假定m为网络拓扑中的节点个数,则为表示m个节点所需最少二进制位数;packettype字段由报文种类数决定,六种报文格式只需要3bit数据位即可;packetid根据网络数据发送量决定,本专利中4bit的packetid足以说明该专利的优点;hopcount设置为4bit是认为对于一般网络规模而言,4bit已足够使用,这与经典的rip路由协议相一致。如果与网络规模不相配,该值可以进行适当调整;data字段由具体发送的数据决定;frameid字段由需要重新发送的数据帧决定。

具体实施所依据的实施例网络拓扑结构如图7所示,图中的方框表示网络节点并在旁边用对应字母唯一标识,虚线圆圈表示节点通信范围,相同颜色的方框和虚线圆圈表示该节点对应的通信范围,如s节点及其通信范围用红色方框和红色虚线圆圈表示,其余各节点情况与之相似。

图8至图21用流程图的形式阐释了专利的整个过程,其中图8表明了data报文初始化生成的处理过程,图9至图20分别表示了六类数据报文的收发处理流程,最后图21对mac层传输协议的整体流程进行了概括总结。

图7为具体实施例网络拓扑,虚线圆表示各节点的通信范围,由此可知ae节点为s节点的邻居节点,sb节点为a节点的邻居节点,ade节点为b节点的邻居节点,b节点为d节点的邻居节点,sb为e节点的邻居节点。当网络节点s有数据报文需要发送给网络节点d时,假使数据报文沿s→a→b→d路径传输,s→a阶段成功接收数据报文,a→b阶段传输时a节点损坏,从而更换路径s→e→b→d传输,下面结合图21对本发明详细描述。

(1)s→a阶段

参照网络节点初始化生成data报文处理过程的步骤(1.1):初始化生成data报文

网络节点s有数据发送需求时,将监测收集到的原始数据信息初始化生成data报文,其中srcid为s节点地址,其中destid为d节点地址,nexthopid为a节点地址,packettype为data报文类型,packetid为此次s→a→b→d报文id号,hopcount为1,data为具体数据信息。继续执行步骤(1.2)。

参照网络节点初始化生成data报文处理过程的步骤(1.2):s节点将初始化生成的data报文信息存入自身报文信息缓存区,该处理过程结束。

参照网络节点发送rts报文处理过程的步骤(2.1):初始化rts报文

网络节点s初始化rts报文,其中destid为d节点地址,nexthopid为a节点地址,packettype为rts报文类型,packetid为此次s→a→b→d报文id号,hopcount为1。之后s节点将此rts报文存入本地缓存区,并将该初始化生成的rts报文发送次数清零,继续执行步骤(2.2)。

参照网络节点发送rts报文处理过程的步骤(2.2):发送rts报文

s节点将rts报文向周围邻居节点广播发出,该rts报文发送次数累加器加1,并启动rts报文计时器开始计时,继续执行步骤(2.3)。

参照网络节点发送rts报文处理过程的步骤(2.3):如果在计时器规定的时间内,s节点收到a节点回复的cts报文,则继续执行网络节点接收cts报文的处理过程,具体详见接收cts报文的处理过程,否则进一步判断该rts报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(2.2),否则继续执行步骤(2.4)。

参照网络节点发送rts报文处理过程的步骤(2.4):在自身报文信息缓存区提取原rts报文信息,并重新生成新的信道预约请求rts报文。其中新rts报文的nexthopid为e节点地址;其他字段信息保持不变,并将新的rts报文信息存入自身报文信息缓存区,rts报文发送次数清零,执行步骤(2.2)。

参照网络节点接收rts报文处理过程的步骤(3.1):判断发送该rts报文的节点是否为本地节点的下一跳网络节点

s节点广播rts报文后,ae节点都能收到此rts报文。根据rts报文的destid以及packetid字段判断自身报文信息缓存区中是否存储对应的data报文并且该data报文的hopcount为接收到rts报文的hopcount-1,a节点和e节点均不满足条件继续执行步骤(3.2)。

参照网络节点接收rts报文处理过程的步骤(3.2):判断本地节点是否为该rts报文的下一跳网络节点

a节点和e节点将rts报文中的nexthopid与本地节点地址对比,e节点不相同,则直接丢弃该rts报文,处理过程结束;a节点相同,则将该rts报文信息存入自身报文信息缓存区,继续执行步骤(3.3)。

参照网络节点接收rts报文处理过程的步骤(3.3):回复cts报文

a节点初始化生成cts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送cts报文的处理过程,该处理过程结束。

参照网络节点发送cts报文处理过程的步骤(4.1):初始化cts报文

a节点初始化cts报文,其中destid为d节点地址,packettype为cts报文类型,packetid为此次s→a→b→d报文id号,hopcount为2。a节点将此cts报文存入自身报文信息缓存区,报文发送次数清零,继续执行步骤(4.2)。

参照网络节点发送cts报文处理过程的步骤(4.2):发送cts报文

a节点将生成的cts报文广播发送给其通信覆盖范围内的其他网络节点,cts报文发送次数加1,并启动cts报文计时器开始计时,继续执行步骤(4.3)。

参照网络节点发送cts报文处理过程的步骤(4.3):如果在计时器规定的时间内,a节点收到s节点回复的data报文,则继续执行网络节点接收data报文的处理过程,具体详见接收data报文的处理过程,否则进一步判断该cts报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(4.2),否则继续执行步骤(4.4)。

参照网络节点发送cts报文处理过程的步骤(4.4):回复req报文

a节点初始化生成req报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送req报文的处理过程,该处理过程结束。

参照网络节点接收cts报文处理过程的步骤(5.1):判断是否为此次路由中的上一跳节点

a节点广播cts报文后,bs节点都能收到cts报文。bs节点比较自身报文信息缓存区中的rts报文的destid,packetid是否与cts报文的destid,packetid相同,并且rts报文的hopcount值等于接收到cts报文的hopcount-1。其中s节点满足条件,继续执行步骤(5.2),b节点不相同,直接删除该cts报文,处理过程结束。

参照网络节点接收cts报文处理过程的步骤(5.2):s节点判断计时器是否超时,如果超时,则直接删除该cts报文,s节点重新选择e节点并发送rts报文对信道进行预约请求,具体详见发送rts报文的处理过程。如果未超时,则继续执行步骤(5.3)。

参照网络节点接收cts报文处理过程的步骤(5.3):发送data报文

s节点根据接收到的cts报文中destid以及packetid字段信息将对应的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,该处理过程结束。

参照网络节点发送data报文处理过程的步骤(6.1):s节点将data报文广播发送给其通信覆盖范围内的其他网络节点,该data报文发送次数累加器加1,并启动data报文计时器开始计时。

参照网络节点发送data报文处理过程的步骤(6.2):如果s节点在data报文计时器规定时间内接收到下一跳节点回复的srq报文、ack报文或监听到下一跳节点发送的rts报文,该处理过程结束;否则执行步骤(6.3)。其中srq报文具体详见接收srq报文的处理过程,ack报文具体详见接收ack报文的处理过程,rts报文具体详见接收rts报文的处理过程。

参照网络节点发送data报文处理过程的步骤(6.3):s节点判断该data报文发送次数是否不大于最大报文发送次数,如果是,随机退避等待时间后执行步骤(6.1);否则重新在路由表中选择e为下一跳节点,更新对应data报文中的nexthopid字段信息后,重新初始化生成新的rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,该处理过程结束。

参照网络节点接收data报文处理过程的步骤(7.1):判断节点是否为data报文的下一跳网络节点

s节点广播data报文后,ae节点都能收到此data报文。各节点将data报文中的nexthopid与本地节点地址对比,e节点不相同,则直接丢弃该data报文,处理过程结束;a节点相同,则继续执行步骤(7.2)。

参照网络节点接收data报文处理过程的步骤(7.2):a节点接收到data报文后,判断是否存在与之对应的srq报文计时器,如果不存在,继续执行步骤(7.3);反之,则需再判断与该data报文对应的srq报文计时器是否超时。如果与该data报文对应的srq报文计时器超时,直接删除该data报文,该处理过程结束,否则直接执行步骤(7.4)。

参照网络节点接收data报文处理过程的步骤(7.3):a节点判断与接收到data报文对应的cts报文计时器是否超时,如果是,则直接删除该data报文,该处理过程结束,否则继续执行步骤(7.4)。

参照网络节点接收data报文处理过程的步骤(7.4):校验data报文中的数据信息

判断data报文中的数据信息是否不存在错误帧,如果是,则重新生成新的data报文。其中新data报文的nexthopid字段根据查找自身路由表中到达目的地址的路由信息决定,根据假设设置nexthopid为b节点地址,hopcount设置为原data报文的hopcount+1即为2;其他字段信息保持不变,并将新的data报文信息存入自身报文信息缓存区,则继续执行步骤(7.5),否则丢弃此帧数据,a节点初始化生成srq报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送srq报文的处理过程,该处理过程结束。

参照网络节点接收data报文处理过程的步骤(7.5):判断节点是否为data报文的目的节点

a节点接收到的data报文的destid为d节点地址与a节点地址不同,因此a节点初始化生成rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,处理过程结束。

参照网络节点发送srq报文处理过程的步骤(10.1):初始化srq报文

a节点收到的data报文存在不可恢复的错误,初始化生成srq报文,其中destid为d节点地址,packettype为srq报文类型,packetid为此次s→a→b→d报文id号,hopcount为2,frameid为需要重发的数据帧,继续执行步骤(10.2)。

参照网络节点发送srq报文处理过程的步骤(10.2):发送srq报文

a节点将生成的srq报文广播发送给其通讯范围内的其他网络节点,srq报文次数加1,并启动srq报文计时器,继续执行步骤(10.3)。

参照网络节点发送srq报文处理过程的步骤(10.3):a节点如果在计时器规定时间内成功接收到s回复的data报文,则继续执行网络节点接收data报文的处理过程,具体详见接收data报文的处理过程;否则继续执行步骤(10.4)。

参照网络节点发送srq报文处理过程的步骤(10.4):a节点进一步判断发送报文次数是否不大于最大报文发送次数,如果是,则随机退避一段时间,继续执行步骤(10.2);否则a节点初始化生成req报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送req报文的处理过程,该处理过程结束。

参照网络节点接收srq报文的处理过程的步骤(11.1):判断节点是否为此次路由中的上一跳节点

a节点广播srq报文后,sb节点都能收到该srq报文。sb节点比较本地缓存的data报文的destid,packetid是否与srq报文的destid,packetid相同,并且data报文中的hopcount值等于接收到srq报文的hopcount-1。其中s节点满足条件,继续执行步骤(11.2),b节点均不满足,直接删除该srq报文,处理过程结束。

参照网络节点接收srq报文的处理过程的步骤(11.2):s节点首先判断计时器是否超时,如果超时,则直接删除该srq报文,该处理过程结束。否则重新生成data报文,其中的data字段为srq报文中frameid指定的数据帧,并将该新生成的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,该处理过程结束。

(2)a→b阶段

该阶段的传输过程与s→a阶段的步骤大致相同,但是当b节点不能在计时器规定时间和最大发送次数之内成功收到a节点发送的data报文时,则认为中继节点a发生损坏,b节点需要广播发送req报文通知s节点更换传输路径,具体步骤如下:

参照网络节点发送req报文处理过程的步骤(8.1):初始化req报文

b节点将cts报文广播发出后未收到a节点发送的data报文,说明a节点可能已经损坏,应当通知s节点更换链路,选择e节点进行数据传输。b节点初始化req报文,其中destid为d节点地址,packettype为req报文类型,packetid为此次s→a→b→d报文id号,hopcount为3,并将该req报文信息存入自身报文信息缓存区,继续执行步骤(8.2)。

参照网络节点发送req报文处理过程的步骤(8.2):发送req报文

节点b初始化生成req报文并将其广播发送给其通信覆盖范围内的其他网络节点,该处理过程结束。

参照网络节点接收req报文处理过程的步骤(9.1):判断节点是否第一次接收到该req报文

在req报文到达这些邻居节点后,邻居节点判断本地的destid,packettype,packetid是否与req报文中的destid,packettype,packetid相同,如果相同,则丢弃该req报文,处理过程结束。如果不相同,将该req报文信息存到自身报文信息缓存区,继续执行步骤(9.2)。

参照网络节点接收req报文处理过程的步骤(9.2):判断是否为此次路由中断节点的上一跳节点

节点第一次接收到req报文后,判断是否存储对应的rts报文并且该rts报文的hopcount是否为req报文的hopcount-2,如果不是,则继续向其邻居节点发送req,继续执行步骤(9.1),如果是,根据destid信息在路由表中选择新的下一跳节点,更新对应data报文中的nexthopid字段信息后,重新初始化生成新的rts报文并将其广播发送给其通信覆盖范围内的其他网络节点,具体详见发送rts报文的处理过程,该处理过程结束。在本例中,a节点损坏,de节点第一次接收到该req报文并且hopcount不等于req报文的hopcount-2,因此继续向各自的邻居节点转发该req报文,其中d节点向b转发req报文,e节点向bs节点转发req报文,b第二次收到该req报文,因此直接丢弃该req报文,处理过程结束。只有当e节点将req报文发送给s节点时,s节点的hopcount等于req报文的hopcount-2,所以s节点将重新初始化rts报文并发送给e节点,使原路径s→a→b→d变为s→e→b→d,相应地,各报文的nexthopid和packetid也将发生变化。

(3)b→d阶段

该阶段的传输过程与a→b阶段的步骤大致相同,但是因为d节点为最终的目的节点,所以这一阶段将以ack报文的发送和接收为特征,以表明数据报文的成功接收,具体步骤如下:

参照网络节点发送ack报文处理过程的步骤(12.1):初始化ack报文

d节点网络节点初始化生成ack报文,其中的destid字段为d节点地址,packettype为ack报文类型;packetid字段设置为为此次s→e→b→d报文id号;hopcount为4,继续执行步骤(12.2)。

参照网络节点发送ack报文处理过程的步骤(12.2):发送ack报文

d节点将生成的ack报文广播发送给其通信覆盖范围内的其他网络节点,该处理过程结束。

参照网络节点接收ack报文处理过程的步骤(13.1):判断是否为此次路由中的上一跳节点

d节点将ack报文广播发出后,b节点根据接收到的ack报文中的destid,packetid信息,判断自身报文信息缓存区中是否有与其对应的data报文,并且data报文的hopcount等于接收到该ack报文的hopcount-1。b节点满足上述判断条件,继续执行步骤(13.2)。

参照网络节点接收ack报文处理过程的步骤(13.2):b节点判断与该ack报文对应的data报文计时器是否超时,如果是,需重新将与其对应的data报文广播发送给其通信覆盖范围内的其他网络节点,具体详见发送data报文的处理过程,并删除该ack报文,该处理过程结束;否则与其对应的data报文成功被目的节点接收,该处理过程结束。

通过上述实施例的详细描述,本发明在有限的控制开销内,通过req报文通知该路由中损坏节点a的上一跳节点s重新选择路径s→e→b→d,从而实现了对损坏中继节点a的有效规避,增强了链路的鲁棒性,提高了网络的生命周期。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1