COAP詳解

COAP協議學習

1分析工具

  • 網絡包分析利器:wireshark
  • COAP協議客戶端、服務端:wakaama 源碼地址
  • 輔助編譯工具cmake3:由於wakaama對cmake有版本要求 源碼地址
    ** 文章後附上wakaama、cmake3編譯、使用方法及安裝步驟等

2COAP協議介紹

  • Coap(Constrained Application Protocol)是一種在物聯網世界的類web協議,它的詳細規範定義在 RFC 7252。COAP名字翻譯來就是“受限應用協議”,顧名思義,使用在資源受限的物聯網設備上。物聯網設備的ram,rom都通常非常小,運行TCP和HTTP是不可以接受的。

2.1 客戶端與服務端模擬

  • a、在linux上分別開兩個終端,執行如下指令
    ./lwm2mserver -4
    服務端接收到的數據
    ./lwm2mclient -4
    客戶端接收到的數據

  • b、協議詳解分析
    coap消息格式如下圖:
    消息格式
    b1、首先分析前4個字節 【44 02 21 86 】
    44: 0100,0100 版本號:01 消息類型:00 CON TKL長度:4

    	* 版本號(Ver)
    		2-bit無符號整型,代表CoAP版本號。本文檔(7252)的實現必須設置這個字段爲0x01。其它的值爲今後其它版本保留。對於帶有未知版本號的消息,必須忽略。
    	* 類型(T)
    		2-bit無符號整型。代表這個消息的類型是:CON(0), NON(1), ACK(2),RST(3)* Token長度(TKL)
    		4-bit無符號整型。表示變長的Token字段(0-8字節)的長度。長度9-15是保留的,不能設置長度爲9-15。如果設置了長度爲9-15,必須被當作消息格式錯誤來處理。
    

    02:000 00010 code碼:0.02

    	8-bit無符號整型。拆分爲3-bit的分類信息和5-bit詳細信息。
    	寫作”c.dd”。c是3-bit長,可以是一個從07的數字,dd是5-bit長。
    	它一個兩位的數字,從0031。
    	分類信息c可以代表是
    	一個請求(0),
    	一個成功的響應(2),
    	一個客戶端錯誤響應(4),
    	一個服務端錯誤響應(5)。
    
     coap定義的響應碼格式如圖 ![method_code](https://img-blog.csdnimg.cn/20200413105336509.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbnV4X2N3Zw==,size_16,color_FFFFFF,t_70#pic_center)
    

response_code
C1 6A:message ID
b2、在分析TKL個字節
6A C1 D6 CB: token值
b3、options分析
在options中就可以看到coap協議的緊湊性儘量節省每一個字節
首先看一下options的結構:
options
option 字段值含義:
option格式
首先分析第一個字節
B2:1011,0010 : option delta爲11, option length 爲2
option11 爲:Uri-Path 長度爲2字節 =》 72 64:rd
在接續分析下一個字節
11:0001,0001:option delta爲1,注意因爲前一個option delta有值,就說明此時的option值爲11+1 =12 爲:Content-Format, 長度1個字節=》28 :40 格式如下:
fromat

繼續分析:
39: 0011, 1001: option delta爲3 上一個option爲12 結果爲12+3=15爲:Uri-Query 長度爲9字節:6C 77 6D 32 6D 3D 31 2E 31
接續分析:
0D 05:0000,1101, 0000,0000:option delta爲0 上一個option爲15 結果爲15+0=15爲:Uri-Query ,這裏多放一個05是爲什麼呢?因爲在COAP協議中在option delta及option lenth 13,14,15都是有特殊含義的

一個option之中的各個字段的含義如下:
Option Delta:
表示Option的增量,當前的Option的具體編號。
4-bit無符號整型。值0-12代表option delta。其它3個值作爲特殊情況保留:
當值爲13:有一個8-bit無符號整型(extended)跟隨在第一個字節之後,本option的實際delta是這個8-bit值加13。
當值爲14:有一個16-bit無符號整型(網絡字節序)(extended)跟隨在第一個字節之後,本option的實際delta是這個16-bit值加269。
當值爲15:爲payload標識符而保留。如果這個字段被設置爲值15,但這個字節不是payload標識符,那麼必須當作消息格式錯誤來處理。
Option Length:
表示Option Value的具體長度。
4-bit無符號整數。值0-12代表這個option值的長度,單位是字節。其它3個值是特殊保留的:
當值爲13:有一個8-bit無符號整型跟隨在第一個字節之後,本option的實際長度是這個8-bit值加13。
當值爲14:一個16-bit無符號整型(網絡字節序)跟隨在第一個字節之後,本option的實際長度是這個16-bit值加269。
當值爲15:保留爲將來使用。如果這個字段被設置爲值15,必須當作消息格式錯誤來處理。
Option Value 共(option Length)個字節。

所以這裏的value的長度爲:13+5=18 值爲:65 70 3D 74 65 73 74 6C 77 6D 32 6D 63 6C 69 65 6E 74

b4、最後分析到什麼時候結束呢?
FF: 分隔符
之後全部爲payload

3工具編譯

cmake3

  • wget https://cmake.org/files/v3.6/cmake-3.6.3.tar.gz
  • tar -xzf cmake-3.6.3.tar.gz
  • cd cmake-3.6.3/ && ./bootstrap && make && make install
    如果cmake --version報錯,嘗試關閉終端重新啓動

wakaama

  • 編譯客戶端
    下載源碼: git clone https://github.com/eclipse/wakaama.git
    編譯:cmake examples/client/ && make
    目錄重命名:mv wakaama wakaama_client
    *編譯服務端
    下載源碼: git clone https://github.com/eclipse/wakaama.git
    編譯:cmake examples/server/ && make
    目錄重命名:mv wakaama wakaama_server

有關BLOCK也是coap的一個重點,主要用於OTA升級包的傳輸,暫時還沒有去詳細分析,有感興趣的同學可以一起討論下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章