藍牙核心規范(V5.2)7.1-深入詳解之L2CAP(2)
藍牙篇之藍牙核心規范(V5.2)深入詳解匯總
本小結主要闡述主機的A部分,邏輯鏈路控制和適配協議規范(L2CAP)。支持更高級別的協議多路復用、分組分割和重組,以及服務質量信息的傳輸。協議狀態機描述了本規范的包格式和組成。
1.?狀態機
1.1 狀態機規則
根據需要,在狀態事件表中使用以下抽象的內部事件:
每個L2CAP面向連接的通道都有一個活動的狀態機。將為接收到的每個新L2CAP_ConnectReq創建一個狀態機。狀態機始終在關閉狀態下啟動。
1.1.1 CLOSED 狀態
除了關閉狀態之外,L2CAP_ConnectReq消息在任何其他狀態中都沒有被提到,因為它會觸發新通道的建立,從而導致分支進入到狀態機的新實例中。
1.1.2 WAIT_CONNECT_RSP 狀態
這里不包括L2CAP_DisconnectReq消息,因為源和目標L2CAP_DisconnectReq還不可用,無法將其正確地與特定通道的狀態機聯系起來。
1.1.3?WAIT_CONNECT 狀態
這里不包括L2CAP_DisconnectReq或L2CAP_ConfigReq消息,因為源和目標光盤還不可用,無法將其與特定通道的狀態機正確聯系起來。
1.1.4 CONFIG 狀態
存在兩個配置過程。配置過程是標準流程和鎖定步驟過程。
在標準和鎖定步驟配置過程中,兩個L2CAP實體都會在配置過程中啟動配置請求。這意味著每個設備為傳出的配置請求采用一個發起者角色,為傳入的配置請求采用一個接受者角色。在兩個方向上的配置可以按順序發生,但也可以并行發生。
在鎖步配置過程中,L2CAP實體在向其本地控制器提交流規范之前都發送L2CAP_CONFIGURATION_REQ數據包并接收帶有掛起結果代碼的L2CAP_CONFIGURATION_RSP數據包。每個L2CAP實體發送最后一個L2CAP_CONFIGURATION_RSP數據包,指示來自其本地控制器的響應。
在配置狀態下,可以區分以下子狀態:
配置狀態是通過來自關閉狀態的WAIT_CONFIG子狀態輸入、WAIT_CONNECT狀態或WAIT_CONNECT_RSP狀態。如發起者和接受者路徑都成功完成,則配置狀態留為打開狀態。
處于配置狀態的接收數據PDU(L2CAP_Data)應該只有在過渡到重新配置過程(從OPEN狀態)時才相關。只有在重傳輸模式和增強的重傳輸模式下才允許丟棄接收到的數據。允許丟棄s幀,但不建議使用。如果一個s幀被丟棄,監視器計時器將導致在超時后發送一個新的s幀。
指示配置響應中的失敗并不一定意味著整個配置過程的失敗;相反,基于在負響應中接收到的信息,可以觸發修改后的配置請求。
1.2 定時器事件
1.2.1 RTX
響應超時(RTX)定時器用于在遠程端點不響應信令請求時終止通道。
當發送到遠程設備的信令請求時,將啟動此計時器。
當收到響應時,將禁用此計時器。如果初始定時器過期,則可以發送重復的請求消息或者斷開請求中識別的通道斷開。如果發送了重復的請求消息,則RTX超時值應重置為至少是以前值的兩倍的新值。在重新傳輸請求消息時,應假定與原始傳輸具有相同狀態的上下文。如果接收到被標識為重復(重傳)的請求消息,則應在接收到原始請求消息時應用的相同狀態的上下文中進行處理。
1.2.2 ERTX
當不信任遠程端點正在執行對請求信號的額外處理時,使用擴展響應超時執行(ERTX)計時器來代替RTX計時器 。當遠程端點響應請求正在掛起時,將啟動此計時器。當收到正式響應或物理鏈接丟失時,將禁用此計時器。如果初始計時器過期,則可能會發送重復的請求或斷開通道。
當收到正式響應或物理鏈接丟失時,將禁用此計時器。如果初始計時器過期,則可能會發送重復的請求或斷開通道。
這個計時器的值依賴于實現,但最小初始值為60秒,最大初始值為300秒。與RTX類似,對于每個收到等待響應的未決請求,必須至少有一個ERTX計時器。每個未完成的請求最多應該有一個(RTX或ERTX)關聯。從此計時器的初始開始到信道終止的開始(如果沒有接收到任何響應)之間的最大運行時間為300秒。終止通道時,不需要發送L2CAP_DisconnectReq并進入WAIT_DISCONNECT狀態。通道應直接轉換到關閉狀態。
狀態和轉換
狀態和轉換-AMP啟用的操作
2.通用程序
本節介紹L2CAP的一般操作,包括配置過程、通過空中接口傳輸的用戶數據的處理和處理。本節還描述了L2CAP特性的操作,包括交付錯誤數據包、刷新過期數據和在無連接模式下操作、操作沖突解決、最佳努力流規范的聚合和HCI數據優先級。
2.1 配置過程
配置的兩個流程:標準流程和鎖步流程。
鎖步流程:如果兩個L2CAP實體都支持擴展流規范選項;否則使用標準流程。
2.1.1 請求路徑
請求路徑可以配置以下內容:
請求者的傳入MTU
請求者的輸出刷新超時
請求者的輸出QoS
請求者的進出出流程和錯誤控制信息
請求者的輸入和輸出的幀檢查序列選項
使用擴展流規范的請求者的傳出QoS選項
請求者的傳入擴展窗口大小選項加上傳入和傳出幀格式。
2.1.2 響應路徑
響應路徑可以配置以下內容:
響應方的傳出MTU,即遠程端的傳入MTU
遠程端的刷新超時
響應方的傳入QoS流規范(遠程端的傳出QoS流規范)
響應方的傳入流和錯誤控制信息
響應方的傳入QoS擴展流規范(遠程端的傳出QoS流規范)
響應方的傳出擴展窗口大小
2.1.3??鎖步配置過程
發送L2CAP_CONFIGURATION_REQ數據包來建立或更改通道參數,包括兩個L2CAP實體之間的QoS合同。
在發送或接收接受正在配置通道的L2CAP連接請求的連接響應后,應以L2CAP_CONFIGURATION_REQ形式發送擴展流規范選項以及任何非默認參數。
每個L2CAP實體只發送一個L2CAP_CONFIGURATION_REQ數據包
鎖步配置使用場景:只有在用于重新配置的L2CAP_CONFIGURATION_REQ數據包中存在擴展流規范選項。
擴展流規范應發送給在AMP-U邏輯鏈路上創建的所有通道,并且只有當本地和遠程L2CAP實體在其擴展特性掩碼中都表示支持BR/EDR的擴展流規范時,才應發送給在ACL-U邏輯鏈路上創建的通道。
如果發送的L2CAP_CONFIGURATION_REQ包含擴展流規范選項,則不包括服務質量選項和刷新超時選項。
L2CAP_CONFIGURATION_RSP包應響應L2CAP_CONFIGURATION_REQ包,除非L2CAP_COMMAND_REJECT_RSP響應覆蓋錯誤情況。雖然L2CAP配置信令機制允許使用通配符,但擴展流規范不支持通配符值,因為每個參數只代表一個方向的流量屬性,并且打算在L2CAP配置級別進行協商。
L2CAP_CONFIGURATION_REQ的接收者應與控制器執行所有必要的檢查,以驗證所請求的QoS。在BR/EDR或BR/EDR/LE控制器的情況下,L2CAP層執行控制器檢查。如果使用了HCI,那么L2CAP實體應該檢查所請求的QoS是否可以通過HCI的傳輸來實現。為了執行這些檢查,接收者需要具有兩個方向的QoS參數。為了讓各方確定何時執行相關的控制器檢查,各方將回復結果為“未決”(0x0004)。
如果在L2CAP_CONFIGURATION_RSP數據包中沒有發送參數,結果為“待定”,則接受在L2CAP_CONFIGURATION_REQ中發送的參數而不需要更改。
此鎖步過程將導致兩個L2CAP實體執行以下操作:
接收一個包含擴展流規范選項以及所有非默認參數的L2CAP_CONFIGURATION_REQ
發送包含對擴展流規范選項進行任何修改的L2CAP_CONFIGURATION_RSP,并允許對非默認參數進行修改(結果為“待定”)
發送一個包含擴展流規范選項以及所有非默認參數的L2CAP_CONFIGURATION_REQ
接收一個包含對擴展流規范選項的任何修改的L2CAP_CONFIGURATION_RSP,并允許對非默認參數進行修改(結果為“待定”)。
當接收到結果為“待定”的L2CAP_CONFIGURATION_RSP時,將使用ERTX計時器。
如果在收到結果“掛起”的L2CAP_CONFIGURATION_RSP之前收到結果“成功”的L2CAP_CONFIGURATION_RSP,接收人應斷開通道的連接。這違反了鎖步的配置過程。
如果設備在服務類型為“最佳努力”的L2CAP_CONFIGURATION_REQ中發送擴展流規范選項,并接收到服務類型為“保證”的L2CAP_CONFIGURATION_REQ,則應斷開通道。
如果設備在具有“保證”類型的L2CAP_CONFIGURATION_REQ中發送擴展流規范,并接收到具有服務類型為“最佳努力”的L2CAP_CONFIGURATION_REQ,則應斷開通道。
如果服務類型是“最佳努力”,那么某些參數的值可以在L2CAP_CONFIGURATION_RSP中發送,結果為“等待”,以指示L2CAP_CONFIGURATION_RSP的發送者能夠接收到的最大帶寬。
在收到結果為“待定”的L2CAP_CONFIGURATION_RSP后,L2CAP可能會向控制器發出必要的檢查。
如果控制器不能支持服務類型為“保證”的擴展流規范,那么L2CAP_CONFIGURATION_REQ的接收者應發送L2CAP_CONFIGURATION_RSP,指示“失敗流規范”的結果代碼(0x0005)。如果控制器指示它可以支持擴展流規范,那么L2CAP_-CONFIGURATION_REQ的接收者應該發送一個結果代碼為“成功”(0x0000)的L2CAP_CONFIGURATION_RSP。
2.1.4 標準配置過程
一般步驟
(1)本地設備通知遠程設備本地設備將使用L2CAP_CONFIGURATION_REQ接受的參數。
(2)遠程設備使用L2CAP_CONFIGURATION_RSP響應,同意或不同意這些值,包括默認值。
(3).本地和遠程設備重復步驟(1)和(2),直到對所有參數達成一致為止。
終止配置前,定時器超時時間不能超過120s.
配置參數類型:
可協商:指接收L2CAP_CONFIGURATION_REQ的遠程端可以通過發送具有不可接受參數(0x0001)結果代碼的L2CAP_-CONFIGURATION_RSP,提出可以接受的新值。不可協商的參數只是信息性的,L2CAP_CONFIGURATION_REQ的接收者不能不同意它們,但可以對正L2CAP_CONFIGURATION_RSP中的值進行調整。
注:MTU不可協商,但如果建議的值低于規定的最小值,則可以拒絕
請求路徑中的參數協商應采用以下規則:
L2CAP實體應發送至少一個L2CAP_CONFIGURATION_REQ數據包,作為初始配置或重新配置的一部分。如果所有默認或先前商定的值都是可接受的,則應發送一個沒有選項的L2CAP_CONFIGURATION_REQ數據包。
當L2CAP實體從遠程設備接收到正L2CAP_CONFIGURATION_RSP時,它應考慮L2CAP_CONFIGURATION_REQ中顯式包含的所有配置參數,以及遠程設備所接受的L2CAP_CONFIGURATION_REQ中未顯式包含的默認和先前同意的值
當L2CAP實體接收到負L2CAP_CONFIGURATION_-RSP并發送新的L2CAP_CONFIGURATION_REQ時,它應該包含在之前L2CAP_CONFIGURATION_REQ中發送的所有選項,除了在負L2CAP_CONFIGURATION_RSP中明確拒絕的可協商選項將有新的值。
遠程設備認為可以接受不包括在負L2CAP_CONFIGURATION_RSP中的可協商選項。
響應路徑中的參數協商應采用以下規則:
正L2CAP_CONFIGURATION_RSP接受接收到的L2CAP_-CONFIGURATION_REQ中顯式包含的所有配置參數的值,以及未顯式提供的默認和先前商定的值。
L2CAP實體應發送一個負的L2CAP_CONFIGURATION_RSP,以拒絕不可接受的可協商的參數值,無論是在接收到的L2CAP_CONFIGURATION_REQ中明確提供的值,還是先前商定的或默認值。以負L2CAP_CONFIGURATION_RSP發送的被拒絕的參數應具有發送負L2CAP_CONFIGURATION_RSP的L2CAP實體可接受的值。
所有被拒絕的可轉讓期權應以同一負L2CAP_CONFIGURATION_RSP被拒絕。
負L2CAP配置中允許的唯一選項是被拒絕的可轉讓期權。不可轉讓期權的通配符或調整不得為負L2CAP配置RSP
不包括在負的L2CAP_CONFIGURATION_RSP中的可談判的選項被認為是可接受的。
2.2 碎片化和重組
碎片化是指將pdu分解成更小的部分,從L2CAP傳遞到下層。
重組是從從下層傳遞的碎片重新組裝PDU的過程。
碎片化和重組可應用于任何L2CAPpdu。
2.2.1 L2CAP pdu的片段
為什么要碎片化?
在沒有HCI控制器時,方便控制傳輸。
舉例:BR/EDR控制器的碎片化說明
注:BR/EDR鏈路控制器可以通過使用“開始”和“繼續”指示來對PDU施加不同的碎片處理。因此,L2CAP和BR/EDR鏈路控制器都使用相同的機制來控制片段的大小
2.2.2??L2CAP PDUs的重組
為什么要進行L2CAP PDUs重組?
控制器順序發送數據包時,可能會進行片段重組,L2CAP重組pdu和sdu,檢查一致性,丟棄與pdu長度不匹配的包。
2.3 SDU封裝
在基本L2CAP模式下,SDU應至少用L2CAP協議元素封裝,從而得到一種稱為基本信息幀(b-幀)的L2CAPPDU類型。
分割和重組操作僅在增強重傳輸模式、流傳輸模式、重傳輸模式和流控制模式下使用。sdu可以被分割成許多較小的數據包,稱為SDU段。每個段應用L2CAP協議元件封裝,從而得到一個稱為信息幀(Iframe)的L2CAP PDU。
SDU段的最大長度應由最大PDU有效載荷長度(MPS)給出。MPS參數可以使用特定于實現的接口導出到上層。
2.3.1?L2CAPSDUs的分割
在流式控制、流媒體或再傳輸模式中,傳入的SDU可以被分解為分段,然后用L2CAP協議元素(標題和校驗和字段)單獨封裝以形成I幀。I幀受流量控制,并可能受重傳程序。報頭攜帶一個2位SAR字段,用于識別i幀是“開始”、“結束”還是“繼續”數據包,或者它是否攜帶一個完整的、未分割的SDU。
2.3.2?L2CAP SDU的重新組裝
接收端使用傳入“I幀”的SAR字段進行重新組裝過程“SDU開始”I幀中的L2CAP SDU長度字段為
可以使用額外的完整性檢查和序列號向應用程序指示丟失的L2CAP SDU。
2.3.3?分割和碎片化
2.4?錯誤L2CAP SDU的交付
一些應用程序可能需要將損壞或不完整的L2CAPsdu交付到上層。如果啟用了錯誤的L2CAPSDU的交付,接收方將將這些信息傳遞給L2CAPSDU部分(即L2CAP幀)丟失、錯誤檢查不通過或錯誤檢查通過的上層。如果錯誤的L2CAPSDU的交付被禁用,接收器應丟棄任何缺失幀或錯誤檢查失敗的任何幀的L2CAPSDU段。長度字段與實際幀長度不匹配的L2CAPSDU也應被丟棄。
2.5?acl-u邏輯鏈接的操作
在使用刷新超時選項或擴展流規范選項的L2CAP配置中,刷新超時可以根據L2CAP通道分別設置刷新超時,但在BR/EDR基帶中,刷新機制按照ACL邏輯傳輸。
當有多個L2CAL通道映射到同一ACL邏輯傳輸時,自動刷新超時不會區分L2CAP通道。自動沖洗超時也適用于通過L2CAP無連接通道發送的單播數據。異常是通過HCI? ACL數據數據包中的Packet_Boundary_Flag標記為非自動切換的數據包。自動刷新超時刷新特定自動刷新的L2CAPPDU。HCI_Flush命令將刷新用于ACL邏輯傳輸的所有未完成的L2CAPPDU,包括標記為非自動切換的L2CAPPDU。因此,在使用自動刷新超時和HCI_Flush命令時必須小心。應該使用HCI_Enhanced_Flush命令。
2.6?無連接數據通道
在無連接通道上發送的數據只能通過BR/EDR無線電發送。無連接信道允許從主設備到微型網的所有成員的廣播傳輸,或者從主設備或從設備到單個遠程設備的單播傳輸。通過無連接通道發送的數據將以最大努力的方式發送。L2CAP提供的無連接信道沒有服務質量。
除了面向連接的通道外,L2CAP還提供了一個無連接的通道。在無連接通道上發送的數據只能通過BR/EDR無線電發送。無連接信道允許從主設備到微型網的所有成員的廣播傳輸,或者從主設備或從設備到單個遠程設備的單播傳輸。通過無連接通道發送的數據將以最大努力的方式發送。L2CAP提供的無連接信道沒有服務質量。
·基帶不提供對廣播傳輸的確認,因此通過無連接的L2CAP信道發送的廣播傳輸不可靠,因此可能或可能不會到達微網的每個成員。
如果數據包被發送到PSM并且沒有注冊應用來接收該PSM上的數據,則接收的L2CAP實體可以無聲地丟棄通過無連接的L2CAP通道接收的數據。
L2CAP不為在基本模式下運行的面向連接的L2CAP通道或在無連接的L2CAP通道上的流量提供流量控制。因此,如果目標不接受L2CAP接收到的數據。在接收L2CAP實現中可以發生擁塞。對于面向連接的信道,如果該信道的目標應用程序不及時接受該數據,則接收器L2CAP實體可以選擇關閉該信道。由于此選項不適用于通過無連接的L2CAP通道接收的單播數據,因此接收的L2CAP實體可以選擇將接收數據的應用程序取消注冊或斷開底層物理鏈路。申請被注銷的,應當通知該申請。如果底層物理鏈路被斷開,則應通知所有使用該物理鏈路的應用程序。
只有在遠程設備表示在L2CAP擴展特性掩碼中支持單播無連接的數據接收時,單播數據才能通過無連接的L2CAP通道發送到遠程設備。1應使用L2CAP_INFORMATION_REQ數據包檢索L2CAP擴展特性掩碼,以確定是否支持單播無連接數據接收。可以選擇,對單播無連接數據接收可以從通過SDP或EIR獲得的信息推斷出無連接數據接收的支持。例如,如果通過已知的SDP或EIR找到了要求支持UCD的服務,則可以假定表示支持該服務的設備支持單播無連接數據接收。
通過L2CAP無連接信道發送的單播數據受自動刷新,因此應設置數據包邊界標志如果控制器支持數據包邊界標志功能,則應適當。因為接收L2CAP實體沒有使其能夠知道接收到的數據包是否最初是接收設備在發送設備上標記為可沖洗或不可沖洗L2CAP實體應處理通過無連接網絡接收的所有單播數據包L2CAP包不可刷新。
到無連接信道的廣播傳輸與廣播LT_ADDR一起發送,因此可以由圖片網中的任何從端接收。如果希望將傳輸數據的接收限制在微型集中從節點的一個子集,那么可以使用更高級的加密來支持私有通信。
主機將不會接收無連接網絡上廣播的傳輸頻道,高層協議必須回送任何廣播數據,發送到主設備的通信量。
2.7?操作沖突解決
當兩個設備通過發送具有相同代碼的請求包來請求相同的操作時,可能會發生沖突。有些操作需要解決沖突問題。這兩個設備都必須知道哪個請求將被拒絕。兩個設備都應使用以下算法來確定拒絕哪個請求。
1.設置i=0(代表BD_ADDR中最不重要的八位字節)
2.比較兩種設備的BD_ADDR的八重奏。如果八進制不相等,請執行步驟4。
3.增加i乘以1。進入步驟2
4.具有較大的BD_ADDR八字節的設備應拒絕來自其他設備的請求。
2.8 數據優先HCI
為了保證的通道滿足其保證,L2CAP應優先考慮支持HCI的設備中的流量而不是HCI傳輸。保證通道的包應該比最佳努力通道的包獲得更高的優先級。
3.流量控制和重傳的程序
當使用增強式重傳模式、流媒體模式、流式控制模式或重傳模式時,應使用本章中定義的程序,包括信息幀的編號、SDU分割和重組的處理,以及有錯誤的幀的檢測和通知。重傳輸模式和增強的重傳輸模式還允許發送方根據接收方的請求重新發送帶有錯誤的幀。
3.1 信息檢索
在嘗試在信道上配置增強的再傳輸模式、流媒體模式、流式控制模式或再傳輸模式之前,應通過對“支持的擴展特性”信息類型(0x0002)執行信息檢索來驗證對建議模式的支持。如果信息檢索不成功或未設置“擴展特征掩模”位,則在配置請求中不建議使用該模式。
3.2 pdu類型的流量控制和重傳的功能
為增強型重傳模式、流媒體模式、流式控制模式和重傳模式定義了兩種幀格式。I幀用于傳輸用戶信息,而不是b幀。s型框架用于監督。
TCP/IP
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。