1 一个BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址): Public Device Address和Random Device Address。 而Random Device Address又分为Static Device Address和Private Device Address两类。 其中Private Device Address又可以分为Non-resolvable Private Address和Resolvable Private Address。 它们的关系如下所示: 2 Static Device Address是设备在上电时随机生成的地址,格式如下: Static Device Address的特征可总结为: 1)最高两个bit为“11”。 2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。 3)在一个上电周期内保持不变。 4)下一次上电的时候可以改变。但不是强制的,因此也可以保持不变。 如果改变,上次保存的连接等信息,将不再有效。 Static Device Address的使用场景可总结为: 1)46bits的随机数,可以很好地解决“设备地址唯一性”的问题,因为两个地址相同的概率很小。 2)地址随机生成,可以解决Public Device Address申请所带来的费用和维护问题。 3 Non-resolvable private address和Static Device Address类似,不同之处在于,Non-resolvable private address会定时更新。 更新的周期称是由GAP规定的,称作T_GAP(private_addr_int) ,建议值是15分钟。 其格式如下: 特征可总结为: 1)最高两个bit为“00”。 2)剩余的46bits是一个随机数,不能全部为0,也不能全部为1。 3)以T_GAP(private_addr_int)为周期,定时更新。 注1:Non-resolvable private address有点奇怪, 其应用场景并不是很清晰。地址变来变去的,确实是迷惑了敌人,但自己人不也一样被迷惑了吗? 因此,实际产品中,该地址类型并不常用。 4 Resolvable private address比较有用,它通过一个随机数和一个称作identity resolving key (IRK) 的密码生成, 因此只能被拥有相同IRK的设备扫描到,可以防止被未知设备扫描和追踪。其格式如下: 特征如下: 1)由两部分组成: 高位24bits是随机数部分,其中最高两个bit为“10”,用于标识地址类型; 低位24bits是随机数和IRK经过hash运算得到的hash值,运算的公式为hash = ah(IRK, prand)。 2)当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本机的IRK,和该地址中的prand, 进行同样的hash运算,并将运算结果和地址中的hash字段比较,相同的时候,才进行后续的操作。 这个过程称作resolve(解析),这也是Non-resolvable private address/Resolvable private address命名的由来。 3)以T_GAP(private_addr_int)为周期,定时更新。哪怕在广播、扫描、已连接等过程中,也可能改变。 4)Resolvable private address不能单独使用,因此需要使用该类型的地址的话, 设备要同时具备Public Device Address或者Static Device Address中的一种。 |