摘要:本文分享鸿蒙分布式软总线,并对相关源代码进行解析,为在鸿蒙系统平台上工作的相关人员的信息参考和指导。

总线是一种内部结构,在计算机系统中,主机的各个部件通过总线相连,外部设备通过相应的接口电路再与总线相连接,是CPU、内存、输入、输出设备传递信息的公用通道。按所传输的信息种类,可划分为数据、地址和控制总线,分别用来传输数据、数据地址和控制信号。

HarmonyOS系统的使命和目标是将不同的设备串联,成为设备的“万能语言”,让一个系统连接起所有上网的智能设备,实现万物互联的终极目标。其核心能力之一,【分布式软总线】让多设备融合为“一个设备”,带来设备内和设备间高吞吐、低时延、高可靠的流畅连接体验。

本文分享鸿蒙分布式软总线,并对相关源代码进行解析,作为在此平台上工作的相关人员的信息参考和指导。具体开发请参考鸿蒙官网。

1. 介绍

设备的通信方式多种多样,譬如USB、WIFI、BT,通信方式差异大且繁琐,链路的融合、共享、冲突、安全等问题也难以保证。

鸿蒙分布式软总线致力于实现近场设备间统一的分布式通信能力,提供不区分链路的设备发现和传输接口,具备快速发现并连接设备,高效分发任务和传输数据。作为多终端设备的统一基座,是鸿蒙架构中的底层技术,是鸿蒙的大动脉,其总的目标是实现设备间无感发现,零等待传输。对开发者而言,无需关注组网方式与底层协议。

2. 分布式软总线特性

鸿蒙分布式软总线的设计目标在于推进极简通信协议技术,在设备安全场景下,即连即用。关键技术特性覆盖设备的自动发现&连接、组网(多跳自组网、多协议混合组网)、传输(多元化协议与算法、智能感知与决策)。

2.1 设备间自发现&连接

分布式软总线提出自动发现设备,实现用户零等待的自发现体验,附近同账号的设备自动发现无需等待,自动安全连接。

IoT设备分为发现端和被发现端。发现端一般为请求使用服务的设备或称为主控设备,常指智慧屏设备(如手机、平板等)。被发现端为发布服务的设备,指轻量设备(如AI音箱、智能家居、智能穿戴等设备)。目前软总线的设备互联,需保证发现端和被发现端处于同一个局域网内。

2.2 多设备互联、组网

基于网络互联、交互的系统,开发者往往需要适配不同网络协议和标准规范。而在鸿蒙系统设定的分布式开发模式中,无需关心网络协议的差异及组网方式,业务开发与设备组网解耦,仅需监听设备上下线,开发成本大大降低。

分布式软总线提出了异构网络组网,自动构建一个逻辑全连接网络,以解决设备间不同协议交互的问题。设备上线后会向网络层注册,同时网络层会与设备建立通道连接,实时检测设备的变换。网络层负责管理设备的上线、下线变换,设备间可以监听自己感兴趣的设备,设备上线后可以立即与其建立连接,实现零等待体验。

2.3 多设备间数据传输

提供统一的基于Session的认证、传输功能,上层业务系统可以通过sessionId收发数据或获取其相关基本属性,实现业务消息、流、控制指令等操作交互。

3. 软总线协议COAP

互联网的WEB应用无处不在,很多依赖于REST协议架构。为在大多的受限节点上(如RAM和ROM很有限的8位单片机)及受限网络上(如6LoWPAN)也能支持REST,工程师们着手处理“受限制的restful环境”,即CoRE。如6LoWPAN的受限网络支持将IPv6数据分成小包,但极大降低了传输效率。

CoAP(Constrained Application Protocol)的主要目标之一是设计一个通用的Web协议,保持非常低的开销,以满足受限环境的特殊要求,如能源、楼宇自动化或其它M2M应用。实现REST的一个通用HTTP子集,针对M2M应用做了简化,而非盲目压缩HTTP。COAP协议可很容易转换为HTTP,方便和现有WEB体系转化,同时还能满足诸如内置发现、组播支持和异步消息传输等。

3.1 COAP协议特征

属于一种应用层协议,运行于UDP协议之上而不是像HTTP那样运行于TCP之上。

1) COAP协议网络传输层由TCP改为UDP;

2) 基于REST,server的资源地址也类似URL格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化;

3) COAP是二进制格式,HTTP是文本格式,COAP比HTTP更加紧凑;

4) 小巧、轻量化,最小长度仅仅4 Bytes,一个HTTP的head都要几十Bytes;

5) 支持可靠传输,数据重传,块传输;

6) 支持IP多播, 可同时向多个设备发送请求,鸿蒙设备的发现功能就是用的这个特性;

7) 非长连接通信,适用于低功耗物联网场景;

8) 支持观察模式;

3.2 协议类型及结构

COAP协议有4种消息类型。

  1. CON: 需要确认,如果CON请求被发送,那对方必须做出响应,确认收到消息,用以可靠消息传输;
  2. NON: 不需要被确认的请求,如果NON请求被发送,那对方不必作出回应。适用于消息会重复频繁的发送,丢包不影响正常操作。和UDP很像,用于不可靠消息传输;
  3. ACK: 应答消息,对应的是CON消息的应答;
  4. RST: 复位消息,可靠传输时候接收的消息不认识或错误时,必须回RST消息;

协议结构定义

在源码discovery/coap/include/coap_def.h中对COAP协议的结构体进行了定义。

3.3 COAP包的传输

传输方式为客户端和服务器端模式,服务器端启动COAP包的监听服务。

源码discovery/coap/include/coap_socket.h中提供了COAP包的发送和接收函数定义。

3.4 COAP设备发现

源码discovery/coap/source/coap_discover.c实现了基于COAP的设备发现功能。

3.5 COAP的安全性

TLS不能用来保证UDP上传输的数据的安全,因此Datagram TLS试图在现存的TLS架构上提出扩展,使之支持UDP。

COAP的安全性是用DTLS加密实现。DTLS的实现需要的资源和带宽较多,如果是资源非常少的终端和极有限的带宽下可能会跑不起来。DTLS仅仅在单播情况下适用。

4. 源代码结构与解析

分布式软总线的源代码在communication_services_softbus_lite目录,结构如下:

说明: 目录下所有源码文件将被编译为一个动态库,其它依赖模块在编译的时候加上这个动态库的依赖即可。譬如:分布式调度子系统所在的foundation这个bin文件的编译就依赖这个动态库。

4.1软总线的初始化

StartListener()函存在对应不同版本平台的适配,体现了各部分解耦的模块化设计思想,针对不同的硬件设备,组合成最适合该设备的OS。比如创建线程时采用了统一的static void WaitProcess(void)函数,而其内部封装了不同底层API的适配代码。

4.2操作系统适配层

HarmonyOS的操作系统底层可以是:HarmonyOS micro kernel,Linux kernel,且Lite OS将成为一个完整的鸿蒙微内核架构。

鸿蒙系统内部各个模块内部使用的函数需要支持针对不同版本平台的适配,体现各部分解耦的模块化设计思想,针对不同的硬件设备,组合成最适合该设备的OS。譬如,创建线程时采用了统一的static void WaitProcess(void)函数,而其内部封装了不同底层API的适配代码。SemCreate在LiteOS中使用LOS_SemCreate创建信号量,在Linux上用sem_init() Posix标准接口创建。

源码目录os_adapter下的代码即实现了分布式软总线对操作系统的适配。

LiteOS

是华为面向物联网领域开发的一个基于实时内核的轻量级操作系统,现有基础内核支持任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件,为更好地支持低功耗场景,支持tickless机制,支持定时器对齐。

LiteOS开源项目支持ARM Cortex-M0,Cortex-M3,Cortex-M4,Cortex-M7等芯片架构。

4.3设备发现与连接

各个设备以服务的形态推送、发布,发布后周边的设备可以发现、连接并与之通讯交互,源代码位于discovery\discovery_service\source目录中。

轻量设备作为被发现端设备,调用PublishService发布服务。入口代码截图:

以下是针对操作序列中的代码解析截图,供参考.

1) 权限检查

os_adapter为适配OS系统,封装的函数在不同的操作系统有不同的实现。如SemCreate在LiteOS上使用LOS_SemCreate创建信号量,而Linux上用sem_init()Posix标准接口。

2) 参数检查

3) 创建信号量

4) 初始化服务

A) CoapInit

COAP初始化,注册TCP/IP协议栈的处理,注册session的底层socket的操作处理.

B) CoapWriteMsgQueue()

写入消息,触发获取Wifi 的IP地址,启动总线。

5) 信息加入Module

6) 注册COAP服务

说明:将g_localDeviceInfo.serverData赋值成“port:auth_port”,auth_port是基于TCP的认证服务的socket绑定的端口号(在StartBus函数中赋值).

7) 回调发布成功

调用PublishCallback()执行cb中的发布成功的回调函数。

4.4 设备的认证管理

设备之间的互联、互通需要建立点对点的信任关系,并在具备信任关系的设备间构建安全的连接通道,实现用户数据端到端的加密传输。建立点对点信任关系的过程即是相互交换设备的身份标识的过程。信任关系的建立相当于一次握手,譬如:A设备发送密文给B设备,B成功解密并把自己的信息封装到报文中再次加密传输给A,A拿到报文再次解密确认是B.

authmanager模块是鸿蒙为设备提供认证机制的模块。模块内的主要处理过程包括报文的接收、解密、再次封装、加密、发送的步骤。譬如,当发现有请求时,调用ProcessDataEvent(wifi_auth_manager)函数,收包、检验包头,根据数据包的类型确定不同的处理方式。数据包的类型主要包括以下三种:

  • MODULE_AUTH_SDK 加密数据类型
  • MODULE_TRUST_ENGINE 可信类型,直接进行数据传输
  • MODULE_CONNECTION 进行IP及设备认证

1) 模块的内部结构关系

2) 加密发送步骤及算法

AES-GCM加密算法:AES是一种对称加密算法,GCM是对该对称加密采用Counter模式,并带有GMAC消息认证码。AES-GCM算法是带认证和加密的算法,同时可以对给定的原文,生成加密数据和认证码。

3) 鸿蒙设备互联安全

以下是鸿蒙官网文档的设备互联安全参考图

实现用户数据在设备互联场景下,在各个设备之间的安全流转,实现用户数据的安全传输。

绑定的流程

  1. 设备分别生成Ed25519密钥对;
  2. 利用PIN码和PAKE(Password authenticated key exchange)进行密钥协商,生成会话密钥;
  3. 通过会话密钥加密彼此的公钥(也可不用加密,算个MAC就行,只要能验证公钥确实来自对方即可)
  4. 这里的身份标识公钥指的应该是(设备标识, 公钥)的二元组

通信的流程

  1. 公钥协商会话密钥;会话密钥应怎么用,一般来说,会将初步协商的密钥进行密钥分散,分为加密密钥、MAC密钥等;
  2. 使用会话密钥加密通信数据。

当建立信任关系的主控设备与设备间在进行通信时,双方首先完成信任关系绑定,然后基于存储在本地的对端身份公钥相互进行认证;在每次通信时完成双向身份认证以及会话密钥协商,之后设备使用此会话密钥来解密双方设备间的传输通道。

4.5 认证与会话传输

trans_service模块依赖于系统OS提供的网络socket服务,向认证模块提供认证通道管理和认证数据的收发;向业务模块提供session管理和基于session的数据收发功能,并且通过GCM模块的加密功能提供收发报文的加解密保护。

被发现端(轻量设备)注册、发布服务,成功后回调处理,被发现端使用CreateSessionServer来创建会话服务器并等待发现端的连接、创建会话。发现端(如:智慧屏设备)根据服务的名称和设备ID建立一个会话,就可以实现服务间的数据传输。

数据传输部分的源代码位于trans_service/source/libdistbus目录。

主要处理的步骤参考如下:

CreateSessionServer[会话] à SelectSessionLoop[数据] à OnBytesReceived[回调]

1) CreateSessionServer创建会话

2) SelectSessionLoop

启动总线后即创建了基于TCP的会话管理服务,服务的任务线程为SelectSessionLoop,处理所有的会话数据的接收。

3) OnBytesReceived

会话数据到达的回调函数,调用上层应用注册的onBytesReceived。接收会话报文并进行格式解析,执行相应动作。如在分布式调度模块中,可能是START_FA命令。

最后

分布式软总线是鸿蒙操作系统的基座模块,也是分布式数据管理和分布式任务调度的基石,透彻理解分布式软总线是深入了解整个鸿蒙OS的基础。

本文是基于开放的源代码对分布式软总线模块的切入分析、解析,文中会有部分源码分析、场景分析未完全覆盖到,后续会视情况进行相关补充。

具体开发,请参考鸿蒙官网相关文档: https://developer.harmonyos.com/

本文分享自华为云社区《【鸿蒙操作系统专题二】分布式软总线-解析x1》,原文作者:张X峰。

点击关注,第一时间了解华为云新鲜技术~

深度解读设备的“万能语言”鸿蒙系统的分布式软总线能力相关推荐

  1. 荣耀20青春版装鸿蒙系统,华为鸿蒙2.0系统正式发布,只有这55款华为设备,可升级鸿蒙系统...

    华为鸿蒙2.0系统正式发布,只有这55款华为设备,可升级鸿蒙系统 众所周知,华为的每一步的成长都伴随着争议,就比如当年的麒麟芯片,在华为刚刚使用自己的麒麟芯片的时候,遭到了很多企业的嘲笑,认为华为麒麟 ...

  2. 鸿蒙 OS 尖刀武器之分布式软总线技术全解析!

    作者 | 雷架 来源 | 爱笑的架构师(ID:DancingOnYourCode) 头图 |  CSDN 下载自东方IC 没有人能够熄灭满天星光 华为开发者大会2020在广东东莞松山湖欧洲小镇举办,在 ...

  3. 华为鸿蒙OS尖刀武器之分布式软总线技术

    本文 Github/javamap 已收录,有Java程序员进阶技术知识地图以及我的系列文章,欢迎大家Star. 目录 1 没有人能够熄灭满天星光 2 必须得补的传统总线知识 3 什么是分布式软总线? ...

  4. OpenHarmony分布式软总线与设备认证模块总结

    1 总结 此次OpenHarmony1.x源码分析涉及了分布式软总线(Lite版本).设备认证(Lite版本)两个较大模块. 分布式软总线模块的主要作用是为设备间提供通信能力,由于现有的通信方式差异很 ...

  5. 鸿蒙分布式软总线技术研究

    一.HarmonyOS概述 1.1系统定义 1.1.1 系统定位 HarmonyOS是一款"面向未来".面向全场景(移动办公.运动健康.社交通信.媒体娱乐等)的分布式操作系统.在传 ...

  6. HarmonyOS最核心的“分布式软总线”技术解读

    文章来源 |  HarmonyOS开发者公众平台 什么是分布式软总线呢? 分布式软总线是HarmonyOS架构中最底层的技术 分布式软总线是HarmonyOS的大动脉 开发跨端应用,开发者们是否面临以 ...

  7. 华为什么系列可以升级鸿蒙系统,有哪些华为设备能够升级到鸿蒙系统?

    2021年6月2日,华为正式发布了鸿蒙2.0系统,说到"鸿蒙2.0系统"小芳对它的印象就是非常流畅且是一款能够能够做到万物互联的系统.那么问题来了,有哪些华为手机能够升级鸿蒙系统呢 ...

  8. 深度解读阿里巴巴云原生镜像分发系统 Dragonfly

    Dragonfly 是一个由阿里巴巴开源的云原生镜像分发系统,主要解决以 Kubernetes 为核心的分布式应用编排系统的镜像分发难题.随着企业数字化大潮的席卷,行业应用纷纷朝微服务架构演进,并通过 ...

  9. 鸿蒙系统r如何升级,高歌猛进,鸿蒙系统升级机型再次确认,花粉:终等到!...

    虽然华为手机现在的压力非常大,但是在前进的道路上,真的充满了乐观精神,而且现在也算是一路高歌猛进了,发展路线开始加快了许多,无论是新机还是系统,都有着非常多的新消息.因为华为手机的实力很强,无论是旗下 ...

  10. 华为申请鸿蒙系统邮箱,华为鸿蒙系统

    华为鸿蒙系统这是华为最新推出的一个全新的手机系统,备受瞩目,打造最好的华为系统生态,可按需扩展,实现更广泛的系统安全,感兴趣的小伙伴们不要错过了,一起来进入华为鸿蒙系统2.0申请入口体验一下吧! 华为 ...

最新文章

  1. java确定一个整数是否溢出,java-判断一个整数是不是回文,考虑溢出
  2. Introduction to the Trusted Services Project
  3. Vs 2015 批量 删除注释
  4. VHDL 整数 小数 分数 分频
  5. call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案
  6. python逐行输出_python逐行输出
  7. linux下别名alias的设置
  8. 你很熟悉CSS,却没掌握这些CSS技巧
  9. 并发编程之美(1)并发编程基础二
  10. easypoi 大数据 百万_燃烧大数据 | 分析了2百万份成绩后发现,女跑者更稳?
  11. 三款按键可视化软件——在你的电脑屏幕上显示按键
  12. linux更新系统内核,Linux内核升级方法详解
  13. 通过TXT文件批量制作ITF-14条码
  14. C# 获取鼠标屏幕坐标有误差,鼠标定位误差问题,Windows10 C#获取鼠标坐标不准 的解决方法
  15. mybatis 标签中prefix,suffix,prefixOverrides,suffixOverrides作用
  16. gif动图怎么制作?gif在线制作方法,一键制作超简单
  17. 作业07-Java GUI编程
  18. mac上chrome插件安装
  19. 软考常考知识点整理-项目生命周期、信息系统生命周期与产品生命周期
  20. 第六讲 幂级数的收敛半径和收敛域

热门文章

  1. 全国青少年机器人技术等级考试标准 (三四级/arduino/mixly)
  2. QListView text动态显示
  3. pro-engineerUG
  4. SQL Server 数据库之连接查询
  5. matlab shapley函数,合作博弈shapley值讲解.ppt
  6. ArcGIS Zonal Statistics as Table 工具报错解决
  7. android webview 慢,Android Webview的性能问题
  8. Python绘图 \ 数据可视化
  9. C语言知识点——函数参数
  10. Django使用Channels实现WebSSH网页终端,实现SSH堡垒机雏形