Bosh sahifa Wiki CoAP

CoAP

CoAP — resursi cheklangan IoT qurilmalari va kam quvvatli tarmoqlar uchun yaratilgan yengil amaliy qatlam protokoli. Uning to‘liq nomi Constrained Application Protocol hisoblanadi.

CoAP HTTPga o‘xshash resurs modelidan foydalanadi. Qurilma sensor, holat yoki boshqaruv funksiyasini URI orqali taqdim etadi.

Masalan:

coap://sensor.local/temperature
coap://lamp.local/state

CoAP odatda UDP ustida ishlaydi va kichik ikkilik headerga ega.

Resurs modeli

CoAP server resurslarni taqdim etadi. Client metod orqali shu resurs bilan ishlaydi.

Asosiy metodlar:

Metod Vazifasi
GET Resurs qiymatini olish
POST Yangi amal yoki resurs yaratish
PUT Resursni to‘liq yangilash
DELETE Resursni o‘chirish

HTTPga o‘xshash bo‘lsa ham, CoAP wire format va transport bo‘yicha alohida protokol.

UDP asosida ishlashi

UDP ulanish o‘rnatmasdan datagram yuboradi. Bu:

beradi.

UDPning o‘zi yetkazish kafolatini bermaydi. CoAP zarur holatda tasdiqlash va qayta uzatishni o‘z xabar modelida amalga oshiradi.

CoAP portlari

Port Vazifasi
5683 Oddiy CoAP
5684 DTLS bilan himoyalangan CoAP

Boshqa transport va portlar implementatsiyaga bog‘liq bo‘lishi mumkin.

Xabar headeri

CoAPning asosiy headeri kichik.

Maydonlar:

  • version;
  • type;
  • token length;
  • code;
  • message ID.

Keyin token, optionlar va payload keladi.

Payload marker 0xFF bilan boshlanishi mumkin. Marker bo‘lsa, undan keyingi qism payload hisoblanadi.

Xabar turlari

Confirmable

CON xabar qabul qiluvchi tomonidan tasdiqlanishi kerak.

ACK kelmasa, sender timeoutdan keyin qayta yuboradi. Takror xabar message ID orqali aniqlanadi.

Non-confirmable

NON xabar tasdiq talab qilmaydi.

Tez-tez keladigan sensor qiymati uchun mos. Ayrim xabarlar yo‘qolishi qabul qilinadi.

Acknowledgement

ACK confirmable xabar qabul qilinganini bildiradi.

ACK ichida javobning o‘zi bo‘lishi mumkin.

Reset

RST xabar tushunilmaganini yoki tegishli kontekst topilmaganini bildiradi.

Piggybacked response

Server confirmable requestni tez bajarishga ulguradi.

Jarayon:

Client → CON GET
Server → ACK 2.05 Content

ACK paketining o‘zida javob code va payload mavjud. Bu piggybacked response deb ataladi.

Separate response

Serverga javob tayyorlash uchun ko‘proq vaqt kerak bo‘lsa:

  1. request uchun bo‘sh ACK yuboradi;
  2. keyin alohida CON yoki NON response yuboradi;
  3. client kerak bo‘lsa uni ACK qiladi.

Bu serverni client qayta uzatishidan himoya qiladi.

Token va Message ID

Message ID

UDP darajasidagi takror uzatish va ACKni moslashtirish uchun ishlatiladi.

Token

Client request bilan response’ni ilova darajasida bog‘laydi.

Bir request uchun ACK va haqiqiy response alohida kelsa, token ayniqsa muhim.

Message ID va token bir xil vazifa bajarmaydi.

Response kodlari

CoAP code HTTP statusga o‘xshash sinflarga ega.

Misollar:

Kod Mazmuni
2.01 Created Resurs yaratildi
2.04 Changed Resurs o‘zgartirildi
2.05 Content Kontent qaytarildi
4.00 Bad Request Noto‘g‘ri so‘rov
4.01 Unauthorized Ruxsat yo‘q
4.04 Not Found Resurs topilmadi
4.05 Method Not Allowed Metod ruxsat etilmagan
5.00 Internal Server Error Server ichki xatosi
5.03 Service Unavailable Xizmat vaqtincha mavjud emas

CoAP kodi kichik ikkilik maydonda tashiladi.

Optionlar

CoAP optionlar resurs va representation haqida ma’lumot beradi.

Keng tarqalgan optionlar:

  • Uri-Host;
  • Uri-Path;
  • Uri-Query;
  • Content-Format;
  • Accept;
  • ETag;
  • Max-Age;
  • Observe;
  • Block1;
  • Block2;
  • Proxy-Uri.

Optionlar delta encoding bilan ixcham yoziladi.

Content-Format

Payload qanday formatda ekanini bildiradi.

Misollar:

  • text/plain;
  • JSON;
  • CBOR;
  • SenML;
  • XML;
  • binary.

Resursi cheklangan qurilmalarda CBOR kabi ixcham ikkilik format JSONga qaraganda kamroq joy egallashi mumkin.

Observe

Client resursni kuzatishga obuna bo‘lishi mumkin.

Masalan, harorat resursi:

GET /temperature
Observe: 0

Server qiymat o‘zgarganda yangi notification yuboradi.

Bu doimiy pollingni kamaytiradi.

Observe oqimida:

  • tartib raqami;
  • freshness;
  • cancellation;
  • retransmission;
  • client yo‘qolishi

boshqariladi.

Block-wise transfer

UDP datagramni juda katta qilish fragmentatsiyaga olib keladi. CoAP katta payloadni bloklarga bo‘lishi mumkin.

Block1

Clientdan serverga katta request body yuborish uchun.

Block2

Serverdan clientga katta response olish uchun.

Har blok:

ma’lumotiga ega.

Client kerakli bloklarni ketma-ket so‘raydi yoki yuboradi.

Multicast

CoAP UDP multicastdan foydalanishi mumkin.

Masalan, tarmoqdagi barcha sensorlardan ma’lum resursni so‘rash.

Multicastda:

  • request odatda NON bo‘ladi;
  • serverlar javobni random kechiktiradi;
  • response storm cheklanadi;
  • xavfsizlik va scope nazorat qilinadi.

Internet bo‘ylab nazoratsiz multicast ishlatilmaydi.

Resource discovery

CoAP server resurslar ro‘yxatini maxsus manzilda berishi mumkin:

/.well-known/core

Javob CoRE Link Formatda bo‘ladi.

Misol:

</temperature>;rt="sensor";if="read"
</lamp>;rt="actuator";if="control"

Client qurilmadagi mavjud resurslarni avtomatik topadi.

DTLS

UDP transportdagi CoAPni DTLS bilan himoyalash mumkin.

DTLS:

  • server autentifikatsiyasi;
  • client autentifikatsiyasi;
  • shifrlash;
  • yaxlitlik;
  • replay himoyasi

beradi.

Qurilma:

ishlatishi mumkin.

DTLS handshake resursi cheklangan qurilmada sezilarli xarajat bo‘lishi mumkin.

OSCORE

Object Security for Constrained RESTful Environments CoAP xabarining ayrim qismlarini end-to-end himoyalaydi.

Proxy yoki gateway paketni uzatsa ham, payload va himoyalangan optionlar oxirgi tomonlar orasida maxfiy qolishi mumkin.

OSCORE ayniqsa:

  • proxy;
  • group communication;
  • DTLS sessiyasi doimiy bo‘lmagan muhit;
  • end-to-end talab

uchun muhim.

CoAP va HTTP

Jihat CoAP HTTP
Transport Odatda UDP Odatda TCP yoki QUIC
Header Kichik ikkilik Matnli yoki siqilgan
Reliability CON/ACK orqali Transport orqali
Multicast Bor Odatda yo‘q
Observe Standart kengaytma WebSocket/SSE kabi boshqa usul
Muhit IoT va constrained device Umumiy veb

CoAP proxy HTTP resurs va CoAP qurilma orasida tarjima qilishi mumkin.

Diagnostika

CoAP ishlamasa:

tekshiriladi.

Katta payload ishlamay, kichik response ishlasa, block-wise transfer yoki IP fragmentatsiya muammosi bo‘lishi mumkin.

Bog‘liq tushunchalar

IoT, UDP, REST, Confirmable message, Token, Message ID, Observe, Block-wise transfer, DTLS, OSCORE, CBOR, MQTT