搜索
发新帖
Asuswrt梅林固件下载2017路由器技术盘点NETGEAR Vs ASUS NETGEAR 免费延保
开启左侧

蓝牙Mesh 技术 一起学 入门篇(2)

[复制链接]
251 0

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
上次我们一起聊了一下蓝牙mesh的一点点历史。今天我们要开始讲讲究竟什么是蓝牙MESH。
(对了,今天的主食除了馒头还有花卷!看看能不能打出葱香味!)

蓝牙mesh的基本概念。
一对一,多对一还是网状网(mesh)

当我们谈到蓝牙的连接方式的时候,我们自然而然的会想到耳机应用,这是一个非常典型的点对点的应用(Point-to-Point)。大部分的蓝牙和蓝牙LE的设备都是用这种简单的点对点的通讯方式。在蓝牙的核心标准里(core specifiction), 也叫做 "Piconet"。其实这种方式在我们大部分的无线应用场合中都是存在的,比如,你的手机和wifi路由器/AP的连接, 手机与基站的连接,还有无线鼠标等等都是这种方式。
这种方法的最大的好处是简单!简单不单单指的是连接简单,后面的网络管理, 密钥维护都会简单很多。想像一下你和你老婆讨论一下早饭吃牛奶还是吃豆浆,这估计废不了什么口舌吧。(什么?你们常常为了这个吵半天?!,好吧,我对你表示深深的同(bi)情(shi))。

当然,一个设备也可以分别和多个设备建立多个连接,比如你的手机可以通过蓝牙连你的手环,耳机,心率带。。。我们管这个叫做一对多的连接(Many to One)。 想想一下你要负责爹妈,媳妇,儿子,女儿多个人的早饭(好男人就是我!), 那你可以分别问一下他们要吃什么,统计好了一起弄。 这里面的问题就是,在一对多的系统里面,手环,耳机这些产品是不会互相通讯的。也就是说,他们所有的联系都要通过中间的那个节点(hub),例如家里的wifi网络。
Mesh网络,就是一个多对多网络(Many to Many)。 每个设备节点都可以和别的节点自由通讯。在这种拓扑中,因为很多节点可以中继(relay)收到的消息(Message), 所以端对端的通信可以比原来单点之间的通讯距离要远很多。就好像小组讨论自由发言,如果做的太远听不见的话,别人也可以代为传话。

1.png

  • 设备和节点(Devices and Nodes)

如果一个设备成为了蓝牙mesh网络的一部分,我们就把它叫做节点(node)。 反之,我们就把它叫做“未配网的设备”(unprovisioned devices)。把未配网的设备变成节点的过程我们把它叫做 “配网” (provisioning)。绕来绕去的,大家听懂了吗? 也就是说,没配网之前,你就是个设备,入了网了,才能称为节点。 比如,你去超市买了个蓝牙mesh的灯,用之前就是个设备。等到你把他连上建立的mesh网络,可以和开关什么联动的时候,它才是一个节点。
既然讲到配网,还是拿wifi做例子。你要连接一个wifi的网络,你一定要知道一个密钥,也就是常见的wifi密码,当你用这个密码去和AP连接了以后,其实两个设备中间还要进行多次的沟通。在蓝牙mesh里面也一样。在这里我们有两个东西,一个未配网的设备,比如超市买回来的灯,一个配网器(Provisioner),常见的比如手机或者平板。他们都要有一系列互相知道的密钥,像“天王盖地虎”,“三点暗藏革命宗,入我洪门莫通风”,“曲径通幽处,禅房花木深”。。。这么多的密码里面有一个叫做网络密钥(network key)或者简称NetKey, 比如“芝麻开门”!你知道了“芝麻开门”就可以入网,但是你后面的配网条件不满足,也是然并卵。我们讲个中篇的时候还会详细得讲这个过程。

  • 元素

这是个新词,也是个蓝牙mesh的术语。他的定义应该是在设备中可以寻址访问的实体。是不是更晕啦。还是拿灯做例子。看到下面的那个灯了吗?这个灯设备有三个子灯,每个子灯可以被独立的控制。那么这个灯在mesh网络里就叫做Node节点,每个子灯就叫做元素element。清楚一点没?

2.png

  • 消息(Messages)

消息也是蓝牙mesh里的一个重要概念。当一个节点需要查询别的节点的状态(Status)或者控制别的节点的时候,就需要发一个对应类型的消息。当一个节点向别人报告状态改变的时候,他也需要发出一个消息。在蓝牙mesh里面定义了很多种类型的消息,每种消息都有对应的操作码(opcode)。消息可以按照有应答(acknowledged)和没应答(unacknowledged)来分类。 和大多数的通讯系统一样,有应答的消息需要接收节点给个响应。“发给你了” “收到两条了”。这样做有两个目的:一是告诉你我收到了。二是可以返回一些需要的值。如果发现没有收到应答,发送端可以再次发送。当然,如果是不用应答的消息,接收端收到就算了,不会告诉发送端的。

  • 地址(Addresses)

要发消息,我应该发给谁呢?那一定会从一个地址发给另一个个地址。在蓝牙mesh里面定义了三种类型的地址。单播地址(unicast address),组播地址(group address)和虚拟地址(virtual address)。
唯一性的单播地址可以识别出一个元素。这个地址是在配网的时候分配给设备的。一个mesh网络可以有32767个单播地址。

组播地址是一个表示一个及以上元素的广播地址。组播地址可以由蓝牙SIG来定义(SIG Fixed Group Addresses), 也可以动态分配。目前SIG定义了4个组播地址,分别是“All-proxies”, “All-friends”,“All-relays” and “All-nodes”。(哇塞,什么叫proxy,friend, relay啊? ,不着急, 我们后面慢慢说。动态分配的组播地址是设计成在用户配置的时候,可以分配代表一些实际的场所,比如可以定义几个组播地址代表几个不同的房间。一共可以有16384个组播地址,其中SIG保留了256个,其他16128个都是动态分配的。

虚拟地址是个挺有意思的概念。先让我们看看虚拟地址和组播地址在mesh里面的定义。

A virtual address is a multicast address and can represent multiple elements on one or more nodes.
A group address is a multicast address and can represent multiple elements on one or more nodes.


有没有发现,是完全一样的!!就这么神奇! 我刚看到的时候, 眼睛都看花了还是挑不出差别。简单来说,基本可以认为虚拟地址是组播地址的一个扩展。虚拟地址可以使用128位的标签Label UUID逻辑上来表示。可是每次要传这么长的uuid不是很累?于是有用了哈希值来表示这些UUID。一共有16384个哈希值,每个哈希值代表一串虚拟地址。所以会有非常多的虚拟地址可以使用。按照SIG的说法,虚拟地址不用集中管理,增加了随意性, 更像一个标签。不如每个品牌出产的投影机都可以使用虚拟地址被预配置成一个场景使得以后的寻找会更加简单。

~~今天这顿饭干货不少,也吃的饱饱的。后面还有很多重要的概念,请听下回分解。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表