
我早期做LoRa自组网的时候心里一直觉得“LoRaWAN不是自组网”真正点到点通信嘛要么靠洪泛要么靠路由。后来被一批批实测数据打脸之后才意识到“洪泛、路由、网络栈”并不是互斥的单选题而是一条项目需求光谱上的不同落点。这篇文章就是想把这三条路线放一起说说它们各自的取舍逻辑、量化指标以及我在具体项目中踩过的坑。标题里的三种路线对应的是三种完全不同的网络构建哲学洪泛完全不建路路由只在需要的时候建一条路网络栈则干脆把路由选择和资源调度都收编到基础设施里。没有一种方案在功耗、时延、吞吐、复杂度上全面占优选型的关键是你愿意为什么买单。1. 三条路线到底差在哪从链路建立方式看本质区别很多人一上来就对比“洪泛快还是路由快”其实这种问法本身就错了。三者解决的核心问题完全不同洪泛解决的是“怎么把消息送达”路由解决的是“怎么用更少的空中时间把消息送达”而网络栈解决的是“怎么让一大群设备在共享信道里排队且不互相踩踏”。1.1 洪泛不建路直接把消息“喊”出去洪泛这个名字非常形象消息进网之后每个收到它的节点都无条件转发一次直到全网节点都收到或者消息被丢弃。发送端根本不知道接收端在哪也不需要知道。节点做的事情很简单收包、查重、判断是否转发、转发。这种机制没有路由发现过程没有路由表也没有链路状态维护开销。它的代价也很直白同一个消息会在信道里被重复发送很多次。假设一个20节点的网络源头发1个包理想洪泛下全网大约产生接近20次传输实际因为重叠和丢包会略高或略低。对LoRa这种半双工、低速率信道来说这种冗余就是信道占用率的天敌。1.2 路由握一次手走一条固定链路路由方案的核心思路是“一次性建路多次使用”。源节点先通过一次受限洪泛发出路由请求沿途节点记录反向路径目标节点收到后回复一条路由应答源节点沿着这条应答路径就可以精准单播数据。后续消息都走这条已经建立好的路径直到路径失效再重建。与洪泛相比路由方案的每次数据传输空中开销很小但在建路阶段的开销非常高。而且LoRa链路质量波动比Wi-Fi、以太网大得多路径老化时间往往很短这会直接拉低路由方案的实际收益。还有一点传统网络工程师容易忽略LoRa的路由表是针对链路质量RSSI、信噪比评估的不是针对IP地址的所以路由协议不能直接套用AODV这类无线自组网协议往往需要魔改。1.3 网络栈不是组网是接入基础设施严格意义上说LoRaWAN并非“自组网”它是星型接入网。终端设备不承担路由转发只负责和网关双向通信。网络服务器统一管理设备入网、加密、上下行调度、数据速率自适应ADR等。从自组网视角看LoRaWAN牺牲了“无基础设施依赖”这个特性换来了更高的信道利用率和规模化能力。LoRaWAN里每个终端逻辑上直接与网关连接数据链路是“终端-网关-网络服务器-终端”的转发路径而不是终端间逐跳接力。这带来两个连锁后果一是覆盖范围受网关单跳覆盖能力限制二是网络可靠性高度依赖网关和回传链路。很多做自组网出身的人觉得LoRaWAN不够“野”但它确实是最接近商用落地方案的路线。2. 洪泛方案的工程细节与量化表现简单到极致代价是信道变胖洪泛方案的硬件要求最低SX1276或SX1262芯片配合一个简单驱动就能跑起来。我在一个实际项目中用32个节点做了30天的连续测试节点间距300到800米单次上报周期15分钟。先给结论洪泛在“低频率小数据量”场景下非常稳但一旦把上报频率提高信道很快就顶不住了。2.1 一次洪泛消息在信道上的实际开销LoRa一帧空中传输时间由扩频因子和带宽决定。我常用的配置是SF7、带宽125kHz、编码率4/5此时有效载荷速率大约为5.47kbps。一个包含14字节有效载荷、带完整MAC层头部含序号、源地址、TTL等的包大约17字节左右加上前导码和CRC空中时间约在40到80毫秒。若改用SF10以提升覆盖半径单包空中时间会飙升到300毫秒以上。洪泛的关键在于一个原始消息总共占用了多少信道时间每增加一跳转发链路上的一个节点信道占用就累加一次。我在32节点、平均1跳的中等规模网络里测得单次洪泛全网的空中时间约为单跳的3到6倍因为有重叠覆盖区域。这意味着SF10下一次全网洪泛可能吃掉近2秒的信道时间这对低速率LoRa来说是天文数字。参数SF7/BW125SF10/BW125有效载荷速率(kbps)5.47约0.9817字节包空中时间(ms)约50约30032节点全网洪泛总空中时间(ms)150~300900~18002.2 控制洪泛风暴的四个关键技术点第一是序号去重。消息必须携带发送序号节点只处理最新序号的包否则大量重复包会在网内“原地打转”形成广播风暴。第二是TTL限制。每个节点收到转发前TTL减1为0直接丢弃防止洪泛覆盖无限扩大。第三是延迟抖动jitter。每个节点转发前随机等待一段时间避免相邻节点同时转发导致碰撞。四是传输失败重发策略。我在一个10节点线状拓扑里不加抖动做测试碰撞重传率高达20%以上加了大约100到300毫秒随机抖动之后重传率降到4%左右。2.3 洪泛方案的量化表现洪泛最亮眼的指标是端到端时延。因为不需要建路消息沿着最短可达路径自然扩散一个3跳网络从源到目标的最快到达时间理论上等于3倍单跳空中时间加中间节点处理时间通常在300毫秒到1秒之内。这个时延在所有拓扑变化、节点移动场景下都稳定不需要任何路由收敛时间。功耗方面洪泛就没这么乐观了。每个中继节点即使没有自己的数据要发也可能被邻居数据唤醒并转发。节点能耗大约等于“全网数据量乘以其转发参与度”中继节点在长时间运行后会明显先于叶子节点耗尽电池。如果项目要求每节点都能工作一年以上洪泛方案必须对参与转发的节点数量做限制或者接受电池更换周期的差异。3. 路由方案的技术栈拆解一次握手建路后续单播到底省不省路由方案最吸引人的地方是让LoRa从“广播媒介”变成了“可定向传送的媒介”。我实现过一个基于类AODV思想的路由协议整个协议栈由洪泛式RREQ路由请求、单播式RREP路由应答、数据包和路由维护报文组成。这套系统跑下来我最大的感受是路由表本身不难难的是让路由表在LoRa这种昂贵信道里保持“新鲜”。3.1 LoRa路由与传统IP路由的本质差异传统IP网络的路由基于稳定的链路状态和固定的带宽资源路由收敛时间以秒甚至毫秒计是可以接受的。LoRa不一样链路带宽只有几百bps到几十kbps一次路由发现泛洪可能消耗信道几分钟的可用容量链路质量随天气、移动、多径变化剧烈。所以LoRa路由几乎不用“最短路径”概念而用“最低开销路径”或“最高成功率路径”跳数反而是次要指标。路由表项也不是“目的地址-下一跳”这么简单每一项还需要包括链路质量评分比如对端RSSI、最近24小时收包成功率。我用RSSI阈值过滤链路时发现一个问题RSSI只能反映信号强度不能反映符号间干扰。村里两栋楼之间的反射会导致RSSI较高但比特错误率也高此时必须综合信噪比判断单纯靠RSSI选路会选出一条“喊得动、听不清”的坏路。3.2 一次完整的路由协议时序用一个10节点链状拓扑举例。源节点A要发数据给节点J但两者相隔5跳A不知道路径于是A在TTL6范围内发出RREQ携带目标地址J和本次路由请求序号沿途节点B、C等收到RREQ后记录“到A的反向路径”和自己的上一跳再转发给邻居节点J收到RREQ后沿着反向路径单播RREP回AA收到RREP从此使用“A-B-C-D-E-J”这条路径发送数据全程耗时是什么概念一次RREQ洪泛所需的时间和洪泛方案一次全网传输几乎相同但在SF10、多跳场景下这次洪泛就吃掉1到2秒信道时间。RREP回传相对快单播路径每一跳都要排队、串行发送一个5跳链路建路总耗时约2到5秒。我第一版协议在节点断电重启后重新建路的场景下实测用户感知到的是传感器上报延迟暴增到8秒左右这在电池供电的周期上报场景里是可以接受的但在告警触发场景里就会让人崩溃。3.3 路由方案的量化表现与隐性代价路由方案真正省钱的是数据阶段原始数据包只沿一条路径传输全网空中时间跳数×单跳空中时间。同样是5跳传输洪泛可能需要10到15次空中传输路由只需要5次信道占用节省一半以上。但这个收益有个前提路由表必须长期有效。LoRa场景里链路会漂移植被、车辆、天气都会让原本通畅的链路变得不可靠。路由协议需要一个主动老化机制比如每隔30分钟或1小时主动发送链路质量探测帧一旦丢包率超过阈值就触发一次新的RREQ。这些维护开销在节点数量10个以下时可以忽略但规模到了30个以上时维护流量会明显吃掉信道预算。我用一个30节点全连接测试网做过统计路由维护报文占总报文数的比例约为8%到12%而在拓扑频繁变化的移动节点场景里这个比例会飙升到30%以上。4. LoRaWAN网络栈A类、B类、C类窗口机制到底在解决什么问题LoRaWAN的“网络栈”路线和其他两条线最大的区别在于它把组网问题转换成了多址接入和调度问题。自组网考虑的是“怎么在无中心环境里把数据送到”LoRaWAN考虑的是“在一个有中心的环境里怎么让成千上万的设备有序高效地共享信道”。4.1 A类异步上行下行只能在两个窗口里捡LoRaWAN最基础的A类设备是纯异步的。设备平时睡觉醒来主动发一个上行包发完后在RX1和RX2两个固定时间窗口短暂唤醒接收下行数据。这个机制下设备永远不需要维持一张路由表也不需要转发别人的数据彻底摆脱了多跳转发的负担。正因为如此LoRaWAN单节点的功耗和洪泛、路由方案相比有一到两个数量级的优势。代价就是下行遥不可及。服务器不能随时单向给某台传感器发指令必须等这台设备自己上行以后再乘机下发。我调试设备时经常遇到这种“先踢一脚再等回复”的尴尬过程网络服务器要改设备参数必须等设备周期上报上报后服务器才能在窗口里塞下行数据。如果你的业务需要“随时可控的高频下行控制”A类是做不到的。4.2 Class B与Class C的“永远在线”误区Class B通过网关定时发送信标beacon来同步全网设备的时间片设备会周期性地打开接收窗口由此实现了“准实时”下行。听起来很完美但对时间同步要求极高网关必须有精准时钟源通常需要GPS设备侧也要维护时间偏差补偿。我实测过一个Class B节点室内环境GPS信号弱时网关时间同步抖动直接导致下行丢失率上升最终这个节点被迫退回了A类模式。Class C则是让设备几乎一直开启接收窗口代价是日常电流消耗从微安级别飙升至毫安级别。只有在有外部供电、不需要考虑电池寿命的场景里才适合用Class C比如带太阳能的网关、车载终端。很多人误把Class C当成“无限下行的终极解”实际上它只是把功耗问题从终端转移给了供电系统而已。4.3 网络栈方案的量化表现与商业化价值LoRaWAN单条信道的查询容量非常惊人。在SF7/BW125下一条信道一小时大约可以接纳20000个40字节级别数据包考虑A类上行、ACK和MAC命令开销后实际数量会少一些。在同样SF7配置下洪泛方案全网最多只能支撑每节点每15分钟上报一次的小规模网络吞吐量差距已经不是一个量级了。我自己的经验是如果你要做的是一个必须长期稳定运行的商用系统传感器数量超过50台、需要云端管理、需要可靠OTA配置设备LoRaWAN是唯一不太需要我派人现场维护的路线。有一次客户把网关装在一栋写字楼顶层设备分布在地下2层到18层SF7和SF10混合配置跑了一个月网络服务器的ADR自动切换速率最终下行成功率稳定在97%以上单台网关覆盖了大约200台终端。这个规模化稳定性自组网很难靠手工调参追上来。5. 实测数据和量化对比一张表把三条路线直接拉出来比纸上谈兵到这里为止我把自己在不同项目里测量的典型数据进行汇总。测试条件不完全相同但统一在SF7/BW125、单包17字节、节点间距300到600米的背景下数据更接近“实际可复现”的范围。5.1 测试环境怎么搭洪泛和自组网路由方案我用的节点是SX1262模块加STM32L0自由协议栈LoRaWAN用的是一台8通道网关加同型号模块网络服务器跑在树莓派上。所有节点固件里统一打时间戳和序号通过串口回传日志这样能拿到精确的端到端时延和丢包率数据。网络拓扑拉了两种10节点链状、32节点网状后者分布在3个相隔约200到300米的区域内。5.2 量化对比表指标洪泛路由方案LoRaWAN端到端时延(3跳)0.3~1秒建路阶段2~5秒数据阶段约0.5秒A类需等上报周期B类约秒级单条消息全网信道占用3~6倍单跳时间数据阶段跳数倍建路阶段洪泛级1倍单跳时间节点功耗(中继/终端)中继高、叶子低中继与路由维护开销大终端极低网关高规模化能力(100节点场景)差信道容易饱和路由表维护流量成为瓶颈优8通道网关可承接数百节点无基础设施依赖完全自治完全自治但更多依赖邻居协作强依赖网关和网络服务器部署调试复杂度极低高中等5.3 量化指标背后的真实含义端到端时延这一栏很多人会直接得出“路由不如洪泛”的结论其实不能这么看。洪泛的时延是“最快到达路径”的时间也就是说它这里测的是运气值路由建路虽然慢但一旦路建好消息到达率是可以预测的。在告警联动业务里可预测的时延比“大多时候很快但偶尔很慢”更重要因为你要给用户承诺一个最大响应时间。信道占用率同样不能只看数值。洪泛最终让全网每个节点都收到消息这种冗余对某些广播类应用比如全网升级指令、集群唤醒其实是刚需。路由和LoRaWAN反而需要专门实现“组播”或“广播下行”能力来模拟这种效果实现成本更高。量化指标的意义不是选一个“最优”而是帮你在项目需求里找到那个最容忍的代价。6. 选型建议按项目需求反推该走哪条路我接过的LoRa项目五花八门有做农田墒情监测的、有做仓库温湿度的、有做矿区人员定位的还有做牛羊项圈的。每个项目都天然会在“时延、功耗、覆盖形态、网络规模、可维护性”这五个维度上落点不同选错就换开发方向代价特别高。6.1 先问自己五个问题再选路线网络里有没有中心节点如果一定不能依赖任何中心节点那就只能在洪泛和路由里选。消息频率多高每节点15分钟上报一次和每节点5秒上报一次是两种世界后者几乎只有LoRaWAN能扛。是否需要下行控制如果只允许上行数据A类LoRaWAN和单向上行洪泛都能做如果必须随时双向通信就要考虑Class C或自组网路由。节点会移动吗移动场景下路由维护成本极高洪泛虽然效率低但胜在“不挑姿势”。谁负责运维没有专业工程师驻场的农业、野外项目我更倾向LoRaWAN因为网络服务器能远程看到每台设备的链路质量、电池电压出了问题可以远程改配置不用跑现场。6.2 分场景的推荐结论固定节点、高频上报、需要统一管理的场景直接选LoRaWAN不要在自组网路线上硬扛大容量接入能力真的没法靠自组网协议堆出来。移动节点、小规模、需要完全自治的场景选洪泛它的可靠性来自简单节点少时效率低一点完全无所谓。而固定中继、无法引出中心节点、又需要控制单次传输信道占用的场景才真正需要路由方案——这种场景最典型的就是地下管廊、隧道信号不能通过网关一跳覆盖所有传感器又不能每个区域都布一个网关只能靠中间节点接力。6.3 一个可以少走弯路的混搭思路很多项目根本不必非要三选一。我最近一个项目就是“LoRaWAN主干自组网分支”的混合形态末端低功耗传感器用子网洪泛或一跳接入汇聚节点汇聚节点再作为LoRaWAN终端接入网关。这样网关数量大幅减少末端功耗也被锁在极低水平。给做自组网的同行一句话信道是最稀缺的资源一切设计都该围绕“减少无谓传输”展开不管你是站在洪泛、路由还是网络栈的阵营里这条原则永远不变。