02BLE協議各層的形象化理解

2021-10-25 07:08:11 字數 3061 閱讀 9807

先上框圖:

att層

從att開始看,在上篇部落格講的醫院結構裡面有個檢驗室,檢驗室可以得到各項結果,但是它並不知道這些結果代表什麼含義。模擬的在ble

協議棧裡面,att定義了各種屬性、屬性的操作方法,但是這些屬性有什麼作用,能給使用者提供什麼服務,它並不知道。舉例如下:

假設有兩個藍芽裝置,乙個是手機,乙個是手環,此手環戴在手上可以監測心跳。

在att這一層,手環提供資料,它是乙個伺服器。另一邊的手機從手環獲取資料,它是乙個client.

在手環伺服器這邊,它定義了屬性、屬性的格式以及屬性的方法,還有一些機制通知、指示、確認。

在手機客戶端這邊,它肯定定義了方法,可以去查詢、獲得、讀、寫屬性。還有一些機制:請求、響應、命令

從這可以看出,att層利用這6中機制來查詢、讀寫那些屬性。

gatt層

由gatt這一層來定義的。在這一層,它定義了服務的格式(即這個服務裡面應該包含哪些屬性,這些屬性應該如何排列)。有了服務之後,客戶端手機這邊如何使用這些服務呢?

在客戶端手機這邊需要定義如何發現服務,如何發現服務裡面的特性,讀寫服務裡面的特性。比如說心跳服務,如何去獲得那個心跳值。

在伺服器這邊還可以定義如何主動去通知客戶端我這邊的值發生了變化。簡單的說,gatt的作用就是定義服務,實現服務,提供訪問服務的方法。

在上篇部落格中,那位張三醫生需要通過檢驗室獲得眼科中心的檢驗結果。他綜合判斷這些結果,才能提供服務。

同樣gatt層也是這樣的,gatt想去獲得某個服務,它需要att來讀寫那些屬性,才能實現那些服務。gatt裡面的那些方法,比如說發現服務、發現特性、讀寫特性,這些動作都要使用att 的request、response、command等機制來操作那些屬性。gatt嚴重依賴於att,它只不過是在att的基礎上綜合了那些屬性,提供了乙個服務的概念。

l2cap層

再來看一下l2cap層,模擬於醫院的結構,它是收發室。收發室裡面的人是醫院的內部員工,它可以在醫院內部來傳動包裹。

客戶端手機想去讀取某個屬性,它需要利用att這一層來發起請求,請求的資料需要經過l2cap層以及下面的幾層到達服務端的l2cap層。

服務端l2cap這一層,需要把請求的資料發給att層。

資料的**有那麼多,l2cap層如何標識資料的**呢?

在l2cap層引入了乙個channel的概念。它使用channel這個概念來標識資料的**或目的地。

hci層

之前提到對於藍芽晶元,一般來說它和arm板通過串列埠或usb口等等介面相連。l2cap層需要把資料通過串列埠或usb口傳給藍芽晶元。

在這個地方又引入了一層hci層,hci層用來描述從l2cap傳過來的資料如何通過串列埠或usb口傳給藍芽晶元。

在這裡還要引入乙個概念,從l2cap傳過來的資料報可能很大,此時就需要分段,把經過分段的資料傳給ll層。

同樣的道理,這些分段的資料由ll層傳到l2cap層時,還需要將資料合併。分段與合併有可能是在l2cap中做的,也有可能是在hci中做的,這並不重要。

ll層現在來看一下ll層,在l2cap那裡由channel id來表示這個資料在內部裡面分發給誰。此時假設資料到達了晶元這裡,問題來了,這個晶元要把資料發給哪個裝置。

在我們的示意圖中只有兩個藍芽裝置,在真正的系統裡面可能有許多藍芽裝置,那麼ll層要把資料發給誰?

在ll層這裡重要的概念就是訪問位址。這些資料是作為乙個廣播包傳送給所有的裝置呢?還是作為乙個資料報只傳送給某乙個裝置。此時就需要在資料報前面加上乙個訪問位址。就相當於快遞公司帖上那個快遞單號一樣,以表明資料要發給哪一棟大樓。此處的大樓就相當於裝置,在裝置裡面再次將資料分發傳達。

phy層

ll層將資料加上了訪問位址,這些資料要通過無線傳送器(phy)傳送出去,另一端的無線接收器(phy)接收資料,解碼之後再將資料上傳。

phy層就相當於乙個司機,司機的開車技術要好,這條路不通要換另外一條路。對於藍芽裝置來說,在物理層這裡它使用了跳頻技術。

舉個例子:深圳有兩個比較出名的電台,105.7  106.2

在聽廣播時,如果頻率為105.7的電台被干擾了,就要換到106.2頻率的電台。這就是所謂的跳頻。

gap層:

對比醫院的結構,病人到達醫院之後會進入大堂,在大堂裡面按流程確定科室、**。同樣在gap層這裡,定義了一些流程,必須根據流程來發現裝置、連線裝置才可以使用後續的服務。如何去發現裝置、連線裝置呢?一般來說,會直接使用ll層提供的功能去發出廣播包來發現裝置、連線裝置。

總結如下:

host(純軟體的概念)                                            (跟醫院的功能簡單模擬)

gap:   generic access profile, 通用訪問規範      (大堂: 按指定流程確定科室、**     <==> 發現裝置、連線裝置)

gatt:  generic attribute profile, 通用屬性規範  (醫務室: 為病人提供服務    <==> 也是提供服務, 有哪些服務, 服務由哪些屬性組成)

att:   attribute protocol, 屬性協議                  (檢驗室: 提供檢查結果, 給醫生綜合後由醫生判斷 <==> 提供屬性及訪問方法, gatt把這些屬性組合起來構成服務)

l2cap: logical link control and adaptation protocol,    (收發室: 收發包裹(包裹來自各科室)   <==> 標記/識別資料來自哪個channel, **)

-----------------------------hci(host controller inte***ce, 主機/控制器介面)-----------------------------

controller(一般來說是乙個晶元):

ll:    link layer, 鏈路層                    (快遞駐點: 貼快遞單        <==> 確定是廣播包還是資料報(發給誰),加上access address)

phy:   physical layer, 物理層            (快遞員: 運輸, 此路不通就另換一條     <==> 無線收發器,傳輸, 跳頻)

osi各層的協議

osi 各層協議 tcp ip 資料鏈路層 arp,rarp 網路層 ip,icmp,igmp 傳輸層 tcp udp,ugp 應用層 telnet,ftp,smtp,snmp.osi 物理層 eia tia 232,eia tia 499,v.35,v.24,rj45,ethernet,802.3...

TCP IP各層對應的協議

應用層包括所有和應用程式協同工作,利用基礎網路交換應用程式專用的資料的協議。如,http hypertext transfer protocol 超文字傳輸協議。port 80 telnet teletype over the network,網路電傳 通過乙個終端 terminal 登陸到網路 執...

OSI各層相關的協議

一 osi各層物理層 eia tia 232,eia tia 499,v.35,v.24,rj45,ethernet,802.3,802.5,fddi,nrzi,nrz,b8zs 資料鏈路層 frame relay,hdlc,ppp,ieee 802.3 802.2,fddi,atm,ieee 80...