liwen01 2025.10.01
前言
在一個筆記本電腦上,它的藍牙可以同時連接:手機,藍牙耳機、音響、鍵盤、鼠標、打印機等等外設。
這些設備有些是 BR/EDR, 有些是BLE,所以筆記本電腦的藍牙肯定是雙模藍牙,能同時支持BR/EDR 和 BLE 設備。
在這個由多個藍牙設備組成的網絡中,它們處於什麼狀態,各自的角色是什麼,它們又是通過什麼來區分彼此?
實際在不同的藍牙版本中,它們的定義有很大的變化。
在查看藍牙相關資料時,有些概念容易被搞混,也常常造成理解上的偏差。
(一)藍牙狀態
BR/EDR 與 BLE 使用不同的控制器,所以它們的鏈路控制器的狀態也存在明顯差異。
(1)經典藍牙狀態
STANDBY(待機狀態):設備默認狀態,在該狀態下設備沒有發出任何藍牙射頻信號,所以它功耗最低。在此狀態下,它只是在等待外部命令觸發狀態切換。
INQUIRY(查詢狀態):用於主動查找附近的藍牙設備,設備發送 Inquiry 請求,目標設備在 Inquiry Scan 狀態中會響應。
INQUIRY SCAN(查詢掃描狀態):設備週期性監聽查詢請求(Inquiry packets),如果收到合法的 Inquiry 請求,設備會迴應其地址和信息。
PAGE(尋呼狀態):發起連接使用的狀態,發起方已知目標設備的地址,發送 Page(尋呼包)嘗試建立連接、Page 包中包含目標設備的 BD_ADDR、重複發送尋呼直到目標設備響應或超時。
PAGE SCAN(尋呼掃描狀態):目標設備在該狀態中監聽尋呼包,如果接收到尋呼包,進入配對流程並建立連接。
SYNCHRONIZATION TRAIN(同步訓練狀態):發送一組同步包,讓對方設備更容易鎖定頻道,減少設備發現時間。
SYNCHRONIZATION SCAN(同步掃描狀態):設備監聽並鎖定同步訓練包,成功鎖定後進入下一步操作(如連接、配對)。
CONNECTION(連接狀態):雙方已經完成握手(Paging)並建立同步,可進行數據傳輸,包括 L2CAP 數據包、控制包、音頻數據等。
(2)經典藍牙 Page 狀態
使用 Wireshark 搭配 Bluetooth Dongle 抓取的 HCI 數據包,你會發現:沒有 Page 階段的數據包,因為它發生在控制器內部的射頻層(Baseband + LMP)。
你在 Wireshark 的 HCI 視圖中只能看到:
Sent: Create Connection
Event: Connection Complete
中間的 page 流程是控制器內部完成的,這部分數據不需要經過 Wireshark,所以也就顯示不了。
(3)經典藍牙 CONNECTION 子模式
它們的關係可以簡化為下面關係:
Connection State
├── Active Mode
│ ├── Sniff Mode
│ ├── Hold Mode
│ └── Park Mode
└── Connectionless Peripheral Broadcast Mode
注意:在藍牙核心規範V5.3中,Active Mode 模式下已經沒有 Park Mode 這個模式了。
Active Mode(活動模式):Active Mode 是默認模式。在此模式中,設備(從機)保持同步並始終監聽主機(Master)的 Poll 包。主從設備之間的通信是持續的、週期性的。從機必須在每個主機 Poll 時間點監聽,功耗較高。
Sniff Mode(嗅探模式):Sniff 模式是一種低功耗模式。從機不再持續監聽,而是按照約定的 Sniff 間隔(T_sniff) 定期監聽主機。其餘時間從機關閉接收機進入休眠。在 Sniff 窗口期間,從機能收發數據;窗口外從機不響應主機。
例如耳機在待機播放時段,保持低功耗但仍能響應主機的控制命令。優點是節能,缺點是通信延遲變高
Hold Mode(保持模式):Hold 模式也是低功耗模式的一種,但與 Sniff 不同。從機在指定時間內完全不參與連接通信;在 Hold 時間結束後,再恢復到 Active 模式。Hold 模式通常在從機需要執行其他任務(如掃描、建立新連接、或暫時關閉射頻)時使用
比如:一個設備可能暫時掛起當前連接以執行頁面掃描操作(Page Scan)
(4)BLE 藍牙狀態
BLE 狀態機以 Standby 為中心,其他狀態圍繞它轉換,設計更為節能與高效。
Standby(待機)狀態 :BLE默認狀態為 Standby,不進行任何廣播、掃描或連接操作,該模式下功耗最低。它是所有狀態的中心樞紐,可跳轉到任何其他狀態。
Advertising(廣播)狀態:設備週期性發送廣播包(ADV),告訴周圍設備“我在這兒”。
Scanning(掃描)狀態 :設備監聽並接收廣播包,可選擇性迴應廣播設備,實現設備發現(如手機找藍牙耳機)。
Initiating(發起連接)狀態:主設備(Central)在此狀態下發起連接請求給廣播設備(Peripheral)。
Connection(連接)狀態:設備之間建立了一個正式的連接。使用數據通道進行定時通信,支持讀寫服務、通知、長連接等操作。
Synchronization(同步)狀態:用於週期性廣播同步(如廣播音頻);設備不建立連接,僅同步獲取廣播內容。
Isochronous Broadcasting(等時廣播)狀態:BLE 5.2 引入的狀態,支持等時性數據廣播(如 LE Audio);廣播音頻數據流,無需連接即可接收;
(5)經典藍牙與BLE藍牙狀態的區別
經典藍牙 BR/EDR更適合持續大數據量的通信(如音頻、文件傳輸);
BLE 更適合低功耗、間歇、小數據量通信,特別是物聯網設備;
| 特性/對比點 | 經典藍牙(BR/EDR) | BLE(低功耗藍牙) |
|---|---|---|
| 狀態機複雜性 | 更復雜,包含 Inquiry、Page 等 | 更簡潔,以 Standby 為中心的放射狀狀態圖 |
| 廣播機制 | 沒有通用廣播,需先發現、再配對 | 支持廣播和掃描機制,無需連接也能傳輸信息 |
| 連接建立過程 | 分為 Inquiry + Page 兩階段 | Advertising + Initiating 一步完成 |
| 功耗控制 | 設計為連續音頻或數據傳輸,功耗較高 | 設計為間歇通信,功耗非常低 |
| 通信角色 | Piconet 主從結構(固定主從) | Central-Peripheral 靈活切換 |
| 支持的應用 | 傳統音頻(如耳機)、數據同步等 | IoT、傳感器、手環、LE Audio 等 |
| 新特性支持 | 不支持 LE Audio 等新協議 | 支持 Periodic Advertising、Isochronous Channel 等 |
(二)藍牙角色
在不同版本和不同模式中,藍牙的角色有些混亂。一會是 Master/Slave, 一會又是 Central/Peripheral 。
在藍牙5.2 之前,BR/EDR 控制器中一般稱呼為 Master/Slave,BLE 控制器中一般稱呼為 Central/Peripheral。
但是在藍牙 5.3 中,它們統一稱呼為 Central/Peripheral。
(1)經典藍牙角色
經典藍牙常見於:耳機、音箱、鼠標、鍵盤等
- 手機/電腦:一般做 Master(主設備),負責發起連接、控制時隙。
- 耳機/音箱/鍵盤/鼠標:一般做 Slave(從設備),等待手機/電腦來連。
(2)BLE 藍牙角色
在BLE藍牙控制器中,控制器的角色有好幾個:Advertiser(廣播者)、Scanner(掃描者)、Initiator(發起者)、Central(中心設備)、Peripheral(外設設備)
Advertiser(廣播者):在廣播信道上週期性發送廣告包,一般用於被發現、連接或廣播數據。
Scanner(掃描者):主動掃描廣播信道,接收廣告包。可以選擇發出 Scan Request 獲取更多信息。
Initiator(發起者):接收廣播後,主動發起連接請求的一方。一旦連接成功,就轉變為 Central。
Central(中心設備): 類似 Master,控制連接的時間和數據傳輸, 常見於手機、PC 等。
Peripheral(外設設備):被 Central 連接的一方,常見於手環、傳感器、耳機等。
BLE藍牙 從“廣播 → 掃描 → 建鏈”過程中,角色會逐步轉化:
Advertiser → Peripheral
Scanner/Initiator → Central
(3)其它層的角色
上面那説的 Central(原 Master) / Peripheral(原 Slave)是物理層 / 鏈路層 (Controller) 裏的角色。
在藍牙協議棧的不同層中,它們又有定義一些不同的角色
- Link Layer(底層鏈路角色):Central / Peripheral → 確定“誰發起連接,誰維持時鐘”
- Host 層協議(GATT/ATT/SM)角色:Client / Server → 確定“誰請求,誰提供數據”
- Profile 層(應用協議角色):Source/Sink, Host/Device, Controller/Target → 確定“誰是功能提供方,誰是功能使用方”
它們之間不是一一對應的,而是逐層映射:
- 物理連接角色(Central/Peripheral) → 決定誰主導鏈路
- 協議角色(Client/Server) → 決定誰發起請求
- 應用角色(Source/Sink 等) → 決定誰產生/消費具體業務數據
(三)藍牙地址
藍牙中設備地址 Bluetooth Device Address 與 接入地址 Access Address 是兩個完全不同的概念,但有時候它們容易被理解混亂。
(1)BD_ADDR 設備地址格式
每個藍牙設備都有一個唯一的 48 位地址(6 字節),類似於以太網中的MAC 地址,用於標識設備身份。
主要應用於:設備發現與連接,訪問控制(如連接白名單),通信加密中的密鑰派生。
BD_ADDR 的整體格式為 :藍牙設備地址 = NAP + UAP + LAP
| 字段 | 名稱 | 位數 | 説明 |
|---|---|---|---|
| NAP | Non-significant Address Part | 16 bits | 地址的高 16 位,通常表示廠商編號(OUI),由 IEEE 分配給廠商 |
| UAP | Upper Address Part | 8 bits | 地址的中間 8 位,通常用於形成 Access Code(訪問碼)時使用 |
| LAP | Lower Address Part | 24 bits | 地址的低 24 位,由設備製造商分配給設備,用於唯一標識設備 |
(2)BD_ADDR 設備地址分類
BD_ADDR
├── Public Device Address (公共地址)
│ └── 來源:IEEE 註冊的 EUI-48(廠家分配)
│ └── 作用:全局唯一,適用於 BR/EDR 或 BLE
│
└── Random Device Address (隨機地址)
├── Static Random Address (靜態隨機地址)
├── Private Resolvable Address (RPA,可解析私有地址)
└── Private Non-Resolvable Address (NRPA,不可解析私有地址)
Public Device Address(公共地址):結構與普通以太網 MAC 地址完全一致,它由藍牙設備製造商在出廠時燒錄進控制器(Controller),在全世界範圍內唯一。
傳統藍牙 BR/EDR(例如音箱、耳機等)幾乎都使用 Public Address,設備在廣播時直接使用 BD_ADDR 作為標識,可用於長期綁定(bonding)和身份識別。
Random Device Address(隨機地址):因為固定的 BD_ADDR 會暴露設備身份(例如 MAC 地址可被追蹤),所以 BLE 支持使用隨機地址。隨機地址又分為三大類。
(A)Static Random Address(靜態隨機地址):
在設備啓動時隨機生成,在一次啓動週期內保持不變,通常用於無隱私要求但又不想使用公共地址的場景。比如:一些 BLE 外設(如手環、燈泡)在上電後廣播自己的隨機固定地址。
(B)Private Resolvable Address(RPA,可解析私有地址):
週期性變化(例如每 15 分鐘更新一次),地址高2位為01;它的變化過程可被“已配對的設備”解析。比如:手機與手環已配對後,即使地址變化,仍能識別對方。
(C) Private Non-Resolvable Address(NRPA,不可解析私有地址):
週期性變化,每次廣播可能都不同,完全無法解析(無 IRK 參與),地址高2位為00;主要應用於一次性連接請求,或者是不需要被識別身份的設備廣播(如匿名信標)。
(3) Access Address 地址
Access Address: 是藍牙鏈路層中用於標識和同步數據包的一個 32-bit(4字節)地址。
它存在於所有藍牙物理層(PHY)數據包的包頭部分,作用類似於一個“信道標識符”,幫助接收方判斷接收到的數據包屬於哪個連接或廣播。
藍牙中根據通信類型不同,Access Address 有兩種主要用途:廣播信道(Advertising Channel) 和 數據信道(Data Channel)
(A)廣播信道(Advertising Channel)
所有的廣播信道都使用同一個固定的 Access Address:0x8E89BED6, 這個值在規範中是固定定義的,全球藍牙設備統一使用
它應用於:廣播包(Advertising Packet)或掃描包(Scan Request/Response)
(B)數據信道(Data Channel)
當兩個設備成功建立連接(Connection)後,Link Layer 會為該連接生成一個唯一的 Access Address。因此在連接階段的 Access Address 是專屬於該連接的。
(四)藍牙網絡結構
藍牙通信體系結構(主要是 BR/EDR 模式)中定義了兩種典型拓撲結構:Piconet(微微網) 和 Scatternet(散射網)
(1) Piconet(微微網)
Piconet 是藍牙設備之間通過一條共享的物理鏈路建立起來的 基本網絡單元。
在一個 Piconet 中,最多允許 8 個活躍設備同時參與通信(1 個 Central + 最多 7 個 Peripheral)
所有設備共享同一個:
- 跳頻序列(Frequency Hopping Sequence)
- 時鐘參考(Clock Reference)
- 訪問碼 Access Code(由 Central 的 BD_ADDR 派生)
因此,一個 Piconet 的物理信道由 Central 的 BD_ADDR 和時鐘共同定義。
藍牙 BR/EDR 使用時分雙工 (TDD):每個時隙 625 μs;
Central 與 Peripheral 交替發送:
- 偶數時隙 → Central 發送;
- 奇數時隙 → Peripheral 響應;
這樣實現雙向通信的同步控制。
(2)Scatternet(散射網)
Scatternet 是由兩個或多個 Piconet 通過共享設備互聯 而成的更大網絡結構。
也就是説,一個設備可以同時屬於多個 Piconet,用於橋接通信。
在 Scatternet 中:某個設備可能在一個 Piconet 中充當 Central,在另一箇中充當 Peripheral;
每個 Piconet 有自己獨立的:時鐘,跳頻序列,訪問碼;
共享設備通過 時間分片(Time Sharing) 的方式在多個 Piconet 之間切換。
Scatternet 網絡它更多是一個理論拓撲結構或過渡性歷史概念,應用極少,主要存在於早期研究、學術實驗和少數特種系統。
現代藍牙體系基本以 BLE 多連接和 Mesh 網絡取代了 Scatternet。
結尾
本章主要介紹了藍牙的狀態、角色、地址與網絡結構,這些都是藍牙鏈路層中的知識。下一章將繼續介紹藍牙鏈路層的數據安全、可靠性、數據組成與處理流程。