底層傳輸層將來自上層傳輸層的PDU發(fā)送給另外一個節(jié)點(diǎn)谈跛,如果數(shù)據(jù)不需要分包,就單個底層傳輸層PDU發(fā)送出去寂曹,如果長度太長,則需要對數(shù)據(jù)分包之后再發(fā)送出去回右。接收消息時隆圆,也會判斷是否是分包數(shù)據(jù),如果是分包數(shù)據(jù)翔烁,則再組裝之后渺氧,再傳給上層傳輸層。
底層傳輸層PDU
底層傳輸層PDU的第一個字節(jié)的最高位是SEG字段蹬屹,也是最重要的一個位侣背,該字段用來確認(rèn)此PDU是經(jīng)過分包的還是未分包消息。在網(wǎng)絡(luò)層中慨默,CTL字段確定消息是訪問消息還是控制消息贩耐。根據(jù)這兩個字段值的不同,可以將消息分為4種類型:1.未分包訪問消息 2.分包訪問消息 3未分包控制消息 4.分包控制消息
CTL | SEG | 底層傳輸層PUD類型 |
---|---|---|
0 | 0 | 未分包訪問消息 |
0 | 1 | 分包訪問消息 |
1 | 0 | 未分包控制消息 |
1 | 1 | 分包控制消息 |
1.未分包訪問消息
字段 | 長度(bits) | 備注 |
---|---|---|
SEG | 1 | 0=未分包消息 |
AKF | 1 | 應(yīng)用秘鑰標(biāo)志位 |
AID | 6 | 應(yīng)用秘鑰標(biāo)識 |
Upper Transport Access PDU | 40~120 | 上層傳輸層訪問PDU |
上層傳輸層根據(jù)應(yīng)用秘鑰(Application Key)和設(shè)備秘鑰(Device Key)來設(shè)置應(yīng)用秘鑰標(biāo)志位(AKF)和應(yīng)用秘鑰標(biāo)識(AID)的值厦取。
PDU格式:
2.分包訪問消息
字段 | 長度(bits) | 備注 |
---|---|---|
SEG | 1 | 1=分包消息 |
AKF | 1 | 應(yīng)用秘鑰標(biāo)志位 |
AID | 6 | 應(yīng)用秘鑰標(biāo)識 |
SZMIC | 1 | TransMIC長度 |
SeqZero | 13 | SeqAuth的低有效位 |
SegO | 5 | 分包號 |
SegN | 5 | 最后一包分包號 |
Segment m | 8~96 | 上層傳輸層訪問PDU中的Segment m |
SZMIC字段表示上層傳輸層訪問PDU中的TransMIC的大小潮太。若SZMIC字段為0,則TransMIC是一個32bit的值;若SZMIC字段為1铡买,TransMIC則是一個64bit的值更鲁。
SeqZero字段由上層傳輸層設(shè)置;SegO字段應(yīng)被設(shè)置為該上層傳輸層PDU的m分包的分包號(從0開始)奇钞;SegN字段應(yīng)該被設(shè)置為該上層傳輸層PDU的最后一個分包號岁经。
Segment m字段是分包號為m的內(nèi)容,除最后一個分包外的分包Segment m蛇券,它的內(nèi)容是從第12×m字節(jié)到第12×m+11字節(jié),而最后一個分包內(nèi)容則是從第12×m字段到消息結(jié)尾樊拓。
對于相同的上層傳輸層訪問PDU纠亚,每個分包訪問消息的AKF、AID筋夏、SZMIC蒂胞、SeqZero和SegN字段應(yīng)該具有相同的值。
3.未分包控制消息
未分包控制消息用于傳輸一個應(yīng)答消息或者傳輸控制消息条篷。
字段 | 長度(bits) | 備注 |
---|---|---|
SEG | 1 | 0=未分包消息 |
Opcode | 7 | 0x00=分包應(yīng)答\n 0x01到0x7F=傳輸控制消息的OPCode |
Parameters | 0到88 | 傳輸控制消息參數(shù) |
分包應(yīng)答消息的Opcode字段應(yīng)設(shè)為0骗随,底層傳輸層使用分包應(yīng)答消息來確認(rèn)分包消息。Parameters字段根據(jù)Opcode字段的需要來設(shè)置赴叹。
分包應(yīng)答消息格式
字段 | 長度(bits) | 備注 |
---|---|---|
SEG | 1 | 0=未分包消息 |
Opcode | 7 | 0x00=分包應(yīng)答 |
OBO | 1 | 朋友代理低功耗節(jié)點(diǎn) |
SeqZero | 13 | 上層傳輸層PDU的SeqZero |
RFU | 2 | 保留 |
BlockAck | 32 | 分包的塊應(yīng)答 |
OBO為0鸿染,表示接收信息的節(jié)點(diǎn)直接尋址;OBO字段為1乞巧,表示接收信息的是朋友節(jié)點(diǎn)涨椒,朋友節(jié)點(diǎn)代表低功耗節(jié)點(diǎn)應(yīng)答此消息。
SeqZero字段應(yīng)被設(shè)置為被應(yīng)答的上層傳輸層消息的SeqZero绽媒。
BlockAck字段應(yīng)被設(shè)置為收到的分包蚕冬。最低有效位,即位0表示分包0是辕;最高有效位囤热,即位31表示分包31。如果位n被設(shè)置為1获三,則表示應(yīng)答分包n旁蔼。大于SegN的分包的位應(yīng)被設(shè)置為0并在接收時忽略。
如果在接收的分包信息中TTL為0石窑,則建議在發(fā)送分包應(yīng)答消息中也將TTL設(shè)置為0.
4.分包控制消息
當(dāng)傳輸控制消息不適合使用單個網(wǎng)絡(luò)層PDU來傳輸?shù)臅r候牌芋,就使用分包控制消息來傳輸。
分包控制消息的格式
字段 | 長度(bits) | 備注 |
---|---|---|
SEG | 1 | 1=分包消息 |
Opcode | 7 | 0x00=保留\n 0x01到0x7F=傳輸控制消息的OPCode |
RFU | 1 | 保留 |
SeqZero | 13 | SeqAuth的低有效位 |
SegO | 5 | 分包號 |
SegN | 5 | 最后一包分包號 |
Segment m | 8~64 | 上層傳輸層訪問PDU中的Segment m |
- OPCode字段由上層傳輸層設(shè)置松逊,0x00為保留值躺屁,收到后不得傳輸,直接忽略
- SeqZero字段應(yīng)由上層傳輸層設(shè)置经宏。
- SegO字段應(yīng)被設(shè)置為該消息中包含的上層傳輸層PDU的分包號(從0開始)犀暑。
- SegN字段應(yīng)被設(shè)置為該上層傳輸層PDU的最后一個分包號驯击。
- Segment m字段是分包號為m的內(nèi)容,除最后一個分包外的分包Segment m耐亏,它的內(nèi)容是從第8×m字節(jié)到第8×m+7字節(jié)徊都,而最后一個分包內(nèi)容則是從第8×m字節(jié)到消息結(jié)尾。
對于相同的上層傳輸層控制PDU广辰,每個分包控制消息應(yīng)具有相同的OPCode暇矫、SeqZero和SegN值。