串口转WiFi在工业控制领域广泛的应用,工业控制领域通常距离比较远环境比较复杂。所以就有超远距离通讯的需求,通常我们使用多跳的方式实现WiFi远距离传输。即如果实现远距离的A与C进行通讯,我们可以在A与C之间增加一个模块B,这样,B充担中继的作用。以下以simpleWiFi的S2W-M02以及S2W-M03中所实现的多跳机制进行描述。S2WM02、S2WM03已经稳定的运用到了很多超长距离通讯环境,该算法稳定性以及大量现场验证。并且该系列串口转WiFi模块可以实现2串口、双串口、3串口和多串口的通讯,各个通讯相互完全独立,可以同时支持多个串口设备进行数据通讯。
本节主要描述多跳路由算法:
1、协议概述
1.1.1 协议概述
该多跳路由实际上是 DSR和 DSDV的综合,以 DSDV为基础,采用DSR中的按需路由思想进行改进。它采用了DSR中路由发现和路由维护的原理,结合了DSDV的逐跳(hop-by-hop)路由,顺序编号和路由维护阶段的周期更新机制。与DSDV保存完整的路由表不同的是,基于按需路由思想的多跳路由只有在有需要的时候才建立路由,这与DSDV相比的好处是能减少大量维护路由所需的开销。与DSR相比,多跳路由的优势在于源路由并不需要包括在每一个数据分组中,这样能减少路由协议的开销。多跳路由协议可以实现在移动终端动态的、自发的路由,使移动终端很快的获得通向所需目的地的路由,而且不用维护当前没有使用的路由信息,还能对链路状态和拓扑的变化做出快速的反应。多跳路由使用路由请求序列号来保证无环路。避免了通常 Bellman-foul 算法的无穷计数(count-to-infinite)的问题,并且提供了很快的收敛速度。鉴于多跳路由路由协议功能强大而又便于实现的优点,故其成为嵌入式系统下UART 转WiFi 路由协议的首选。
图 1 RREQ帧格式
图 2 RREP帧格式
路由请求分组RREQ的转发过程类似于DSR协议。简单描述如下:收到“路由请求”分组的节点,在路由表中设置反向路径表项指向源节点。目的是使RREP分组能够返回源节点。当目标节点接到RREQ 分组时,它就发送RREP分组。RREP分组沿着反向路径(RREQ分组经过时形成的路径的反方向)到达源节点。
1.1.1 路由发现过程
(1)结点在需要时(路径不存在或者无效),向其邻居广播RREQ分组用于路由发现。
(2)对接收到RREQ的结点作如下处理:
创建一个表项,用于记录反向路径;
如果在“路由发现定时”内已收到一个具有相同标识的RREQ分组,则抛弃该分组,不作任何处理;否则,更新该反向路由表项;
如果满足如下两个条件:
①:该结点就是信宿;
②:结点的路由表中有到信宿的活动表项,且表项的序列号大于RREQ中的信宿序列号;
则结点产生“路由回答分组”RREP,并发送到信源;否则,更新RREQ分组,并广播更新后的RREQ分组 。
(3)RREP的传播:RREP中的内容包括:跳计数、信宿序列号、信宿地址、信源地址、生存时间等。结点通过前面建立的反向路由反馈给源结点,并且是以单播方式发送;
(4)转发RREP的中间结点会更新路由表,记录转发路由的下游结点、跳数、生存时间、目的序列号等内容,并根据先前记录的反向路由将RREP报文转发给上游结点,直至源结点;
(5)源结点收到RREP报文后,就获得了到目的结点的路由,接下来,源结点就可以用该路由进行数据报文的发送了。
上述算法已经大量的应用到了现场,能够实现稳定的多跳通讯。参考simpleWiFi的S2W-M02多串口2串口3串口双串口以及三串口的通讯模块。后续文章会详细介绍多跳路由保持实现。