多跳传感器网络如何配置X-MAC实现先路由发现再发送前导码
X-MAC搭配AODV路由无效前导码问题解决方案
该问题的核心原因是X-MAC协议默认在MAC层收到数据包后就立即启动前导码发送流程,不会感知网络层的路由就绪状态,而CSMA/CA本身没有预发前导码的设计,网络层会在路由建立完成后才将数据包下发到MAC层,因此不会出现无效发送。仅开启Hello消息只能加快路由发现速度,不会阻止路由建立前的前导码发送,可通过以下几种方案解决:
方案1:配置应用层启动延迟(无需修改源码)
通过推迟应用层数据生成时间,给路由层预留足够的时间完成Hello交互和路由收敛,从源头避免路由建立前产生需要发送的数据包。在omnetpp.ini中添加以下配置:
# 按网络规模调整延迟时长,中小规模网络10~30s即可完成全网路由收敛 **.app[*].startTime = 30s # 保留Hello消息配置,辅助路由快速建立 **.useHelloMessages = true **.aodv.helloInterval = 1s
方案2:修改X-MAC逻辑绑定路由状态(严格满足需求)
如果需要严格实现"路由建立完成后才允许MAC层发送前导码"的逻辑,需要对X-MAC源码做少量调整:
- 在X-MAC模块中新增网络层路由状态查询接口,可获取指定目的地址的路由是否可用
- 修改X-MAC前导码触发逻辑,仅当对应目的地址的路由就绪时,才启动前导码发送流程,否则将数据包暂存在MAC队列中等待路由更新
- 监听AODV的路由更新通知,当路由建立完成后主动触发暂存数据包的发送
搭配以下ini配置避免暂存数据包丢包:
**.mac.maxQueueSize = 50
方案3:开启路由预建立(应用层不能延迟启动时使用)
如果仿真场景要求应用层不能推迟启动,可开启AODV预路由功能,在仿真初始化阶段就完成全网路由建立,配置如下:
# 开启AODV预路由,仿真启动后先完成所有节点的路由发现再运行业务 **.aodv.preRouting = true **.aodv.preRoutingTime = 20s # 配置X-MAC优先处理路由控制包,预路由阶段不触发业务数据的前导码发送 **.mac.controlPacketPriority = true
内容的提问来源于stack exchange,提问作者11187162
相关产品推荐
相关产品推荐

