COAP協(xié)議簡介
Coap(Constrained Application Protocol)是一種在物聯(lián)網(wǎng)世界的類web協(xié)議,它的詳細規(guī)范定義在 RFC 7252。COAP名字翻譯來就是“受限應用協(xié)議”,顧名思義,使用在資源受限的物聯(lián)網(wǎng)設備上。物聯(lián)網(wǎng)設備的ram,rom都通常非常小,運行TCP和HTTP是不可以接受的。
COAP協(xié)議特點
1 COAP協(xié)議網(wǎng)絡傳輸層由TCP改為UDP。
COAP協(xié)議層
2 它基于REST,server的資源地址和互聯(lián)網(wǎng)一樣也有類似url的格式,客戶端同樣有POST,GET,PUT,DELETE方法來訪問server,對HTTP做了簡化。
3 COAP是二進制格式的,HTTP是文本格式的,COAP比HTTP更加緊湊。
4 輕量化,COAP最小長度僅僅4B,一個HTTP的頭都幾十個B了。
5 支持可靠傳輸,數(shù)據(jù)重傳,塊傳輸。 確保數(shù)據(jù)可靠到達。
6 支持IP多播, 即可以同時向多個設備發(fā)送請求。
7 非長連接通信,適用于低功耗物聯(lián)網(wǎng)場景。
COAP協(xié)議消息類型
COAP協(xié)議有4種消息類型
CON—— 需要被確認的請求,如果CON請求被發(fā)送,那么對方必須做出響應。這有點像TCP,對方必須給確認收到消息,用以可靠消息傳輸。
可靠消息傳輸
NON—— 不需要被確認的請求,如果NON請求被發(fā)送,那么對方不必做出回應。這適用于消息會重復頻繁的發(fā)送,丟包不影響正常操作。這個和UDP很像。用以不可靠消息傳輸。
不可靠消息傳輸
ACK —— 應答消息,對應的是CON消息的應答。
RST —— 復位消息,可靠傳輸時候接收的消息不認識或錯誤時,不能回ACK消息,必須回RST消息。
COAP消息格式
coap消息格式
消息頭(HEAD)
第一行是消息頭,必須有,固定4個byte。
Ver : 2bit, 版本信息,當前是必須寫0x01。
T: 2bit, 消息類型,包括 CON, NON. ACK, RST這4種。
TKL: 4bit,token長度, 當前支持0~8B長度,其他長度保留將來擴展用。
Code:8bit,分成前3bit(0~7)和后5bit(0~31),前3bit代表類型。 0代表空消息或者請求碼, 2開頭代表響應碼,取值如下:
1 0.00 Indicates an Empty message
2 0.01-0.31 Indicates a request.
3 1.00-1.31 Reserved
4 2.00-5.31 Indicates a response.
5 6.00-7.31 Reserved
Message ID:16bit, 代表消息MID,每個消息都有一個ID ,重發(fā)的消息MID不變
token(可選)用于將響應與請求匹配。 token值為0到8字節(jié)的序列。 ( 每條消息必須帶有一個標記, 即使它的長度為零)。 每個請求都帶有一個客戶端生成的token, 服務器在任何結(jié)果響應中都必須對其進行回應。token類似消息ID,用以標記消息的唯一性。token還是消息安全性的一個設置,使用全8字節(jié)的隨機數(shù),使偽造的報文無法獲得驗證通過。option(可選,0個或者多個)
請求消息 與回應消息都可以0~多個options。 主要用于描述請求或者響應對應的各個屬性,類似參數(shù)或者特征描述,比如是否用到代理服務器,目的主機的端口等。
payload(可選)
實際攜帶數(shù)據(jù)內(nèi)容, 若有, 前面加payload標識符“0xFF”,如果沒有payload標識符,那么就代表這是一個0長度的payload。如果存在payload標識符但其后跟隨的是0長度的payload,那么必須當作消息格式錯誤處理。
COAP的請求碼(requests)和響應碼(responses)
【0.01】GET方法——用于獲得某資源
【0.02】POST方法——用于創(chuàng)建某資源
【0.03】PUT方法——用于更新某資源
【0.04】DELETE方法——用于刪除某資源
CoAP的URL
coap的url和HTTP的有很相似的地方,開頭是“coap”對應“http”或者“coaps”對應“https”。
HTTP的默認端口是tcp 80,coap的默認端口是udp 5683(coaps是5684)。
URL里面的“/”“&”“.”
下面三個URL的地址是一樣的。訪問example.com這個域名,端口是udp 5683,訪問的資源地址是~sensors/temp.xml。
coap://example.com:5683/~sensors/temp.xml
coap://EXAMPLE.com/%7Esensors/temp.xml
coap://EXAMPLE.com:/%7esensors/temp.xml
COAP的安全性
COAP的安全性是用DTLS加密實現(xiàn)的。DTLS的實現(xiàn)需要的資源和帶寬較多,如果是資源非常少的終端和極有限的帶寬下可能會跑不起來。DTLS僅僅在單播情況下適用。
轉(zhuǎn)載自:https://baijiahao.baidu.com/s?id=1609055547851599818&wfr=spider&for=pc