Slijede razlike između dviju inačica stranice.
Starije izmjene na obje strane Starija izmjena Novija izmjena | Starija izmjena | ||
racfor_wiki:coap_protkol [2021/01/11 18:11] agauta [Uvod] |
racfor_wiki:coap_protkol [2023/06/19 18:17] (trenutno) |
||
---|---|---|---|
Redak 1: | Redak 1: | ||
- | ====== | + | ====== |
- | ====== Sažetak | + | ===== Sažetak ===== |
- | **Ključne riječi:** | + | Kod izgradnje sustava koji sadrži različite senzore i aktuatore koji moraju međusobno komunicirati u svrhu obavljanja zadataka, izbor protokola je važan korak. U slučaju potrebe za što jednostavnijom komunikacijom zbog male potrošnje |
- | ====== Uvod ====== | + | Keywords: coap, protocol, iot, internet, of, things |
- | U zadnjih 10 godina možemo se sve češće susresti s pojmom Internet Stvari. Uređaji koje svakodnevno koristimo postaju " | + | ===== Uvod ===== |
+ | |||
+ | U zadnjih 10 godina možemo se sve češće susresti s pojmom Internet Stvari. Uređaji koje svakodnevno koristimo postaju " | ||
CoAP (// | CoAP (// | ||
+ | |||
+ | ===== Osnovne karakteristike protokola ===== | ||
+ | |||
+ | ==== Model klijent-poslužitelj ==== | ||
+ | |||
+ | CoAP se zasniva na komunikacijskom modelu klijent-poslužitelj. Model se sastoji od dva entiteta, klijenta i poslužitelja. Klijent šalje zahtjeve poslužitelju nakon čega dobiva odgovor odmah ili naknadno, ovisno o načinu na koji su se zatražili podaci. Odgovor od strane poslužitelja može biti sadržan u jednoj ili više poruka, ovisno o vrsti zahtjeva i frekvenciji kojom se mijenjaju vrijednosti traženih resursa [2]. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Vrste CoAP poruka ==== | ||
+ | |||
+ | Postoje četiri različita tipa poruka koje CoAP implementira [3]. | ||
+ | |||
+ | * // | ||
+ | * Poruka koja se mora potvrditi s // | ||
+ | |||
+ | * // | ||
+ | * Poruka koja ne zahtijeva potvrdu nakon primitka. | ||
+ | |||
+ | * // | ||
+ | * Poruka koja se šalje nakon primitka CON poruke. Ne označava nikakav uspjeh izvršavanja zahtjeva, već samo da je on zaprimljen. | ||
+ | |||
+ | * //Reset// poruka (RESET) | ||
+ | * Poruka koja se šalje nakon primitka CON ili NON poruke u kojoj fali neki kontekst kako bi se pravilno procesuirala. | ||
+ | |||
+ | |||
+ | ==== Metode CoAP-a ==== | ||
+ | |||
+ | CoAP implementira četiri osnovne HTTP metode [3]. | ||
+ | |||
+ | * GET | ||
+ | * Metoda vraća reprezentaciju stanja koji se nalazi na URI-u danom u zahtjevu klijenta. | ||
+ | * Metoda je sigurna i idempotentna. | ||
+ | |||
+ | * POST | ||
+ | * Metoda zahtjeva da se resurs koji se nalazi unutar zahtjeva obradi te da mu se dodjeli odgovarajući URI. | ||
+ | * Metoda nije niti sigurna niti idempotentna. | ||
+ | |||
+ | * PUT | ||
+ | * Metoda zahtjeva da resurs koji odgovara URI-ju danom unutar zahtjeva promjeni s reprezentacijom resursa koji se također nalazi unutar zahtjeva. | ||
+ | * Metoda nije sigurna ali je idempotentna. | ||
+ | |||
+ | * DELETE | ||
+ | * Metoda zahtjeva da se obriše resurs na URI-ju danom unutar zahtjeva. | ||
+ | * Metoda nije sigurna ali je idempotentna. | ||
+ | |||
+ | |||
+ | ==== URI shema za pristup resursima ==== | ||
+ | |||
+ | Unutar CoAP protokola svaki resurs ima svoj URI. On se definira na sljedeći način: | ||
+ | * coap[s]:/< | ||
+ | |||
+ | gdje je: | ||
+ | * coap[s] - URI schema, može biti secure | ||
+ | * < | ||
+ | * < | ||
+ | * [?< | ||
+ | |||
+ | |||
+ | Primjer pravilno definiranog URI-ja: | ||
+ | * coap:/ | ||
+ | |||
+ | |||
+ | ===== Format CoAP poruka ===== | ||
+ | |||
+ | Sadržaj svakog okvira CoAP poruke definiran je u standardu [[https:// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Dijelova okvira su: | ||
+ | |||
+ | * Version (Ver) | ||
+ | * 2-bitni prirodni broj koji predstavlja verziju CoAP protokola | ||
+ | * U slučaju da verzija ne odgovara trenutno specificiranoj verziji, poruka mora biti ignorirana | ||
+ | |||
+ | * Type (T) | ||
+ | * 2-bitni prirodni broj koji predstavlja o kojoj vrsti poruke se radi | ||
+ | * // | ||
+ | |||
+ | * Token Length (TKL) | ||
+ | * 4-bitni prirodni broj koji predstavlja duljinu polja varijabli | ||
+ | * Mogu se koristiti brojevi od 0 do 8, u slučaju da se koriste broj 9 do 15 moraju biti tretirani kao pogrešno definirane poruke | ||
+ | |||
+ | * Code | ||
+ | * 8-bitni prirodni broj koji se dijeli na najznačajnije bitove (prva 3 bita) i manje značajne brojeve (drugih 5 bitova) predstavlja kod zahtjeva i odgovora | ||
+ | * //Request// (0), //Success response// (2), //Client error response// (4), //Server error response// (5) | ||
+ | * U slučaju da se radi o poruci koja predstavlja zahtjev, kod odgovara jednom od kodova zahtjeva, suprotno radi se o kodu odgovora | ||
+ | |||
+ | * Message ID | ||
+ | * 16-bitni prirodni broj koji se koristi za detekciju višestrukih poruka te povezivanje CON i NON-CON poruka sa ACK i REST porukama | ||
+ | |||
+ | * Token + Options | ||
+ | * opcionalan dio okvira | ||
+ | * sastoji se od rednog broja opcije (4-bitni prirodni broj), duljine opcije (4-bitni prirodni broj) i vrijednosti opcije | ||
+ | * //Empty// - niz bitova duljine 0 | ||
+ | * //Opaque// - nedifinirana struktura niza okteta | ||
+ | * //Uint// - konačan niz okteta | ||
+ | * //String// - niz znakova kodiran pomoću UTF8 | ||
+ | |||
+ | ===== Primjer CoAP poruka ===== | ||
+ | |||
+ | ==== Confirmable zahtjev (CON) ==== | ||
+ | |||
+ | Nakon slanja poruke očekuje se odgovor. U slučaju da se odgovor ne primi, poruka se ponovno šalje. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Non-Confirmable zahtjev (NON) ==== | ||
+ | |||
+ | Nakon slanja poruke ne očekuje se odgovor. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== Opservacija ==== | ||
+ | |||
+ | U slučaju da želimo konstantno primati podatke kao što su npr. očitanja senzora, možemo koristiti mehanizam opservacije. U odgovoru (ACK) se prenose očitanja, a sljedeći odgovori se šalju bez ponovnih zahtjeva sve dok ne dobijemo poruku za otkazivanje pretplate [3]. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ===== Sigurnost ===== | ||
+ | |||
+ | ==== CoAP-DTLS ==== | ||
+ | |||
+ | CoAP koristi DTLS (//Datagram Transport Layer Security//) protokol koji se izvršava iznad UDP protokola za omogućavanje sigurne komunikacije između poslužitelja i klijenta. DTLS pruža mogućnosti autentikacije, | ||
+ | |||
+ | CoAP definira četiri sigurnosna stanja: | ||
+ | * NoSec | ||
+ | * Jedino stanje koje nije sigurno. Paketi se šalju koristeći običan UDP, a ne DTLS. | ||
+ | |||
+ | * PreSharedKey | ||
+ | * Sadrži listu već generiranih ključeva. Svaki od ključa također sadrži još jednu listu u kojoj su zapisani svi čvorovi za koje je taj ključ valjan. | ||
+ | |||
+ | * RawPublicKey | ||
+ | * Koristi se asimetričan par ključeva s kojima se može potvrditi komunikacija između čvorova. | ||
+ | |||
+ | * // | ||
+ | * Koriste se X509 certifikati | ||
+ | * Svaki certifikat sadrži javni ključ i digitalni potpis | ||
+ | * Javni ključ je dio para javnog i privatnog ključa | ||
+ | * Digitalni potpis je enkodiran hash | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Ako usporedimo komunikaciju između klijenta i poslužitelja kada se koristi DTLS možemo vidjeti da je potreban puno veći broj poruka koje se moraju razmijeniti prije nego se uopće mogu podaci početi razmjenjivati. Kako većinu uređaja koji koriste CoAP protokol imaju male energetske mogućnosti, | ||
+ | |||
+ | ===== Zaključak ===== | ||
+ | |||
+ | CoAP je jednostavan protokol koji omogućuje komunikaciju između vrlo slabih uređaja na efikasan način. Iako je sigurnost implementirana u samom protokolu, ona i dalje nije na vrlo viskom nivou što može stvarati probleme ako se radi o povjerljivim podacima. U slučaju da je sigurnost podataka vrlo važna stavka nekog sustava preporučuje se korištenje drugih, kompleksnijih protokola kao što je MQTT. | ||
+ | |||
+ | ===== Literatura ===== | ||
+ | [1] [[https:// | ||
+ | |||
+ | [2] [[https:// | ||
+ | |||
+ | [3] [[https:// | ||
+ | |||
+ | [4] [[https:// |