CoAP協議學習筆記——CoAP格式詳解

  CoAP是受限制的應用協議(Constrained Application Protocol)的代名詞。在當前由PC機組成的世界,信息交換是經過TCP和應用層協議HTTP實現的。可是對於小型設備而言,實現TCP和HTTP協議顯然是一個過度的要求。爲了讓小設備能夠接入互聯網,CoAP協議被設計出來。CoAP是一種應用層協議,它運行於UDP協議之上而不是像HTTP那樣運行於TCP之上。CoAP協議很是小巧,最小的數據包僅爲4字節。json

  1 CoAP協議綜述服務器

  和其餘TCP IP協議簇中的協議同樣,CoAP協議老是以「頭」的形式出如今負載以前,而負載和CoAP頭之間使用單字節0xFF分離。學習CoAP協議最好的方法即是結合RFC文檔,詳細分析CoAP協議報文格式的每一部分,即是CoAP協議報文結構示意圖。app

圖1.1 CoAP協議報文結構示意圖

  圖1.1 CoAP協議報文結構示意圖eclipse

  2 CoAP協議報文各部分學習

  【Ver】 版本編號,指示CoAP協議的版本號。相似於HTTP 1.0 HTTP 1.1。版本編號佔2位,取值爲01B。編碼

  【T】報文類型,CoAP協議定了4種不一樣形式的報文,CON報文,NON報文,ACK報文和RST報文。翻譯

  【TKL】CoAP標識符長度。CoAP協議中具備兩種功能類似的標識符,一種爲Message ID(報文編號),一種爲Token(標識符)。其中每一個報文均包含消息編號,可是標識符對於報文來講是非必須的設計

  【Code】功能碼/響應碼。Code在CoAP請求報文和響應報文中具備不一樣的表現形式,Code佔一個字節,它被分紅了兩部分,前3位一部分,後5位一部分,爲了方便描述它被寫成了c.dd結構。其中0.XX表示CoAP請求的某種方法,而2.XX、4.XX或5.XX則表示CoAP響應的某種具體表現。代理

  【Message ID】報文編號orm

  【Token】標識符具體內容,經過TKL指定Token長度。

  【Option】報文選項,經過報文選項可設定CoAP主機,CoAP URI,CoAP請求參數和負載媒體類型等等。

  【1111 1111B】CoAP報文和具體負載之間的分隔符。

  3 Code部分詳解

  Code部分被分紅了兩部分,爲了便於閱讀,Code被描述爲c.dd形式。具體內容可參考RFC7252 #12.1.1 Method Codes

  3.1 請求

  在CoAP請求中,Code被定義爲CoAP請求方法,這些方法有GET、POST、PUT和DELETE,這些方法和HTTP協議很是類似。

  【0.01】GET方法——用於得到某資源

  【0.02】POST方法——用於建立某資源

  【0.03】PUT方法——用於更新某資源

  【0.04】DELETE方法——用於刪除某資源

  3.2 響應

  在CoAP響應中,Code被定義爲CoAP響應碼,相似於HTTP 200 OK等等。

  【2.01】Created

  【2.02】Deleted

  【2.03】Valid

  【2.04】Changed

  【2.05】Content。相似於HTTP 200 OK

  【4.00】Bad Request 請求錯誤,服務器沒法處理。相似於HTTP 400。

  【4.01】Unauthorized 沒有範圍權限。相似於HTTP 401。

  【4.02】Bad Option 請求中包含錯誤選項。

  【4.03】Forbidden 服務器拒絕請求。相似於HTTP 403。

  【4.04】Not Found 服務器找不到資源。相似於HTTP 404。

  【4.05】Method Not Allowed 非法請求方法。相似於HTTP 405。

  【4.06】Not Acceptable 請求選項和服務器生成內容選項不一致。相似於HTTP 406。

  【4.12】Precondition Failed 請求參數不足。相似於HTTP 412。

  【4.15】Unsuppor Conten-Type 請求中的媒體類型不被支持。相似於HTTP 415。

  【5.00】Internal Server Error 服務器內部錯誤。相似於HTTP 500。

  【5.01】Not Implemented 服務器沒法支持請求內容。相似於HTTP 501。

  【5.02】Bad Gateway 服務器做爲網關時,收到了一個錯誤的響應。相似於HTTP 502。

  【5.03】Service Unavailable 服務器過載或者維護停機。相似於HTTP 503。

  【5.04】Gateway Timeout 服務器做爲網關時,執行請求時發生超時錯誤。相似於HTTP 504。

  【5.05】Proxying Not Supported 服務器不支持代理功能。

  4 Option部分詳解

  CoAP支持多個Option,CoAP的Option的表示方法比較特殊,採用增量的方式描述,細節可參考RFC7252 #3.1

圖4.1 CoAP部分Option定義

  圖4.1 CoAP部分Option定義

  通常狀況下Option部分包含Option Delta、Option Length和Option Value三部分。

  【Option Delta】表示Option的增量,當前的Option的具體編號等於以前全部Option Delta的總和。

  【Option Length】表示Option Value的具體長度。

  【Option Value】表示Option具體內容

  CoAP中全部的Option都採用編號的方式,這些Option及編號的定義以下圖所示。

圖4.2 Option編號內容

  圖4.2 Option編號內容

  在這些option中,Uri-Host、Uri-Port、Uri-Path和Uri-Query等和資源「位置」和參數有關。

  【3】Uri-Host:CoAP主機名稱,例如iot.eclipse.org

  【7】Uri-Port:CoAP端口號,默認爲5683

  【11】Uri-Path:資源路由或路徑,例如\temperature。資源路徑採用UTF8字符串形式,長度不計第一個"\"。

  【15】Uri-Query:訪問資源參數,例如?value1=1&value2=2,參數與參數之間使用「&」分隔,Uri-Query和Uri-Path之間採用「?」分隔。

  在這些option中,Content-Format和Accept用於表示CoAP負載的媒體格式

  【12】Content-Format:指定CoAP複雜媒體類型,媒體類型採用整數描述,例如application/json對應整數50,application/octet-stream對應整數40。

  【17】Accept: 指定CoAP響應複雜中的媒體類型,媒體類型的定義和Content-Format相同。

  CoAP協議中支持多個Option,例如

  第一個Option Delta=11,表示該Option表示Uri-Path(11)

  第二個Option Delta=1,表示該Option=1+11,表示Content-Format(12)

  第三個Option Delta=3,表示該Option=3+1+11,表示Uri-Query(15)

  CoAP採用這樣的方式表示多個Option,而每種Option均可以在HTTP協議中找到對應項。

  5 Content-Format描述

  CoAP支持多種媒體類型,具體可參考RFC7252 #12.3。從下圖的信息能夠發現,CoAP協議中關於媒體類型的定義比較簡單,將來應該會根據實際狀況擴展。

圖5.1 Content-Format編號內容

  圖5.1 Content-Format編號內容

  【text/plain】 編號爲0,表示負載爲字符串形式,默認爲UTF8編碼。

  【application/link-format】編號爲40,CoAP資源發現協議中追加定義,該媒體類型爲CoAP協議特有。

  【application/xml】編號爲41,表示負載類型爲XML格式

  【application/octet-stream】編號爲42,表示負載類型爲二進制格式。

  【application/exi】編號爲47,表示負載類型爲「精簡XML」格式。(翻譯不必定準確)

  另外,還有一種格式也北IANA認定,也會在CoAP協議中普遍使用那即是CBOR格式,該格式可理解爲二進制JSON格式。

  【applicaiton/cbor】編號爲60。

  6 示例

  該示例來自於RFC7252。

  【流程描述】

  CoAP客戶端經過GET方法從Server端得到溫度傳感器數據,CoAP URI以下

  coap://www.server.com/temperautre

  CoAP請求採用CON報文,Server接收到CON報文必須返回一個ACK報文。CoAP請求採用0.01 GET方法,若操做成功CoAP Server返回2.05 Content,至關於HTTP 200 OK。請求和響應的MID必須徹底相同,此處爲0x7d34。請求響應中的Token域爲空。CoAP請求中包含Option,該Option的類型爲Uri-Path,那麼Option Delta的值爲0+11=11,Option Value的值爲字符串形式的「temperature」。CoAP返回中包含溫度數據,使用字符串形式描述,具體值爲"22.3"。

圖6.1 CoAP 請求響應流程

  圖6.1 CoAP 請求響應流程

  【格式描述】

圖6.2 CoAP請求響應具體格式

  圖6.2 CoAP請求響應具體格式

  7 總結

  一旦熟悉了CoAP協議的格式,那麼再學習CoAP協議的應用就輕鬆多了。

相關文章
相關標籤/搜索