一、地址类型

二、白名单和Resolving List

三、LL层设备过滤

一、地址类型

学习资料:官方手册

Vol 6: Core System Package [Low Energy Controller volume]

Part B: Link Layer Specification

1.3 Device Address

这篇文章总结得比较好:

蓝牙协议分析(6)_BLE地址类型

http://www.wowotech.net/bluetooth/ble_address_type.html

 

BLE地址分为2大类:

1. 公有地址(Public Device Address):

这需要向IEEE购买,并且容易被伪造。

2. 随机地址(Random Device Address):

这又分为这2类:静态地址、随机地址。

2.1 静态地址(Static address):

每次上电周期,设备都可以选择一个随机数作为地址,在该上电周期中地址保持不变。

下一次上电时,设备可以继续使用上次的地址,也可以选择新的随机地址。

该类地址的最高2位为0b11。

不用购买,也容易被伪造。

2.2 私有地址(Private address):

这类地址每隔几分钟交换一次,一般建议是15分钟。

这又分为这2类:不可解析私有地址、可解析私有地址。

2.2.1 不可解析私有地址(Non-resolvable private address):

除最高2位是0b00外,其他46位都是随机数。

其应用场景并不是很清晰,地址变来变去的,确实是迷惑了敌人,但自己人不也一样被迷惑了吗?因此,实际产品中,该地址类型并不常用。

2.2.2 可解析私有地址(Resolvable private address):

最高2位是0b01,其余部分见下图。

在上一节视频里讲解过该类地址。

随机地址这一类目下,有3种地址(看上图中的3个红色箭头),它们可以根据最高2位互相区分。

但是公有地址和随机地址之间,无法通过地址值来区分。

因此,在发送的数据中会有一位被用来标记地址类型。

比如广播数据包中,头部信息中有一位“TxAdd”或“RxAdd”,0表示公有地址,1表示随机地址:

之前我们说过为了防止被冒充、为了隐私,建议使用“可解析私有地址”。

一个设备,它可能有公有地址,但是它仍可同时使用“可解析私有地址”。

一个设备,它上电后使用了静态地址,但是它仍可同时使用“可解析私有地址”。

也就是说,一个设备它可以使用变来变去的“可解析私有地址”,但是我们要称呼它时需要一个相对固定的地址。这个相对固定的地址,就叫“Identity Address”,它是公有地址或静态地址。

白名单里保存的都是“Identity Address”,“Identity Address”可能是公有地址也可能是静态随机地址,所以还需要“Address Type”来分辨它是哪一类。

二、白名单和Resolving List

学习资料:官方手册

Vol 2: Core System Package [BR/EDR Controller volume]

Part E: Host Controller Interface Functional Specification

7 HCI Commands and Events

7.8 LE Controller Commands

 

这篇文章总结得比较好:

蓝牙协议分析(8)_BLE安全机制之白名单

http://www.wowotech.net/bluetooth/ble_white_list.html

LL层可以根据设备的地址,过滤掉一些设备,免得频繁打扰Host导致浪费电量。

过滤设备,要借助于白名单。

白名单是一个列表,每一个表项中含有“Device Identity Address”和“Address Type”:

Device Identity Address:设备的公有地址或静态地址;

Address Type:设备的地址类型

为了防止别的设备冒充白名单里的设备,可以使用“可解析地址”。Controller为了能够解析地址,需要有一个“Resolving List”。

白名单和“Resolving List”的作用在上一节视频里介绍过,Host可以通过命令在白名单和“Resolving List”中增加、删减项目。

1. 白名单操作命令:

2. “Resolving List”操作命令:

三、LL层设备过滤

学习资料:官方手册

Vol 6: Core System Package [Low Energy Controller volume]

Part B: Link Layer Specification

4.3 Link Layer Device Filtering

Vol 2: Core System Package [BR/EDR Controller volume]

Part E: Host Controller Interface Functional Specification

7 HCI Commands and Events

7.8 LE Controller Commands

7.8.5 LE Set Advertising Parameters Command

7.8.10 LE Set Scan Parameters Command

7.8.12 LE Create Connection Command

LL层可以根据设备的地址,过滤掉一些设备,免得频繁打扰Host导致浪费电量。

LL层过滤设备的策略有如下3种,它们都使用同一个白名单:

1. 广播过滤策略(Advertising Filter Policy)

该策略用来决定广播设备的链路层,如何处理其他设备发来的扫描请求、连接请求。

Host可以发出下面的命令设置Controller的Advertising Filter Policy:

Advertising_Filter_Policy的含义如下:

0x00,禁用白名单机制,允许任何设备连接和扫描。

0x01,允许任何设备连接,但只允许白名单中的设备扫描。

0x02,允许任何设备扫描,但只允许白名单中的设备连接。

0x03,只允许白名单中的设备扫描和连接。

2. 扫描过滤策略(Scanner Filter Policy)

该策略用来决定处于扫描态的设备的链路层,如何处理其他设备发来的广播包。

Host可以发出下面的命令设置Controller的Scanner Filter Policy:

Scanning_Filter_Policy的含义如下:

0x00,禁用白名单机制,接受所有的广播包(除了那些目的地址不是该设备的directed advertising packets)。

0x01,只接受在白名单中的那些设备发送的广播包(除了那些目的地址不是该设备的directed advertising packets)。

0x02,Extended Scanner Filter policies相关,暂时不介绍。

0x03,Extended Scanner Filter policies相关,暂时不介绍。

3. 发起者过滤策略(Initiator Filter Policy)

该策略用来决定怎么去连接对端设备:要Host指定,还是自动连接白名单中的设备。

Host可以发出下面的命令设置Controller的Initiator Filter Policy:

Initiator_Filter_Policy的含义如下:

0x00,禁用白名单机制,使用Host提供的Peer_Address_Type and Peer_Address指定需要连接的设备。

0x01,连接那些在白名单中的设备,不需要Host提供Peer_Address_Type and Peer_Address参数。

第18.2节_地址类型与LL层设备过滤的更多相关文章

  1. 第11章 拾遗4:IPv6(1)_报文格式和地址类型

    1. IPv4和IPv6协议栈的比较 (1)IPv6取代IPv4,支持IPv6的动态路由协议都属于IPv6协议(如RIPng.OSPFv3). (2)Internet控制消息协议IPv6版(ICMPv ...

  2. 【Lucene3.6.2入门系列】第04节_中文分词器

    package com.jadyer.lucene; import java.io.IOException; import java.io.StringReader; import org.apach ...

  3. 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器

    首先是用于显示分词信息的HelloCustomAnalyzer.java package com.jadyer.lucene; import java.io.IOException; import j ...

  4. 智能合约语言 Solidity 教程系列2 - 地址类型介绍

    Solidity教程系列第二篇 - Solidity地址类型介绍. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是 ...

  5. 【Lucene3.6.2入门系列】第03节_简述Lucene中常见的搜索功能

    package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleD ...

  6. 智能合约语言Solidity教程系列2 - 地址类型介绍

    智能合约语言Solidity教程系列第二篇 - Solidity地址类型介绍. 写在前面 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你 ...

  7. IP地址类型

    为了适应不同的网络,IP地址空间被分为5类,分别是A.B.C.D和E类,其中A,B,C类最常用,D类用于组播,E类用于科研 IP地址类型 第一字节十进制范围 二进制固定最高位 二进制网络位 二进制主机 ...

  8. C#_02.12_基础二_.NET类型存储和变量

    C#_02.12_基础二_.NET类型存储和变量 一.核心一句:C#程序是一组类型声明(留待后面慢慢体会,现在不是很理解,不强说了) 二.数据类型: 1.预定义了16种数据类型: 其中13种简单数据类 ...

  9. 蓝牙协议分析(6)_BLE地址类型

    1. 前言 也许关注BLE的同学都注意到了,BLE设备有多种类型的设备地址,如Public Device Address.Random Device Address.Static Device Add ...

随机推荐

  1. 1、zabbix监控基础概念

    目录 为什么要使用监控? 监控怎么用? 去到一家新公司,应该如何搭建监控系统? 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛 ...

  2. python3.5.3rc1学习四:类

    class calculator: def add(x,y): return x + y print(added) def sub(x,y): return x - y print(sub) def ...

  3. leetcode 排序问题

    1.堆排序 //大顶堆的构造,传入的i是父节点 void HeapAdjust(int k[],int p,int n) { int i,temp; temp = k[p]; * p; i <= ...

  4. js字符串操作总结(必看篇)

    本文链接: https://www.jb51.net/article/97915.htm 字符方法 <!DOCTYPE html> <html lang="en" ...

  5. K-消亡的质数-(简单数学)

    https://ac.nowcoder.com/acm/contest/3346/K 题意:判断一个素数p是不是某两个数的立方差. 刚看到这道题一时半会都没有什么思路,看了题解恍然大悟,太久没碰数学或 ...

  6. Vue todos示例 在class中的应用表达式

    本篇博客用到了v-if,v-on,v-for三个没有写到的知识点,以后会详细写三篇博客,详细写这三个方法的用处 直接上代码: <!doctype html> <html lang=& ...

  7. C#.Net 使用 JsonReader/JsonWriter 高性能解析/生成 Json 文档

    Swifter.Json 是由本人编写的高性能且多功能的 Json 解析库.下图是 Swifter.Json 与 .Net 平台上的其他 Json 库性能对比: 在 Swifter.Json 近期更新 ...

  8. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

  9. tsar使用说明

    常用命令    tsar --nginx --live -i 1  查询1秒的状态每秒采样一次 系统模块 cpu 字段含义 user: 表示CPU执行用户进程的时间,通常期望用户空间CPU越高越好. ...

  10. git操作记录(如何回退到某个历史版本,如何提交部分文件等方法)

    当前项目使用git管理代码,在使用的过程中会遇到一些问题,这里记录下 1.合并代码后 在合并组员的代码后会出现下面的界面,开始的时候都会关闭,重新打开,乐此不疲到忍无可忍 解决方法: 出现这种界面是要 ...