[BLE] L2CAP 協議的介紹
我們一樣從 BLE 的封包封裝開始介紹 L2CAP 協定,
在之前的介紹中, 我們介紹了 LL (Link Layer) 層的通訊協定,
在 LL 層的 payload 中, 我們可以加入更上層的封包格式,
在 BLE 協定中, 其中一種上層協定稱為 L2CAP (Logical Link Control and Adaptation Protocol),
L2CAP 中主要負責功能如下:
- 封包的分段 (Segmentation) 重組與拆解
- 重傳與資料流控制 (Flow Control)
- 封裝 (Encapsulation) 與排程 (Scheduling)
- QoS 機制的支援
L2CAP 上層應用可以以 SDU (Service Data Unit) 來傳送資料,
一個 SDU 的大小最大可以為 64 KB,
L2CAP 協定會將一個 SDU 按照 PDU 的大小進行重新切分與重組,
並將一個 Service 虛擬成一個邏輯通道 (L2CAP Channel), 讓上層應用進行存取.
為了完成上述功能, L2CAP 由兩個部分組成: Channel Manager, Resource Manager,
如下圖所示:
Figure 1.1: L2CAP architectural blocks
in "Logical Link Control and Adaptation Protocol Specification"
in "Logical Link Control and Adaptation Protocol Specification"
對於一個 L2CAP Channel 而言, 對應一個 Channel ID (CID),
一個 CID 對應於一個 P2P 的 BLE 連線,
基於一個 CID, L2CAP 提供 Flow Control 與重傳機制,
對於 L2CAP 底下的 PDU 而言, L2CAP 提供檢查 CRC 和重傳機制,
考慮到 LL 層本身的重傳機制, PDU 會在連線失敗之前不斷重傳,
L2CAP 實際上的 Flow Control 機制為控制 PDU Queue 的排程機制,
也就是決定哪些 PDU 要重新放入 BLE 通訊中等候傳輸,
比較有趣的一點是, L2CAP 有一個模式為: Streaming,
在此模式下, L2CAP 支援一個 timeout 機制, 將過時的 PDU 封包排除,
對於音訊, 或是連續的資料傳輸, 應該是一個比較容易的實現方式.
總結來說, L2CAP 提供了需多上層的抽象功能,
像是 Flow Control, Streaming, 封包的重組與分割等,
使上層應用可以宣告一連線, 並賦予其邏輯上的通道意義,
然而, 其實作細節, 尤其和 LL 層的互動, 在本文中仍不是很清楚,
之後, 若有時間, 將會說明 L2CAP 的更多細節...
留言
張貼留言