ACL連接的建立和釋放
從藍(lán)牙聯(lián)盟規(guī)范文檔里我們可以找到對(duì)應(yīng)說(shuō)明.
可以看到藍(lán)牙連接流程分為9個(gè)步驟,實(shí)線部分是必須步驟都许,虛線步驟是可選的步驟贱傀。
第一步轴合,創(chuàng)建連接
第一步創(chuàng)建連接,host端會(huì)通過(guò)hci指令發(fā)送create connection的命令給到controller平酿,這個(gè)命令里面包含指定藍(lán)牙設(shè)備地址凤优,控制層會(huì)通過(guò)這個(gè)地址執(zhí)行paging操作。
第二步蜈彼,可選的信息交換
第二部發(fā)送獲取對(duì)方藍(lán)牙設(shè)備特性信息筑辨,了解藍(lán)牙設(shè)備屬性等,例如是否支持OOB配對(duì)幸逆,也就是通過(guò)別的途徑交換配對(duì)信息棍辕,例如NFC藍(lán)牙設(shè)備等。
第三步还绘,連接請(qǐng)求
獲取完特性后楚昭,host端就可以發(fā)送LMP_HOST_CONNECTION_REQ PDU,這個(gè)是必選步驟拍顷,對(duì)端藍(lán)牙收到這個(gè)請(qǐng)求后抚太,會(huì)有三種響應(yīng)方式:
- 拒絕連接;
- 接受連接昔案;
-
接受連接但是請(qǐng)求自己為master尿贫;
connection-request
第四步,連接設(shè)備回應(yīng)
第一種情況:連接被拒絕踏揣。
第二種情況:連接請(qǐng)求同意庆亡。
第三種情況:連接接受,但是請(qǐng)求更換角色捞稿。
第五步身冀,AFH自適應(yīng)跳頻-Adaptive Frequency Hopping
在藍(lán)牙設(shè)備接受連接請(qǐng)求后,會(huì)交換特性括享,之后AFH會(huì)被使用搂根,host端根據(jù)干擾情況自動(dòng)跳到下一個(gè)頻段,會(huì)發(fā)送LMP_SET_AFH 和 LMP_CHANNEL_CLASSIFICATION_REQ PDU
第六铃辖、七步剩愧,鑒權(quán)和配對(duì)
前面準(zhǔn)備工作完成后,需要進(jìn)行身份認(rèn)證請(qǐng)求娇斩,整個(gè)過(guò)程就是獲取Link Key的過(guò)程仁卷。Link Key在后續(xù)數(shù)據(jù)傳輸時(shí)使用穴翩。
當(dāng)兩個(gè)設(shè)備事第一次進(jìn)行連接時(shí),由于雙方都沒有保存link key,所以需要進(jìn)行授權(quán)驗(yàn)證锦积,控制器向host發(fā)送link key請(qǐng)求芒帕,如果host回復(fù)的是negative,接下來(lái)就進(jìn)入配對(duì)過(guò)程。如果host返回positive丰介,那雙方就不需要進(jìn)入配對(duì)過(guò)程背蟆。
在藍(lán)牙配對(duì)過(guò)程中,大部分使用secure simple pairing方式哮幢,也就是SSP配對(duì)带膀。首先會(huì)使能簡(jiǎn)單配對(duì),OOB(out of band)配對(duì)會(huì)最先考慮橙垢,如果雙方都支持垛叨,則優(yōu)先使用OOB。
開始簡(jiǎn)單配對(duì)后柜某,先進(jìn)行特性交換嗽元,交換有關(guān)鑒權(quán)的需求,以及最重要的雙方藍(lán)牙設(shè)備具有怎么樣的人機(jī)交互能力喂击,也就是io capabilities exchange,也就是獲取對(duì)方設(shè)備是不是支持輸入还棱,支持顯式等功能,根據(jù)雙方具有的人機(jī)交互能力惭等,選擇合適的配對(duì)方式
接下來(lái)就是雙方藍(lán)牙設(shè)備交換public key了珍手,當(dāng)收到對(duì)方藍(lán)牙設(shè)備的公鑰,利用它就可以計(jì)算出Diffie Hellman密鑰辞做,也就是DHKey了琳要,這個(gè)DHKey我們后面會(huì)看到,就是利用它來(lái)生成link key
根據(jù)前面的feature exchange的結(jié)果秤茅,有三種鑒權(quán)方式稚补,前面說(shuō)過(guò),OOB鑒權(quán)的優(yōu)先級(jí)最高框喳,由配對(duì)的雙方课幕,在配對(duì)過(guò)程之外,額外的交互一些信息五垮,并以這些信息為輸入乍惊,進(jìn)行后續(xù)的配對(duì)操作,額外信息稱作OOB(out of band),這個(gè)也是OOB的由來(lái)放仗。
接下來(lái)的鑒權(quán)方式叫做MITM(man-in-the-middle)也就是中間人鑒權(quán)润绎,方式中帶人,也就是說(shuō)需要人的參與,這種方式有2種莉撇,先介紹Numeric comparision方式鑒權(quán)呢蛤,這種方式需要兩個(gè)藍(lán)牙設(shè)備都具備顯式的能力,然后兩個(gè)設(shè)備自行產(chǎn)生6位數(shù)字棍郎,用戶比較后確認(rèn)其障,最常見的場(chǎng)景就是手機(jī)與手機(jī)通過(guò)藍(lán)牙之間進(jìn)行的配對(duì)連接。
中間人鑒權(quán)的第二種方式涂佃,叫做passkey entry,這種方式要求一方藍(lán)牙設(shè)備具備輸入的能力励翼,比如藍(lán)牙鍵盤,一方藍(lán)牙設(shè)備具有顯式的功能巡李,比如手機(jī)抚笔,一端顯式配對(duì)碼扶认,一點(diǎn)輸入配對(duì)配對(duì)碼進(jìn)行配對(duì)侨拦,這種方式常用在平板或者pc和藍(lán)牙鍵盤之間的連接。
最后還有一種鑒權(quán)方式辐宾,叫做just work,它不需要用戶的參與狱从,兩個(gè)設(shè)備自行協(xié)商配對(duì),最常用的場(chǎng)景就是手機(jī)和藍(lán)牙耳機(jī)進(jìn)行配對(duì)叠纹。
上面鑒權(quán)交互結(jié)束后季研,就會(huì)通過(guò)算法將DHKey計(jì)算得到Link Key,并用在后續(xù)交互過(guò)程的輸入誉察。這一步完成后与涡,LM控制器通過(guò)HCI發(fā)送HCI_LINK_KEY_NOTIFICATION事件來(lái)通知host得到Link Key。
第八步持偏,啟動(dòng)加密
完成了鑒權(quán)和配對(duì)的過(guò)程驼卖,就會(huì)開始利用得到的link key進(jìn)行加密的連接,利用加密信息鸿秆,可以相互傳送一些私密信息酌畜,如encryption information,identity information等,進(jìn)行最后的連接過(guò)程交互卿叽。
第九步桥胞,連接完成
最后,連接建立完成考婴,雙方藍(lán)牙設(shè)備LM控制器向各自的host發(fā)送LMP_SETUP_COMPLETE PDU事件贩虾,將底層連接建立的句柄發(fā)送給上層,使用這個(gè)連接handle就可以用來(lái)發(fā)送上層的數(shù)據(jù)了沥阱,那么整個(gè)的連接流程就完成了整胃。
最后,連接斷開
當(dāng)連接不需要維持時(shí),雙方都可以發(fā)起終止連接命令或分離連接請(qǐng)求屁使。