ble协议栈从零开始七(linklayer 之 privacy)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XG_2013/article/details/80766721

一、前言:

前面已经写了linklayer层的4篇文章了,感觉是自己给自己挖了坑了,至少还需要3篇才能写的完。自己挖的坑自己填吧,之前有一章说了白名单的策略,这一章我们来说privacy的策略。白名单策略说实话只能防君子,别人耿直的不把自己的地址伪装成你的white list中的地址。privacy的策略可以防一防一些没有素质的小人了,你发了的广播的pdu带有resolvable address,我要能解析广播的设备地址,我才会响应你。另外白名单一般会和privacy一起使用,后面会讲解。

二、resolving list

resolving list 是理解privacy功能的关键的地方。

resolving list 是 host 配置的,每一个记录它包含四条内容,分别是 local irk,peer irk,peer address type ,peer Identity address。还记得在linklayer前面的文章描述蓝牙的设备地址的时候,说了private address(resolving address or non resolving address)不能单独存在,必须配合一个 Identity address。 Identity address 可以是public address 或者是 static address。如果我们使能了白名单的策略,一旦我们解析对方的resolving address,白名单就会作用peer Identity address而不是resolving address。是不是白名单的策略配合privacy非常厉害!!!最终抛给host层的地址也是 Identity address。resolving list可以适用与advertising state,scanning state,initiator state。下面会从下面的三个状态进行阐述。

三、advertising state

3.1、 ADV_IND

当进入advertising state并且使用 connectable undirected events 时,可以在Adva的区域使用resolving address or non resolving address地址。如果host提供了resolving list,PDU的Adva区,使用resolving address(运用local irk生成,前面的文章已经说过生成的过程)。如果host没有提供了resolving list,PDU的Adva区使用host提供的 Identity address(public or static),之前说了很多次了,如果使用了resolving address,那么必须还要有一个Identity address(public or static)。

当接收到connect_req的报文时,包含一个(inita field)是resolving address ,linklayer需要解析这个resolving address

当接受到scan_req的报文是,包含一个(scana field)是resolving address ,linklayer需要解析这个resolving address

解析的过程是轮训resolving list 每一记录的的peer irk进行解析,解析成功了,把那一记录的peer Identity address抛给白名单。

3.2、 ADV_DIRECT_IND 
当进入advertising state并且使用  connectable directed events 时。这个过程稍微负载一点,ADV_DIRECT_IND的PDU包含
advertiser’s device address (AdvA field 和initiator’s device address (InitA field )。adva field
使用 resolving address。如果resolving list 中的peer irk 为0或者peer irk不存在,inita field 需要是用identity address,否则是用resolving address。当接收到connect_req的报文时,resolving address ,linklayer需要解析resolving address。

3.3、ADV_NONCONN_IND and ADV_SCAN_IND

基本和第一个一样,就是地址的区域的名字不一样。


扫描二维码关注公众号,回复: 3826783 查看本文章

四、SCANNING STATE

其实这个过程很简单,发送scan req的PUD中 scana field使用local irk生成,接受到 adv是先解析adva field,运用peer irk。

回复的时候 adva field保持不变。


五、initiating state

其实都是大同小意了,就注意一点。

initiator that has been instructed by the Host to use Resolvable Private
Addresses shall not respond to directed connectable advertising events that
contain Public or Static addresses for the initiator address, (InitA field)

这是原话。

六、附录











 

猜你喜欢

转载自blog.csdn.net/XG_2013/article/details/80766721