首页 > 数据库 > 数据库开发技术 > 分布式软总线组网模块
LNN(Local Nearest Neighbor)组网模块是DSoftBus分布式软总线系统的协调中枢,位于core/bus_center/lnn/目录下。它不直接参与设备发现、物理连接建立或数据传输,而是负责网络拓扑管理、节点状态维护、通道选择分配和主节点选举等协调工作。
核心定位:LNN是整个DSoftBus架构中的"编排协调层",对上承接Transmission传输请求,对下调用Connection建立物理通道、调用Authentication完成设备认证。
| 子模块 | 路径 | 核心职责 | 关键文件 |
|---|---|---|---|
| Net Builder | lnn/net_builder/ | 网络构建、连接FSM、拓扑管理 | lnn_net_builder.c、lnn_connection_fsm.c |
| Net Ledger | lnn/net_ledger/ | 节点信息存储、本地/分布式账本 | lnn_node_info.h、lnn_net_ledger.h |
| Net BusCenter | lnn/net_buscenter/ | 网络协议调度、物理子网抽象 | lnn_network_manager.c |
| Lane Hub | lnn/lane_hub/ | 通道选择、评分、分配、心跳 | lnn_lane.c、lnn_lane_select.c |
| Disc Mgr | lnn/disc_mgr/ | LNN内部的CoAP发现封装 | lnn_discovery_manager.c |
| Decision Center | lnn/decision_center/ | 网络决策策略 | lnn_decision_center.h |
| Meta Node | lnn/meta_node/ | 元节点管理 | lnn_meta_node_interface.h |
文件: core/bus_center/interface/bus_center_manager.h
职责: 作为LNN模块的对外统一接口,提供节点管理、信息查询、组网操作等API。
核心API分类:
设计特点:
InfoKey枚举定义信息类型,支持字符串、数字、字节等多种数据类型LnnLaneProperty区分不同类型的通道(消息、字节、文件、流媒体)文件路径: core/bus_center/lnn/net_builder/
核心职责: 负责设备加入网络(Join)、离开网络(Leave)、连接状态机管理、拓扑信息同步。
文件: lnn_connection_fsm.c
设计模式: 采用**有限状态机(FSM - Finite State Machine)**管理设备连接的生命周期。
状态定义:
状态转换图:

连接标志位(Flag):
在线类型(OnlineType):
文件: lnn_net_builder.c - UpdateLocalMasterNode()
选举机制: 基于**节点权重(Node Weight)**的选主算法,权重高的节点当选为主节点。
选举消息同步:
文件路径: core/bus_center/lnn/net_ledger/
核心职责: 作为LNN的数据存储层,管理节点信息、网络能力、设备状态等核心数据。
文件: lnn_node_info.h
文件路径: core/bus_center/lnn/net_buscenter/
核心职责: 管理和协调不同物理子网(Physical Subnet)的接入,提供统一的网络接口抽象层。
文件: lnn_network_manager.c
核心数据结构:
网络接口类型:
协议注册机制:
文件: lnn_physical_subnet_manager.c
职责: 管理系统中的物理网络接口(Physical Network Interface),将不同类型的网络接口抽象为统一的管理结构。
文件路径: core/bus_center/lnn/lane_hub/
核心职责: 通道(Lane)是DSoftBus中数据传输路径的抽象,Lane Hub负责通道的选择(Selection)、评分(Scoring)、分配(Assignment)和生命周期管理。
Lane Hub子模块结构:
文件: lnn_lane_select.c
选择流程:

链路评分接口:
文件: heartbeat/
心跳FSM状态:
心跳状态转换:

心跳事件处理:
心跳类型:
lnn_ble_heartbeat.c: BLE心跳 - 通过BLE广播/扫描传输心跳lnn_ble_lpdevice.c: BLE低功耗设备 - 针对低功耗设备的特殊心跳策略文件路径: core/bus_center/lnn/disc_mgr/
职责: 这是LNN模块内部对CoAP发现的封装层,不是完整的Discovery模块。
发现实现类型:
注意: 完整的Discovery模块位于core/discovery/目录,包括BLE发现、CoAP发现、USB发现等多种发现策略。LNN的disc_mgr只是调用Discovery模块的封装。
文件路径: core/bus_center/lnn/decision_center/
职责: 基于网络状态和策略,做出网络优化决策,如通道切换、负载均衡等。
文件路径: core/bus_center/lnn/meta_node/
元节点信息结构:
元节点特性:


| 设计模式 | 应用场景 | 示例 |
|---|---|---|
| 有限状态机(FSM) | 连接生命周期、心跳状态 | lnn_connection_fsm.c、lnn_heartbeat_fsm.c |
| 工厂模式(Factory) | 网络接口创建 | NetifMgrFactory() |
| 观察者模式(Observer) | 设备发现回调 | g_discoveryCallback.onDeviceFound |
| 策略模式(Strategy) | 通道评分算法 | getLinkScore() 函数指针 |
| 中介者模式(Mediator) | LNN作为协调中心 | Bus Center统一管理 |
| 发布-订阅模式 | 服务发布/订阅 | LnnPublishService() / LnnStartDiscDevice() |
| 维度 | 描述 |
|---|---|
| 定位 | DSoftBus的协调编排层(Orchestration Layer) |
| 不直接做 | 设备发现、物理连接建立、数据传输 |
| 核心做 | 网络拓扑管理、节点状态维护、通道选择分配 |
| 对上 | 接收Transmission模块的通道请求 |
| 对下 | 调用Discovery发现设备、调用Connection建立连接、调用Authentication完成认证 |
| 子系统 | 核心职责 | 关键设计 |
|---|---|---|
| Net Builder | 网络构建、连接FSM | 4状态FSM(Auth→Online→Clean→Leaving) |
| Net Ledger | 节点信息存储 | Local Ledger + Distributed Ledger |
| Net BusCenter | 网络协议调度 | Protocol Manager + Physical Subnet Manager |
| Lane Hub | 通道选择分配 | 多策略评分算法 + 心跳FSM |

LNN是整个DSoftBus系统的"大脑",负责协调各模块工作、维护网络拓扑、选择最优传输路径,确保分布式设备能够高效、可靠地通信。
原文作者:六bring个六;如有侵权,请联系管理员删除。