Mesh(三)----Provision

Provision statck

下图是provision的stack架构,分为三层,左边基于Adv,右边基于GATT


image.png

Provision bearer layer

bearer,送信人的意思,表示传输媒介
两种bearer构成:

  • PB-ADV
  • PB-GATT

一个未配对的设备应该支持上述两种中的一种,强烈建议都支持。
Provisioner(发起配对方)应该支持至少一种,强烈建议支持PB-ADV

PB-ADV

通过adv channels传递Generic Provisioning PDUs,基于会话,一个未绑定的设备只能同时支持一个会话,Provisioner没有限制。会话的建立使用Link Establishment procedure。
MTU(maximum transmission unit)大小是24个字节
设备要能主动扫描(close to 100% duty)避免丢包。
任何使用PB-ADV的广播应该是非连接的非定向扫描的。(non-connectable, non-scannable undirected)

PB-ADV数据格式:


image.png

PB-ADV PDU格式


image.png
  • Link ID:
    区分每个link
  • transaction number:

PDU过长,分段,所有的分段使用同样的transaction number。
PDU重发的时候,分段号也不变。
Provisioner上该值的范围0x000x7F,device上该值的范围0x800xFF。
当一个设备收到Provisioning PDU,它应该把该值设置为收到的值
当一个设备发送Transaction Acknowledgement PDU,该值应该被设为被承认的PB-ADV中的值----发ack的时候,使用双方协定好的transaction number。

PB-GATT

允许绑定设备,通过Proxy PDUs。
连接间隔建议250ms~1000ms

Proxy Protocol
该协议允许节点收发Network PDUs,mesh beacons,proxy configuration messages and Provisioning PDUs over a connection-oriented bearer。
Proxy PDUs包含Network PDUs,Mesh beacons, proxy configuration messages or provisioning PDU。
mesh消息转发的协议

Generic Provisioning layer

传输Generic Provisioning PUDs的。

Generic Provisioning PDU types:

  • Transaction Start
  • Transaction Acknowledgement
  • Transaction Continuation
  • Provisioning Bearer Control(会话管理)
    • Link Open
    • Link ACK
    • Link Close
    • RFU(reserved for future use)

Link Establishment procedure

不同设备靠Device UUID区分
Device UUID,128-bit UUID,因为mac地址太简单了,不够复杂

image.png
  • 每个Generic Provisioning PDU应该有20~50ms延时
  • 分段
  • segments index 0~63个,第一个发transaction start PDU, 其他的发transaction continuation PDU.

Provisioning protocol

Provisioning PDUs

发起者和设备之间交流的媒介。
格式如下:

image.png

type如下:

image.png

传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道.

Provisioning behavior

Provisioning is performed using a five-step process:

  • beaconing
  • invitation
  • exchanging public keys(ECDH加密用的)
  • authentication
  • distribution of the provisioning data

ECDH,Deffie-Hellman 算法是 密钥交换算法,它的作用是解决如何在不安全的信道中安全的传输一些信息(主要是交换对称加密的密钥/参数)。ECDH 就是使用椭圆曲线函数的 DH 算法
a,b都有一对公钥,各自根据公钥计算出密钥,使用该密钥就行加密

下图是Provisioning process的整体流程,在下一节会对每个流程做详细描述。


image.png

Provisioning errors

一旦中间失败,没有恢复机制,必须从新开始配对。
发起方发生错误,会立即断开连接。
接收方发生错误,发送一个Failed PDU给发起方,由发起方断开连接。60s超时后,可以不同发送Failed PDU。

流程详解

基于PB-ADV

image.png
  • Invitation & Capabilities

    建立连接,检测device的兼容性。
    兼容性主要指:支持什么加密方式,(目前只有一种加密方法FIPS P-256 Elliptic Curve,
    就是ECDH),支不支持OOB等一些行为。

  • Exchanging public keys

    支持加密,即交换公共密钥,不支持不用

不支持加密的流程

image.png

支持加密的流程


image.png
  • Authentication
    认证,主要有三种方式。
    1.Output OOB
    device上展示一个Random number,用户在provisioner上输入这个number
    2.Input OOB
    provisioner上展示一个Random number,用户在device上输入
    3.Static OOB/no OOB
    没有Random number
    下述是三种方式的流程图
    Output OOB


    image.png

Input OOB


image.png

Static OOB

image.png

  • Distribution of Provisioning data
    该环节主要用来发送Network Key,IV index, Unicast Address(分配给节点的)等信息。然后该环节还会计算出一个session key用来加密Provisioning data。
    Provisioning data如下:


    image.png

加密

目前只支持一种加密方式FIPS P-256 Elliptic Curve,整体加密流程如下:
P是public key


image.png
image.png

最终算出一个session key用来加密provisioning data这些信息。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自>曾梦想仗剑走天涯 引言 关于开发证书配置(Certificates & Identifiers & ...
    MindTheGap阅读 3,202评论 0 8
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,338评论 19 139
  • 最近换了新手机号,原来银行预留的手机号都要更改,所以就在各大银行奔波,就见识了不同银行的服务人员的态度。 从每个人...
    小小星火阅读 214评论 0 1
  • 第一百一十五回 1、起初,贾宝玉觉得甄宝玉相貌俊美、性情相投,后来,因甄宝玉表达了自己想走仕途的想法,贾宝玉便觉得...
    楚歌儿阅读 551评论 0 0
  • 文|零度魍珏 上一份工作因为老板跑路不欢而散后,我失业一个月,狗屁老板欠了两个月工资,我已经三个月没有任何收入了。...
    云渡魍珏阅读 1,032评论 0 3

友情链接更多精彩内容