COAP協(xié)議簡介
Coap(Constrained Application Protocol)是一種在物聯(lián)網(wǎng)世界的類web協(xié)議逢唤,它的詳細(xì)規(guī)范定義在 RFC 7252。COAP名字翻譯來就是“受限應(yīng)用協(xié)議”姆蘸,顧名思義肥缔,使用在資源受限的物聯(lián)網(wǎng)設(shè)備上。物聯(lián)網(wǎng)設(shè)備的ram巩掺,rom都通常非常小偏序,運(yùn)行TCP和HTTP是不可以接受的。
COAP協(xié)議特點(diǎn)
1 COAP協(xié)議網(wǎng)絡(luò)傳輸層由TCP改為UDP胖替。
COAP協(xié)議層
2 它基于REST研儒,server的資源地址和互聯(lián)網(wǎng)一樣也有類似url的格式,客戶端同樣有POST独令,GET,PUT,DELETE方法來訪問server端朵,對(duì)HTTP做了簡化。
3 COAP是二進(jìn)制格式的燃箭,HTTP是文本格式的冲呢,COAP比HTTP更加緊湊。
4 輕量化招狸,COAP最小長度僅僅4B敬拓,一個(gè)HTTP的頭都幾十個(gè)B了。
5 支持可靠傳輸裙戏,數(shù)據(jù)重傳乘凸,塊傳輸。 確保數(shù)據(jù)可靠到達(dá)累榜。
6 支持IP多播, 即可以同時(shí)向多個(gè)設(shè)備發(fā)送請(qǐng)求营勤。
7 非長連接通信,適用于低功耗物聯(lián)網(wǎng)場景壹罚。
COAP協(xié)議消息類型
COAP協(xié)議有4種消息類型
CON—— 需要被確認(rèn)的請(qǐng)求葛作,如果CON請(qǐng)求被發(fā)送,那么對(duì)方必須做出響應(yīng)猖凛。這有點(diǎn)像TCP赂蠢,對(duì)方必須給確認(rèn)收到消息,用以可靠消息傳輸形病。
可靠消息傳輸
NON—— 不需要被確認(rèn)的請(qǐng)求客年,如果NON請(qǐng)求被發(fā)送,那么對(duì)方不必做出回應(yīng)漠吻。這適用于消息會(huì)重復(fù)頻繁的發(fā)送量瓜,丟包不影響正常操作。這個(gè)和UDP很像途乃。用以不可靠消息傳輸绍傲。
不可靠消息傳輸
ACK —— 應(yīng)答消息,對(duì)應(yīng)的是CON消息的應(yīng)答耍共。
RST —— 復(fù)位消息烫饼,可靠傳輸時(shí)候接收的消息不認(rèn)識(shí)或錯(cuò)誤時(shí),不能回ACK消息试读,必須回RST消息杠纵。
COAP消息格式
coap消息格式
消息頭(HEAD)
第一行是消息頭,必須有钩骇,固定4個(gè)byte比藻。
Ver : 2bit, 版本信息倘屹,當(dāng)前是必須寫0x01银亲。
T: 2bit, 消息類型纽匙,包括 CON, NON. ACK, RST這4種务蝠。
TKL: 4bit,token長度烛缔, 當(dāng)前支持0~8B長度馏段,其他長度保留將來擴(kuò)展用。
Code:8bit践瓷,分成前3bit(0~7)和后5bit(0~31)毅弧,前3bit代表類型。 0代表空消息或者請(qǐng)求碼当窗, 2開頭代表響應(yīng)碼够坐,取值如下:
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崖面,每個(gè)消息都有一個(gè)ID 元咙,重發(fā)的消息MID不變
token(可選)用于將響應(yīng)與請(qǐng)求匹配。 token值為0到8字節(jié)的序列巫员。 ( 每條消息必須帶有一個(gè)標(biāo)記, 即使它的長度為零)庶香。 每個(gè)請(qǐng)求都帶有一個(gè)客戶端生成的token, 服務(wù)器在任何結(jié)果響應(yīng)中都必須對(duì)其進(jìn)行回應(yīng)。token類似消息ID简识,用以標(biāo)記消息的唯一性赶掖。token還是消息安全性的一個(gè)設(shè)置感猛,使用全8字節(jié)的隨機(jī)數(shù),使偽造的報(bào)文無法獲得驗(yàn)證通過奢赂。option(可選陪白,0個(gè)或者多個(gè))
請(qǐng)求消息 與回應(yīng)消息都可以0~多個(gè)options。 主要用于描述請(qǐng)求或者響應(yīng)對(duì)應(yīng)的各個(gè)屬性膳灶,類似參數(shù)或者特征描述咱士,比如是否用到代理服務(wù)器,目的主機(jī)的端口等轧钓。
payload(可選)
實(shí)際攜帶數(shù)據(jù)內(nèi)容序厉, 若有, 前面加payload標(biāo)識(shí)符“0xFF”毕箍,如果沒有payload標(biāo)識(shí)符弛房,那么就代表這是一個(gè)0長度的payload。如果存在payload標(biāo)識(shí)符但其后跟隨的是0長度的payload而柑,那么必須當(dāng)作消息格式錯(cuò)誤處理庭再。
COAP的請(qǐng)求碼(requests)和響應(yīng)碼(responses)
【0.01】GET方法——用于獲得某資源
【0.02】POST方法——用于創(chuàng)建某資源
【0.03】PUT方法——用于更新某資源
【0.04】DELETE方法——用于刪除某資源
CoAP的URL
coap的url和HTTP的有很相似的地方,開頭是“coap”對(duì)應(yīng)“http”或者“coaps”對(duì)應(yīng)“https”牺堰。
HTTP的默認(rèn)端口是tcp 80拄轻,coap的默認(rèn)端口是udp 5683(coaps是5684)。
URL里面的“/”“&”“.”
下面三個(gè)URL的地址是一樣的伟葫。訪問example.com這個(gè)域名恨搓,端口是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加密實(shí)現(xiàn)的斧抱。DTLS的實(shí)現(xiàn)需要的資源和帶寬較多,如果是資源非常少的終端和極有限的帶寬下可能會(huì)跑不起來渐溶。DTLS僅僅在單播情況下適用辉浦。
轉(zhuǎn)載自:https://baijiahao.baidu.com/s?id=1609055547851599818&wfr=spider&for=pc