什么是Attribute protocol
简单来说,这个协议就是用来给Server和Client进行通信的协议。Server端保存有一个类似“属性数据库”的东西,包含了一系列的属性及其特性。而Client端可以通过ATT协议从Server端获取这些属性。再具体一些,Client可以查询(Discover)、读取(read)甚至配置(write)Server中保存的属性。通常是在配置之后,Server端可以实时的告知Client端属性值的变化。通知可以是无需Client应答的(notification),也可以是需要Client响应的(indication)。
Server端的Attribute
server端保存了一系列的attribute,这些attribute由四个基本元素组成:
- attribute handle
- attribute type
- attribute value
- attribute permissions
Attribute handle其实就是一个属性在server端的索引。它对每个属性来说都是唯一的,不可有重复的值,否则Client端无法准确定位到某一个属性。Handle的范围是 [0x0001, 0xFFFF)。
Attribute type是属性的类型,ATT中使用一个(16/128bits)的UUID来表示。虽然概念是属于ATT协议,但ATT本身 并没有声明具体的UUID来作为某一个attribute type。这意味着,ATT只是提供了一个类似框架的东西,具体内容怎么填,还是由上层来定义。比如GATT(Generic Attribute Profile)就定义了几个基本的attribute type:Primary Service(UUID为0x2800)、Characteristic(UUID为0x2803)。
Attribute value是一个属性的值,不过这里仅仅是ATT这一层的value,上层协议可以对其进行更具体的划分。还是以GATT为例,一个Characteristic的attribute value就由property、value handle和UUID三部分组成。
最后一个元素attribute permissions,它描述了一个属性的访问权限,包括
- read
- write
- encryption
- authentication
- authorization
比较特殊的是,这些权限由上层定义,对于ATT来说却是不可见的,Client无法获取到Server中属性的permissions。</