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:
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:
- request uchun bo‘sh ACK yuboradi;
- keyin alohida CON yoki NON response yuboradi;
- 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:
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:
- block number;
- more flag;
- block size
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:
beradi.
Qurilma:
- pre-shared key;
- raw public key;
- X.509 sertifikat
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:
- UDP 5683 yoki 5684;
- URI;
- token;
- message ID;
- CON/ACK;
- retransmission;
- Content-Format;
- block size;
- DTLS;
- OSCORE context;
- multicast scope;
- firewall;
- packet loss;
- MTU
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