物聯網應用層coap協議

CoAP(Constrained Application Protocol, 受限應用協議)協議是一種在低功耗低速率的設備上實現物聯網通信的應用層協議。其採用UDP協議支撐,發送和接收數據可以異步,數據包頭採用二進制壓縮,對低功耗低速率的網絡有很好的適應能力。CoAP協議非常的小巧,最小的數據包僅爲4字節。CoAP適用於低功耗受限設備,一個內存爲20KB的單片機就可以實現CoAP服務器或客戶端。本實驗旨在利用工具對CoAP協議基本工作機制進行驗證分析,並分析其可能的安全隱患。

要求

(1)實驗要求掌握CoAP的基本原理。

(2)用Wireshark等協議分析軟件分析CoAP協議過程。

(3)學會用Node.js或Python快速構建CoAP通信驗證程序。

基本步驟

注意構建一個局域網,模擬CoAP服務端、客戶端,運用Wireshark分析客戶端和服務端上的協議工作。

過程及有關程序代碼

服務器代碼:

const coap    = require('coap') 
    , server  = coap.createServer()
server.on('request', function(req, res) {
      res.end('Hello ' + req.url.split('/')[1] + '\n')
})
server.listen(function() {
      console.log('server started')
})

客戶端代碼:

const coap  = require('coap') 
    , req   = coap.request('coap://127.0.0.1/client')
req.on('response', function(res) {
  res.pipe(process.stdout)
})
req.end()

1、 搭建局域網
2、開啓服務器

VqbIjf.png

3、 客戶端請求連接,服務器返回信息

VqbLNj.png

4、抓包信息

VqqpuT.png

VqqV81.png

分析

CoAP是一種應用層協議,它運行於UDP協議之上而不是像HTTP那樣運行於TCP之上。HTTP 與 COAP協議都是通過4個請求方法(GET, PUT, POST, DELETE)對服務器端資源進行操作。 兩者之間明顯的區別在於HTTP是通過文本描述方式描述協議包內容,協議包裏面會包含一些空格符,換行符等,協議包可讀性很強。而COAP是通過定義 二進制各位段功能來描述協議包內容。 因此COAP協議包大小更小,更緊湊。CoAP協議非常小巧,最小的數據包僅爲4字節。但CoAP並不能替代HTTP協議,CoAP只能呢 應用於那些小設備。

​ CoAP採用與HTTP協議相同的請求響應工作模式。CoAP協議共有4中不同的消息類型。

CON——需要被確認的請求,如果CON請求被髮送,那麼對方必須做出響應。

NON——不需要被確認的請求,如果NON請求被髮送,那麼對方不必做出迴應。

ACK——應答消息,接受到CON消息的響應。

RST——復位消息,當接收者接受到的消息包含一個錯誤,接受者解析消息或者不再關心發送者發送的內容,那麼復位消息將會被髮送。

Vqq7xx.png

這裏抓到的包只有CON和ACK,是因爲客戶端發的包需要服務器響應,所以是CON,而且在傳輸過程中並未出錯,所以沒有出現RST復位消息。

CoAP還有一個比較特殊的地方,那就是它的url。在HTTP的世界中,RESTFul協議由於其簡單性和適用性,在WEB應用中越來越受歡迎,這樣的道理同樣適用於CoAP。一個CoAP資源可以被一個URI所描述,例如一個設備可以測量溫度,那麼這個溫度傳感器的URI被描述爲:CoAP://machine.address:5683/sensors/temperature。請注意。後面的 temperature,我覺得更像是表示客戶端的身份的信息,不知道理解的對不對,就像下你個面這樣 。

Vqq15d.png

VqqwVg.png

關於COAP的安全問題:

COAP使用DTLS來做安全傳輸層,該層運行於UDP之上,當前考慮使用DTLS時,需要考慮設備終端資源受限情況, 有些資源有限設備無法運行DTLS安全加密算法。

做安全加密,需要根據應用場景需要,對應只上報數據,且數據敏感度不高場景,可以不考慮加入安全層。

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