一、iBeacon 本质上的“数据帧位置”
首先明确一点:
iBeacon 并不是一个独立的 BLE 协议层,而是放在 BLE 广播数据(Advertising Data)里的一种格式约定。
它存在于:
BLE Advertising Packet
└── Advertising Data (AD Structure)
└── Manufacturer Specific Data (0xFF)
└── iBeacon Payload
二、BLE 广播包整体结构(简化)
| Preamble | Access Address | Header | Payload | CRC |
|
└── Advertising Data
我们关心的只有 Advertising Data。
三、Advertising Data(AD Structure)通用格式
每一段 AD 数据都是:
| Length (1B) | Type (1B) | Data (N Bytes) |
iBeacon 使用的是:
Type = 0xFF → Manufacturer Specific Data
四、iBeacon 在广播包中的完整字节结构
下面是最经典、标准的 iBeacon 数据帧(不含 BLE 头):
02 01 06
1A FF 4C 00 02 15
UUID(16B)
Major(2B)
Minor(2B)
TxPower(1B)
我们逐字节拆解。
五、逐字段详细解释(重点)
1️⃣ Flags(固定存在)
02 01 06
📌 这不是 iBeacon 专属,而是 BLE 广播的通用字段。
2️⃣ iBeacon 头部(核心标识)
1A FF 4C 00 02 15
拆解如下:
📌 看到 4C 00 02 15,基本可以确定是 iBeacon。
3️⃣ UUID(16 字节)
fda50693 a4e2 4fb1 afcf c6eb07647825
128-bit UUID
大端序
用于区分 Beacon 体系
工程含义:
“这是谁家的 Beacon / 哪个系统的 Beacon”
4️⃣ Major(2 字节)
00 01
无符号 16-bit
大端序
范围:0~65535
工程用途:
楼层
区域
场馆
子系统
5️⃣ Minor(2 字节)
00 0A
无符号 16-bit
大端序
范围:0~65535
工程用途:
单个 Beacon 唯一编号
精确到一个点位
6️⃣ TxPower(1 字节)
C5
有符号 int8
单位:dBm
表示 1 米处的 RSSI
例子:
0xC5 = -59 dBm
⚠️ 工程现实:
经常不准
有时是写死的
很多系统不依赖它
六、完整 iBeacon Payload 结构图
| Company ID | Type | Length | UUID | Major | Minor | TxPower |
| 2 bytes | 1B | 1B | 16B | 2B | 2B | 1B |
七、一个完整示例(十六进制)
02 01 06
1A FF 4C 00 02 15
FD A5 06 93 A4 E2 4F B1 AF CF C6 EB 07 64 78 25
00 01
00 0A
C5
八、接收端(SDK / JS)是如何解析的
SDK 实际做的事情
扫描 BLE 广播
找
Type = 0xFF判断
Company ID = 0x004C判断
02 15解析 UUID / Major / Minor / TxPower
计算 RSSI(接收端)
九、为什么你在 JS 里看不到“数据帧”
因为 SDK 已经帮你做了:
{
uuid: "...",
major: 1,
minor: 10,
rssi: -63,
accuracy: 1.8
}
JS 层看到的是“解析后的语义数据”,不是原始帧。
十、工程上必须知道的 5 个事实
iBeacon 只存在于广播
不建立连接
数据长度固定(21B payload)
没有加密
可以被完全伪造
十一、一句话总结(协议视角)
iBeacon 本质上是“Apple 定义的一种 Manufacturer Data 格式”。
理解了数据帧,你就理解了:
为什么它只能广播
为什么它适合识别而非定位
为什么 RSSI 才是接收端的核心