1. 程式人生 > >Mesh Profile (3.6)高傳輸層

Mesh Profile (3.6)高傳輸層

com 元素 移除 每一個 攻擊 完成 能夠 數據 根據

(翻譯自《MeshProfile v1.0》3.6 Uppper Transport Layer)

綜述

高傳輸層包含了來自訪問層的訪問數據或者來自高傳輸層內部的控制消息。並完成將消息傳輸給對側高傳輸層的工作。

對於來自訪問層的消息,會使用一個應用秘鑰完成加密和認證。這允許了在高傳輸層的接收過程中完成對接收到的消息的認證。

傳輸控制消息有高傳輸層內部生成,並且只在網絡層完成加密和認證。

高傳輸層訪問PDU

當網絡層PDU中的CTL字段為0時,高傳輸層PDU中包含一個訪問數據。這個PDU被認為是高傳輸層訪問PDU。

訪問數據的加密使用一個應用秘鑰或者設備秘鑰(需要確定究竟使用的什麽秘鑰完成加密)。加密後的訪問數據和相關的消息完整性檢驗值組成了高傳輸層訪問PDU。

加密後的訪問數據 | TransMIC

加密訪問數據

訪問數據有訪問層提供。

如果TransMIC是32bit,訪問數據大小可以為1~380octets。如果TransMIC是64bit,訪問數據的大小可以為1~376octets。

在高傳輸層,該字段是不透明的,而且該字段中的信息是沒有被使用的。

傳輸完整性檢驗

傳輸消息完整性檢驗(TransMIC)是一個32bit或者64bit的字段。用於認證訪問層數據沒有發生改變。

對於一個SEG設置為1的分片消息,TransMIC的大小由低傳輸層PDU的SZMIC字段確定。

對於一個非分片消息,TransMIC的大小為32bit。

註意:控制消息沒有TransMIC。

高傳輸層控制PDU

當CTL字段設置為1時,高傳輸層PDU包含了一個傳輸控制消息。

一個傳輸控制消息包括7bit的命令碼。該命令碼決定了參數的格式。命令碼字段不包括在參數字段中,但是包括在低傳輸層PDU的非分片控制消息中或者分片控制消息的每一個分片包中。

高傳輸層控制PDU並不再高傳輸層中完成認證而是依賴網絡層的認證。所有的高傳輸層PDU使用一個64bit的NetMIC。

低傳輸層可能將消息分片為更小的PDU用於通過網絡層發送。建議為8 * n octets(具體見文檔表格3.16)

最大的傳輸層控制PDU的大小是256octests。                             

高傳輸層行為

發送一個訪問數據

所有訪問消息的發送都在一個應用秘鑰和一個設備秘鑰的上下文中。訪問數據應該使用應用秘鑰或者設備秘鑰完成加密。TransMIC應該被設置為消息完整性檢驗值。

這個訪問消息應該申請一個序列號(SEQ)。在低傳輸層對一個消息分片的上下文中,該序列號(SEQ)於SeqAuth中的最低24bit相符合。序列號(SEQ)用於接收方認證和解密訪問數據。

低傳輸層PDU中的AKF和AID字段應該根據在高傳輸層使用應用秘鑰還是設備秘鑰做的加密和認證來確定。

如果使用應用秘鑰,那麽AKF字段應該被設置為1,AID字段應該設置為應用秘鑰表示符(AID)。

如果使用設備秘鑰,那麽AKF字段應該被設置為0,AID字段應該設置為0b 00000000。

高傳輸層在上一個高傳輸層PDU給某個目的地址發送的消息完成或者被取消之前,不可以發送一個新的分片的額高傳輸層PDU給相同的目的地址。

接收一個高傳輸層PDU

當收到一個高傳輸層訪問PDU時,訪問數據應該被解密並且TransMIC應該根據已知的應用秘鑰或者網絡秘鑰(根據AKF和AID字段要求確定使用哪一種秘鑰)完成認證。

如果高傳輸層訪問通過PDU認證並且通過了重復攻擊的檢驗,那麽該PDU可以傳遞給訪問層並攜帶這上下文信息,例如源地址,目的地址,以及用於認證和解密過程的秘鑰。

當收到一個高傳輸層控制PDU時,PDU中攜帶的目的地址應該被檢查是否和該節點元素的單播地址相匹配,以確定該消息是否應該被該元素處理。

如果節點提供了已經使能的朋友特性,並且節點和一個低功耗節點建立了朋友關系,並且消息的目的地址是當前該低功耗節點朋友訂閱列表中的一個地址,那麽消息應該被保存在合適的朋友隊列中。

傳輸控制消息

傳輸控制消息可以通過一個單獨的沒有分片的控制消息或者一些分片的控制消息完成發送。每條控制消息中包含一個7bit的命令碼字段,該字段決定了參數字段的格式。每條傳輸控制消息應該以盡可能最小的低傳輸層PDU個數被發送。

命令碼為0x00是指地傳輸層的終結,用於消息的分片和重組,不應該在高傳輸層發送。所有其他的控制消息在高傳輸層完成終結。

表3.39總結了傳輸層命令碼。

朋友輪詢消息

朋友輪詢消息由低功耗節點發送,用於請求一個朋友節點發送一條已經被保存的發送給該低功耗節點的消息。

該控制消息的命令碼為 0x01。

FSN字段表示朋友序列號,用於低功耗節點確認收到之前來自朋友節點的消息。

該消息需要將網絡層PDU中TTL字段設置為0.

該消息需要使用朋友安全憑據完成發送。

朋友更新消息

朋友更新消息由朋友節點發送給低功耗節點用於通知低功耗節點網絡安全參數已經發生改變或者正在發送改變或者朋友隊列為空。

Flags字段包含IV更新標誌和Key刷新標誌。其中

  • bit0表示Key刷新標誌。 0:不在階段2 ;1:在階段2
  • bit1表示IV更新標誌。 0:正常操作 ; 1:IV更新活動

IV index字段表示當前朋友節點所致的IV index。

MD字段指示了朋友隊列是否為空。0:朋友隊列為空;1:朋友隊列不為空。

該消息的命令碼為0x02。

該消息需要將網絡層PDU的TTL字段設置為0。

該消息需要通過朋友安全憑據發送。

朋友請求消息

朋友請求消息由低功耗節點向全部朋友組發送,用於尋找一個朋友節點。

Criteria字段表示朋友節點應該支持加入朋友關系協商的標準。其中,

  • bit5~bit6 表示RSSI因子。用於表示朋友節點在計算朋友提供延時時RSSI的影響。00:1;01:1.5;10:2;11:2.5
  • bit3~bit4 表示接收窗口因子。用於表示在計算朋友提供延時時支持接收串口的影響。00:1;01:1.5;10:2;11:2.5
  • bit0~bit2 表示最小隊列尺寸信息。用於表示朋友節點中可以保存在朋友隊列中最小消息個數。

RecieveDelay字段表示低功耗節點的接收延遲時間。0x0A~0xFF,單位1ms。

PollTimeOut字段表示低功耗節點設置的初始輪詢超時時間。0x00000A~0x34BBFF,單位100ms。

PreviousAddress字段表示之前朋友的單播地址。

NumElements字段表示低功耗節點的元素個數。用於根據該消息的SRC地址計算朋友節點單播地址的範圍。

LPNCounter字段表示低功耗節點已經發送的朋友請求消息的個數。

該消息需要將網絡層PDU中TTL字段設置為0。

該消息需要通過主安全憑據完成發送。

朋友提供消息

朋友提供消息有朋友節點發送,用於提供一個朋友關系。

ReceieveWindow字段由朋友節點支持。0x01~0xFF,單位1ms。

QueueSize字段表示朋友節點可用隊列的大小。即朋友節點可以保存的低功耗節點消息的總條數。

SubscriptionListSize字段表示朋友節點對於一個低功耗節點可以提供支持的訂閱列表大小。

RSSI字段表示朋友節點測得的RSSI。用於指示該朋友節點的接收信號強度。

FriendCounter字段表示朋友節點已經發送的朋友提供消息的條數。

該消息的命令碼為 0x04。

該消息需要將網絡層PDU的TTL設置為0。

該消息需要通過主安全憑證發送。

朋友清除消息

朋友清除確認消息

朋友訂閱列表增加

朋友訂閱列表移除

朋友訂閱列表確認

心跳

命令碼總結

朋友關系

一個朋友節點可以為低功耗節點保存消息。

功能總覽

為了優化低功耗節點的功耗,使用輪詢(polling)機制使低功耗節點的接收窗口最小。低功耗節點可以在它可以接收消息的時間告知朋友節點以獲得更新的消息。

在低功耗節點和朋友檢點保持朋友關系的時間內,存在一些不變的時間參數。

  • 接收延遲(ReceiveDelay)
  • 接收窗口(ReceiveWindow)
  • 輪詢時間(PollTimeout)

接收延遲表示低功耗節點發送一個請求和監聽一個響應之間的時間。

接收窗口表示低功耗幾點監聽響應的時間。當低功耗節點接收到一條來自朋友節點的消息後,低功耗節點可以不再監聽額外的消息。

請求消息可以是一個朋友輪詢消息,一個朋友訂閱列表增加消息,或者一個朋友訂閱列表移除消息。

對於朋友輪詢消息的響應可以是一個朋友更新消息或者一條保存的消息。

對於朋友訂閱列表增加或者移除的消息是一個朋友訂閱列表確認消息。

技術分享圖片

從圖中可以看到,低功耗節點在發出請求消息後即可以進入休眠,而朋友節點在約定的接收延遲後並且在低功耗節點的接收窗口中對低功耗節點做出響應。

輪詢時間超時定時器用於測量由低功耗節點發出的連續兩個請求間的時間。如果在該定時器超時前沒有一個請求被朋友節點接收到,那麽朋友關系將被認為終止。

為了建立朋友關系,支持低功耗特性的節點需要向全部朋友地址(一個固定的組地址0xFFFD)發送一個朋友請求。這個消息會被射頻通信範圍內的全部支持朋友特性的節點接收到。

朋友請求消息中包含了該低功耗檢點對於將來的作為自己朋友節點的需求。每一個支持朋友特性並且能夠支持朋友請求中需求的節點將通過發送一個朋友提供消息作為響應。

在這個朋友提供消息中也包含了關於該節點能力的額外信息。這使得低功耗節點可以決定使用哪一個節點作為自己朋友節點。

低功耗節點然後發送一個朋友輪詢消息給選中的朋友節點,朋友節點發送一個朋友更新消息作為響應。在此時朋友關系建立成功。

技術分享圖片

如果低功耗節點之前有一個朋友節點,那麽新的朋友節點將通知老的朋友節點自己是該低功耗節點當前的朋友。

在朋友關系建立之後,朋友節點保存了該低功耗節點對應的鞥有訂閱列表。該訂閱列表保存了低功耗節點訂閱的一系列組地址和虛擬地址。該列表是的朋友節點可以保存低功耗節點訂閱的消息。

朋友節點在朋友隊列中保存了發給低功耗節點的全部消息,包括最近的安全更新信息(IV index,IV更新標誌,Key刷新標誌等)。這些信息被稱為保存的消息。

低功耗節點如果需要獲取上面提到的保存的消息,需要發送朋友輪詢消息。那麽朋友節點將發送這些保存的消息作為響應。

保存在朋友隊列中的消息發送給低功耗節點需要得到確認和保持順序。為此,需要使用一個朋友序列號。該值保存在低功耗節點中,並在朋友輪詢消息中發出。當低功耗節點接收到一個有效的朋友輪詢消息的響應是,低功耗節點應該改變朋友序列號用於下次發送輪序消息時,朋友節點可以發送下一條消息。如果朋友節點沒有收到朋友輪詢消息的響應,那麽低功耗節點不改變朋友序列號,朋友節點將得知上一次消息沒有被低功耗節點正常接收並將重發上一條消息。

朋友關系的安全性

朋友特性

低功耗特性

分片和重組用例

心跳

心跳用於監測網絡中的節點並且發現節點間彼此距離多遠。

功能總覽

發布新校消息

接收心跳消息

Mesh Profile (3.6)高傳輸層