認識BLE 5協議棧 —— 通用訪問規範層(GAP,Generic Access Profile)
轉自 http://www.sunyouqun.com/2017/04/understand-ble-5-stack-generic-access-profile-layer/
通用訪問規範GAP(Generic Access Profile)是BLE裝置內部功能對外的介面層,它規定了三個方面:GAP角色、模式和規程、安全問題。
GAP層將裝置分為四種角色,分別是外圍裝置,中央裝置,播報裝置和觀察裝置。這些裝置圍繞著廣播和連線的差異性而區分,外圍裝置和播報裝置對外發出廣播資料,中央裝置和觀察裝置掃描外部廣播資料,播報裝置和觀察裝置通常不建立連線,而外圍裝置和中央裝置可以建立連線。
圍繞著廣播和連線,GAP層定義了許多不同的廣播模式和連線模式,在不同模式下的操作稱為“規程”。
對於安全問題,GAP層提供了BLE安全管理器的一些列引數設定介面,包括:裝置的安全模式、IO能力、安全級別和金鑰長度等引數。裝置需要根據實際能力設定GAP的安全管理器引數,從而使用合適的配對方法。
GAP層可以與L2CAP建立聯絡,設定自定義的MTU值。
1. GAP角色
GAP層定義了四種角色:
- 外圍裝置(Peripheral)
- 中央裝置(Central)
- 播報裝置(Broadcaster)
- 觀察裝置(Observer)
外圍裝置可以傳送廣播資料和接收連線請求,進而建立連線,對應著鏈路層的廣播狀態。
中央裝置掃描廣播資料和傳送連線請求,進而建立連線,對應著鏈路層的掃描狀態或發起狀態。
播報裝置可以傳送廣播和接收掃描請求,通常不建立連線,對應著鏈路層的廣播狀態。
觀察裝置可以掃描廣播和發起掃描請求,通常不建立連線,對應著鏈路層的掃描狀態。
由於鏈路層支援同時擁有多個狀態機,GAP層也支援一個裝置同時具有多個GAP角色,比如在一個連線中充當中央裝置,同時對外發出廣播充當外圍裝置。
2.使用者介面
GAP定義了幾個與使用者操作密切相關的引數:裝置地址,裝置名,PIN碼和裝置外觀。
2.1 裝置地址
裝置地址在協議棧內部指BD_ADDR,在使用者介面顯示為“Bluetooth Device Address”。
裝置地址為一個6位元組的整形陣列成,可以用冒號作為分隔符,比如00:0C:3E:3A:4B:69。
在使用者介面,裝置地址以自然順序顯示,而內部的BD_ADDR則以逆序儲存,對於上述地址,BD_ADDR[0]等於0x69而不是0x00。
裝置地址分為共有地址和隨機地址,隨機地址分為靜態隨機地址和私有地址,私有地址進一步分為可解析的私有地址和不可解析的私有地址。常用的地址為共有地址和可解析的私有地址兩種型別。
關於裝置地址型別分析,參見鏈路層的文章介紹。
2.2 裝置名
裝置名稱僅起識別裝置的作用,在使用者介面顯示為“Bluetooth Device Name”。
裝置名最長可達248個位元組,但是對端裝置可能並不能顯示這麼長的名稱。
裝置名支援UTF-8編碼,因此裝置名可以使用中文。
2.3 PIN碼
PIN碼指兩個裝置配對時使用的passkey密碼,在使用者介面顯示為“Bluetooth Passkey”。
PIN碼為6位十進位制整形數,因此它的有效範圍為000000-999999(0x00000000 – 0x000F423F)。使用時必須顯示全部6位數字,包括前導0。
2.4 裝置外觀
裝置外觀僅起識輔助別裝置的作用,在使用者介面顯示為一個圖示或一個字串。
裝置外觀為一個2位元組數,掃描裝置可以通過裝置外觀值為裝置分配一個合適的圖示或描述。
3. 模式和規程
模式表示一種工作狀態,規程是針對模式實現的一套操作方法。模式和規程成對出現,GAP規定了五種模式和規程,如下:
模式 | 規程 |
---|---|
Broadcast Mode | Observer Procedure |
Discovery Mode | Discovery Procedure |
Connection Mode | Connection Procedure |
Bonding Mode | Bonding Procedure |
Periodic Advertising Mode | Periodic Advertising Procedure |
3.1 播報模式和觀察規程
播報模式並不等同於普通的廣播狀態。
在播報模式下,裝置在廣播事件中傳送不可連線的廣播資料,播報裝置可以響應外部的掃描請求。
播報裝置的廣播資料格式與普通的廣播資料相同,但是它不設定LE Limited Discoverable Mode和LE General Discoverable Mode這兩個標誌位,即播報裝置是Non-discovery裝置,這意味著中央裝置掃描到該廣播資料,應該選擇忽略。
觀察規程用於監聽播報裝置的廣播資料和掃描響應資料,也可以監聽普通廣播裝置。
3.2 可發現模式和發現規程
可發現模式分為三種,如下:
可發現模式 | 描述 |
---|---|
Non-Discoverable mode | 不可發現模式,掃描裝置應該選擇忽略這類廣播資料。 |
Limited Discoverable mode | 有限發現模式,廣播資料僅工作有限時間內是可被發現的。 |
General Discoverable mode | 普通發現模式,沒有額外限制。 |
有限發現模式將廣播資料的LE Limited Discoverable Mode位置為1,普通發現模式將廣播資料的LE General Discoverable Mode位置為1,如果這兩個標誌位均不設定,就是不可發現模式。
不可發現模式的廣播資料與其他兩種模式相同,所以其廣播資料仍然能夠被掃描裝置正確讀取,但由於沒有設定相應的標誌位,掃描裝置在解析廣播資料時應該尊重其不願意被發現的意圖,主動忽略該廣播資料。
使用觀察規程的觀察裝置,則不會忽略不可發現模式的廣播資料。
有限發現模式通常用於使用者指定的行為讓裝置臨時進入可發現狀態,可發現狀態持續時間為T_GAP[lim_adv_timeout]。
普通發現模式是預設模式,它沒有時間限制。
發現規程分為兩種,如下:
發現規程 | 描述 |
---|---|
Limited Discovery Procedure | 有限發現規程,僅能發現有限發現模式的廣播資料。 |
General Discovery Procedure | 普通發現規程,沒有額外限制。 |
有限發現規程,僅處理有限發現模式下的廣播資料,包括裝置地址和廣播資料,忽略其他發現模式下的廣播裝置。
常規發現規程,能普通發現模式和有限發現模式下的廣播資料。
此外還有一種發現規程,專用於發現裝置名稱,如下:
發現規程 | 描述 |
---|---|
Name Discovery Procedure | 裝置名發現規程,用於發現廣播裝置的裝置名稱。 |
裝置名發現規程,可以發現普通發現模式和有限發現模式下的廣播裝置名稱。
發現裝置名稱的步驟如下:
- 建立連線
- 讀取GATT中的名字特徵值
3.3 可連線模式和連線規程
可連線模式分三種,如下:
可連線模式 | 描述 |
---|---|
Non-Connectable Mode | 不可連線模式,無法與其他裝置建立連線。 |
Directed Connectable Mode | 定向可連線模式,可以與指定的中央裝置建立連線。 |
Undirected Connectable Mode | 非定向可連線模式,可以與任何中央裝置建立連線,這是預設的可連線模式。 |
而相關的連線規程則由四種,如下:
連線規程 | 描述 |
---|---|
Auto Connection Establishment Procedure | 自動連線建立規程,利用中央裝置的裝置地址白名單,一旦地址匹配就自動建立連線。 |
General Connection Establishment Procedure | 普通連線建立規程,這是預設的連線規程,沒有額外條件。 |
Selective Connection Establishment Procedure | 可選連線建立規程,利用中央裝置的裝置地址白名單,只有地址匹配的裝置才能建立連線。 |
Direct Connection Establishment Procedure | 定向連線建立規程,與指定地址的外圍裝置建立連線。 |
此外,還有兩個與連線相關的規程,如下:
規程 | 描述 |
---|---|
Connection Parameter Update Procedure | 連線引數更新規程,更新連線引數資訊。 |
Terminate Connection Procedure | 終止連線規程,終止當前連線。 |
3.4 可繫結模式和繫結規程
可繫結模式分為:
可繫結模式 | 描述 |
---|---|
Non-Bondable mode | 不可繫結模式,裝置不支援配對操作,在配對請求命令中清除Bonding_Flags標誌位。 |
Bondable mode | 可繫結模式,裝置將設定認證請求命令中的Bonding_Flags標誌位,並且儲存繫結資訊。 |
兩個未繫結的裝置,在訪問需要繫結許可權的資料時,執行繫結規程。
3.5 週期廣播模式和週期廣播規程
週期廣播模式分為:
模式 | 描述 |
---|---|
Periodic Advertising Synchronizability mode | 週期廣播同步模式,傳送週期廣播事件的同步資訊,適用於播報裝置, |
Periodic Advertising mode | 週期廣播模式,傳送週期廣播資料,適用於播報裝置 |
週期廣播規程為:
規程 | 描述 |
---|---|
Periodic Advertising Synchronization Establishment procedure | 週期廣播同步建立規程,接收週期廣播事件的同步資訊並同步週期廣播事件,適用於觀察裝置。 |
3.6 安全模式和認證規程
共有兩種安全模式:
安全模式 | 描述 |
---|---|
LE Security mode 1 | 安全模式1,使用認證資訊保證安全。 |
LE Security mode 2 | 安全模式2,使用數字簽名保證安全。 |
安全模式1下有四種安全級別:
- No security (No authentication and no encryption)
- Unauthenticated pairing with encryption
- Authenticated pairing with encryption
- Authenticated LE Secure Connections
四種安全級別圍繞著認證和加密進行,安全級別依次增加,第1種安全級別沒有認證和加密, 第2種安全基本提供未認證的加密,第3、4種安全級別能夠提供認證和加密。
安全模式2下有兩種安全級別:
- Unauthenticated pairing with data signing
- Authenticated pairing with data signing
假如裝置同時要求加密和數字簽名,將視認證需求選擇合適的安全模式,比如需要認證則選擇模式1.3,不需要認證則選擇模式1.2,如果需要安全連線則選擇模式1.4。
共有四種安全規程,如下:
規程 | 描述 | 適用安全模式 |
---|---|---|
Authentication procedure | 認證規程,執行認證和加密操作。 | 安全模式1 |
Authorization procedure | 授權規程,使用者行為確認是否為某個操作提供授權。 | 安全模式1 |
Connection data signing procedure | 連線資料簽名規程,在未加密的連線中傳輸認證的資料。 | 安全模式2 |
Authenticate signed data procedure | 認證已簽名的資料規程,校驗帶有前面的資料是否有效。 | 安全模式2 |
Encryption procedure | 加密規程,對連線和資料進行加密。 | 安全模式1 |
3.7 隱私規程
隱私與私有地址有密切關係,跟私有地址相關的規程如下:
規程 | 描述 |
---|---|
Non-resolvable private address generation procedure | 不可解析私有地址生成規程 |
Resolvable private address generation procedure | 可解析私有地址生成規程 |
Resolvable private address resolution procedure | 可解析私有地址解析規程 |
4. 廣播包
廣播包和掃描響應使用相同的資料格式,如下:
一個廣播包由多個AD Structure組成,傳統廣播包的最大長度為31位元組,擴充套件廣播包的最大長度為255位元組,未佔用的資料則補零。
一個AD Structure中包含三個元素:長度、廣播資料型別和廣播資料。
其中長度指廣播資料型別加上廣播資料的總長度,廣播資料型別決定了廣播資料的屬性,可以代表裝置名、裝置地址或服務的UUID。完整的廣播資料型別可以在官方網站檢索(連結)。
動態的廣播資料適合放在廣播包中傳送,靜態的廣播資料適合放在掃描響應包中傳送。
5. GAP特徵項
每個BLE裝置的GATT均包含必要的GAP服務項,GAP服務項包含以下特徵項:
特徵項 | UUID | 描述 |
---|---|---|
Device Name | 0x2A00 | 讀取裝置名稱 |
Appearance | 0x2A01 | 讀取裝置外觀 |
Peripheral Preferred Connection Parameters | 0x2A04 | 讀取期望的連線引數 |
Central Address Resolution | 0x2AA6 | 中央裝置支援解析地址,供外圍裝置讀取以確定中央裝置能否使用地址解析,僅在使能了隱私功能時使用,否則應刪除 |
Resolvable Private Address Only | 0x2AC9 | 裝置僅使用可解析的隨機地址,供對端裝置讀取以確定該裝置在繫結後是否僅使用可解析的隨機地址,僅在使能了隱私功能時使用,否則應刪除 |