[BLE] L2CAP 協議的介紹
來自: https://www.novelbits.io/bluetooth-5-speed-maximum-throughput/ 我們一樣從 BLE 的封包封裝開始介紹 L2CAP 協定, 在之前的介紹中, 我們介紹了 LL (Link Layer) 層的通訊協定, 在 LL 層的 payload 中, 我們可以加入更上層的封包格式, 在 BLE 協定中, 其中一種上層協定稱為 L2CAP (Logical Link Control and Adaptation Protocol), L2CAP 中主要負責功能如下: 封包的分段 (Segmentation) 重組與拆解 重傳與資料流控制 (Flow Control) 封裝 (Encapsulation) 與排程 (Scheduling) QoS 機制的支援 相對於底層封包傳送以 PDU (Packet Data Unit) 為單位, 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" 對於一個 L2CAP Channel 而言, 對應一個 Channel ID (CID), 一個 CID 對應於一個 P2P 的 BLE 連線, 基於一個 CID, L2CAP 提供 Flow Control 與重傳機制, 對於 L2CAP 底下的 PDU 而言, L2CAP 提供檢查 CRC 和重傳機制, 考慮到 LL 層本身的重傳機制, PDU 會在連線失敗之前不斷重傳, L2CAP 實際上的 Flow Control 機制為控制 PDU