分布式软总线是多设备终端的统一基座,为设备间的无缝互联提供了统一的分布式通信能力,能够快速发现并连接设备,高效地传输任务和数据。
分布式软总线实现近场设备间统一的分布式通信管理能力,提供不区分链路的设备间发现连接、组网和传输能力,主要功能如下:
- 发现连接:提供基于Wifi、蓝牙等通信方式的设备发现连接能力。
- 设备组网:提供统一的设备组网和拓扑管理能力,为数据传输提供已组网设备信息。
- 数据传输:提供数据传输通道,支持消息、字节、流、文件的数据传输能力。
分布式软总线是OpenHarmony重要特性、重要组件之一,是其他分布式子系统的基础,包括分布式数据管理,分布式任务调度,分布式硬件子系统等
架构
目录结构:
分布式软总线框架主要位于 foundation/communication/dsoftbus
目录下,其目录结构如下:
shell
//foundation/communication/dsoftbus
├── adapter # 适配层
│ ├── common # 适配层管理,网络适配,协议适配等
│ └── default_config # 适配层配置
├── components # 依赖组件
│ ├── mbedtls # SSL算法库
│ └── nstackx # 网络协议库
├── core # 核心层
│ ├── adapter # 适配层接口
│ ├── authentication # 认证接口
│ ├── bus_center # 组网代码
│ ├── common # 通用代码
│ ├── connection # 连接代码
│ ├── discovery # 发现代码
│ ├── frame # 框架代码
│ └── transmission # 传输代码
├── interfaces # 对外接口
├── sdk # 对外应用sdk
│ ├── bus_center # 组网
│ ├── discovery # 发现
│ ├── frame # 框架
│ └── transmission # 传输
├── tests # 测试代码
└── tools # 工具
架构简析
- SDK:为其他业务提供软总线的能力接口,如发现设备,发布服务,设备连接,远端设备信息获取,时间同步,注册回调接收设备上下线消息,设备信息变更消息;SDK 对外提供 softbus_client.so,头文件均在 interfaces/kits 目录里;
- Tools:提供 SoftBusDumpDeviceInfo 工具,可以查看本地的设备信息和所有发现的设备信息;
- Core:软总线的核心实现部分,提供 softbus_server 库,实现 system ability 框架提供系统能力;
- discovery:提供对网络设备和蓝牙设备的发布,发现,连接的能力,
- authentication:设备认证模块,对不同类型的连接方式提供不同的认证实现和统一的认证能力,并为分布式设备业务提供 DeviceAuthCallback;设备认证模块依赖//base/security/device_auth/services:deviceauth_sdk 库。认证模块提供认证连接对应的处理,如连接处理(OnConnectResult),数据处理(OnDataReceived),断开处理(OnDisconnected)三个基础入口,提供设备的连接认证能力;
- connection:提供 ble,br,tcp,p2p 连接方式。连接模块会启动一个后台连接服务,此连接服务提供默认的 tcp,ble,br,p2p 的连接处理接口,服务内部通过一个线程池处理连接的任务;认证模块通过连接模块进行认证连接,同时连接模块也提供回调接口,为业务模块提供数据返回。连接模块就是通过具体的连接业务实现代码为业务模块提供设备连接和信息传输通道;目前主要提供的连接方式为 socket 或者蓝牙两种;其中接口声明在 interface 目录下;
- transmission:提供消息发送接口,可以发送加密信息或者不加密信息,加密方式根据认证的信息确认,使用认证会话的 key 作为 key 值,加密方式为 aes 加密。
- bus_center:提供核心的 LNN 本地网络服务接口,包括网络服务发现,连接,服务发布等核心能力,以及设备管理能力。bus_center 作为软总线的管理节点提供本地网络拓扑账本(NetLedger),消息处理回环(BusLooper),事件处理对象(Netlink,Product,Lwip,Wifi,BtState,Driver,ScreenState,DeviceName),网络发现服务(Coap),网络接口(Netif, softbus_feature_config.c 里写死),消息网络构造(NetBuilder),本地网络路由管理(LaneHub),节点地址分配(NodeAddrAllocator)。软总线设计目标为无感的设备互联互通,所以每个标准设备都可以作为一个网络节点也可以作为一个网关,而 bus_center 就是作为网关实现的部分。软总线服务通过收听系统的事件,包括设备事件,网络事件以感知本设备的每一处变化,然后根据变化来决定是否可以感知到周围新的节点设备加入网络,并提供设备认证,连接,传输数据的服务;
- common:核心部分的基础代码,如 bitmap(位图),dfx(DesignForX,未来设计),json,messagehandler(软总线信令),network(网络频率参数),queue(队列),security(权限认证),property(软总线配置),utils(工具集,timeout,hextobytes,random,等等)
- frame:框架层,不同类型的系统(小型系统 L0,轻量系统 L1,标准系统 L2)提供不同的对外接口实现;
- adapter:适配层,目前适配不同的设备类型,如 WiFi,蓝牙等;
- Adapter:软总线适配层,对不同系统进行裁剪和能力配置,对外部依赖进行包装和调用;
- Component:组件,mbedtls(SSL 算法库),nstackx(网络协议库,为 coap 提供网络协议服务)
约束
- 组网设备需在同一局域网中 或者 距离相近的近场设备间。
- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。
- 传输完成数据收发之后,业务要主动关闭会话,释放资源。
总结
本文主要记录了分布式软总线的基本概念,架构,以及框架的代码组成介绍,后续实际用上后再记录分布式软总线子系统使用。