蓝牙mesh数据包的结构如下图:
总长31个字节。
Length (1Byte):数据长度
Type (1Byte):广播类型
IVI (1bit):用来认证加密Network PDU的IV index的最低位
NID (7bits):网络ID,network ID。从网络密钥(NetKey)派生的值,用于识别保护此PDU的加密秘钥和隐私密钥。决定使用哪个mesh网络传递数据
CTL (1bit):网络控制,用于确定消息是否包含访问消息或者控制消息
TTL (7bits):生存时间。0 不会被中继,1 不会被中继,2-126可能已被中继,并且可以被中继,127 没有被中继过,可以被中继。
SEQ (3Byte):序列号,每个Mesh信息的SEQ必须不同。
SRC (2Byte):源地址,必须是一个单播地址
DST (2Byte):目标地址,可以使单播地址、组播地址、虚拟地址。
MIC(4 Byte):网络消息完整校验值
Header (1Byte):包头
TMIC(4 Byte):传输层消息完整校验值
Opcode(3 Byte):操作可以是1、2或3个字节序列,操作码的第一个字节决定了使用字节的数量。如果操作码第一个字节的最高位是0,那么操作码只包含一个字节。如果最高两位是10,那么操作码包含2个字节。如果最高的两位是11,那么操作码包含3个字节。
1-octet 操作码是蓝牙SIG定义的应用操作码,最多可以定义127个1-octet操作码,0x7F是保留给未来使用的。
2-octet也是蓝牙SIG定义的应用操作码,最多可以定位16384个2-octet操作码
3-octet操作码是供制造商使用的操作码,每一个公司共有64个3-octet操作码。
Parameters(8 Byte):有效负载