平時總是搞藍芽協議,所以總是對rf,bb,lmp比較感興趣,可能比較神秘,閒話不多說,直奔主題
訊息用於建立鏈路、加密和控制,是屬於acl-c層次的,比acl-u優先順序較高,並且不會**到更高層次,只是在晶元內處理
pdu格式如下圖所示:
每個pdu的payload size要求不同
1.匹配
當兩台裝置無共用鏈結字時,則基於pin和隨機數建立初始化鍵kinit。在驗證器向請求者發出lmp_in_rand時建立kinit鍵。如何建立鍵請參閱基帶
規範。然後進行認證, 其計算過程基於kinit鍵, 而非鏈結字。通過認證後,鏈結字即被建立(就是我們平時說的link key)。如圖所示流程:
2.建立鏈結字
鏈結字用於兩裝置間的所有後續連線的認證,直到該鏈結字改變為止。匹配過程中建立的鏈結字可以是組合鍵,或者是乙個單元的單元鍵。以下規則用於鏈結字的選擇:
* 如果一單元傳送 lmp_unit_key,另乙個單元傳送 lmp_comb_key,那麼該單元鍵即為鏈結字;
* 如果兩單元都傳送 lmp_unit_key,那麼主單元鍵即為鏈結字;
* 如果兩個單元都傳送 lmp_comb_key,鏈結字將按基帶規範所述過程進行計算。
lmp_unit_key 的內容是單元鍵與kinit進行xor操作的結果值。
lmp_comb_key 的內容是lk_rand與kinit進行xor操作的結果值。任何配置為使用組合鍵的裝置都將該鏈結字儲存在固定儲存器中。
3.認證
認證過程基於競爭應答模式(參見基帶規範)。驗證器傳送乙個lmp_au_rand pdu 給請求者,該 pdu 分組含乙個隨機數(或競爭碼)。請求
者計算出應答值,該應答是競爭碼、請求者 bd_addr 和保密字的函式。然後將應答發回驗證器驗證應答是否正確。
計算應答值的過程參閱基帶規範。認證應答的正確計算需要兩裝置共享同一保密字。主單元和從單元都可作為驗證器。以下協議資料單元可用於認證過程
此時分兩種情況
1)請求者具有鏈結字
如果請求者具有與驗證器關聯的鏈結字,則請求者計算出應答值並連帶 lmp_ sres 傳送到驗證器,由驗證器檢查其應答值。如果應答值不正確,
驗證器則傳送附加原因碼 authentication failure 的 lmp_ detach 終止
2)請求者無鏈結字
如果請求者沒有與驗證器關聯的連線鍵,在 lmp_ au_rand 收到後,請求者則傳送附加原因碼 key missing 的 lmp_not_accepted 訊息。
*華麗分割線:連線為模擬lmp的**,問題很多,就三天寫的·不為別的,大概思路是模擬下lmp,配對流程沒寫
*連線:lmp 模擬原始碼
藍芽LMP剖析(一)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!平時總是搞藍芽協議,所以總是對rf,bb,lmp比較感興趣,可能比較神秘,閒話不多說,直奔主題 訊息用於建立鏈路 加密和控制,是屬於acl c層次的,比acl u優先順序較高,並且不會 到更高層次,只是在晶元內處理 pdu格式如下圖所示 每個pdu...
藍芽L2CAP剖析(一)
邏輯連線控制和適配協議 the logical link control and adaptation layer protoco 縮寫為 l2cap l2cap通過協議多路復用 分段重組操作和組概念,向高層提供面向連線的和無連線的資料服務,l2cap還遮蔽了低層傳輸協議中的很多特性,使得高層協議應...
藍芽學習(一) 低功耗藍芽和經典藍芽概述
經典藍芽 classic bluetooth 和低功耗藍芽 bluetooth low energy,簡稱ble或者le 兩者有什麼區別?為什麼他們都叫 藍芽 bluetooth low energy和bluetooth smart兩者又有什麼區別?我的應用到底該選經典藍芽技術還是低功耗藍芽技術?這...