Omezený aplikační protokol - Constrained Application Protocol
Sada internetového protokolu |
---|
Aplikační vrstva |
Transportní vrstva |
Internetová vrstva |
Propojit vrstvu |
Omezený aplikační protokol (CoAP) je specializovaný internetový aplikační protokol pro omezená zařízení, jak je definováno v RFC 7252. Umožňuje omezeným zařízením zvaným „uzly“ komunikovat s širším internetem pomocí podobných protokolů. CoAP je navržen pro použití mezi zařízeními ve stejné omezené síti (např. Nízkoenergetické, ztrátové sítě), mezi zařízeními a obecnými uzly na internetu a mezi zařízeními v různých omezených sítích připojených k internetu. CoAP se také používá prostřednictvím jiných mechanismů, jako jsou SMS v mobilních komunikačních sítích.
CoAP je a servisní vrstva protokol, který je určen pro použití v internetových zařízeních s omezenými prostředky, jako je bezdrátová senzorová síť uzly. CoAP je navržen pro snadný překlad do HTTP pro zjednodušenou integraci s webem a zároveň splnění specializovaných požadavků, jako je vícesměrové vysílání podpora, velmi nízká režie a jednoduchost.[1][2] Multicast, nízká režie a jednoduchost jsou nesmírně důležité Internet věcí (IoT) a Stroj-stroj (M2M) zařízení, která mají tendenci být hluboce vložený a mají mnohem méně paměti a napájení než tradiční internetová zařízení. Účinnost je proto velmi důležitá. CoAP může běžet na většině podporovaných zařízení UDP nebo analog UDP.
Pracovní skupina pro internetové inženýrství (IETF ) Omezený Klidný Pracovní skupina pro prostředí (Jádro ) provedl hlavní standardizační práci pro tento protokol. Aby byl protokol vhodný pro aplikace IoT a M2M, byly přidány různé nové funkce. Jádro protokolu je uvedeno v RFC 7252; důležitá rozšíření jsou v různých fázích procesu standardizace.
Funkce
Formáty zpráv
Nejmenší zpráva CoAP má délku 4 bajty, pokud vynechá Token, Options a Payload. CoAP využívá dva typy zpráv, požadavky a odpovědi pomocí jednoduchého binárního formátu základního záhlaví. Za záhlaví základny mohou následovat možnosti v optimalizovaném formátu typu délka-hodnota. CoAP je ve výchozím nastavení vázán na UDP a volitelně do DTLS, poskytující vysokou úroveň zabezpečení komunikace.
Jakékoli bajty za hlavičkami v paketu jsou považovány za tělo zprávy. Délka těla zprávy je implikována délkou datagramu. Když je vázán na UDP, musí se celá zpráva vejít do jednoho datagramu. Při použití s 6LoWPAN jak je definováno v RFC 4944, zprávy BY MĚLE zapadat do jediné IEEE 802.15.4 rám minimalizovat fragmentaci.
Ofsety | Oktet | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
4 | 32 | VER | Typ | Délka tokenu | Kód požadavku / odpovědi | ID zprávy | |||||||||||||||||||||||||||
8 | 64 | Token (0-8 bajtů) | |||||||||||||||||||||||||||||||
12 | 96 | ||||||||||||||||||||||||||||||||
16 | 128 | Možnosti (jsou-li k dispozici) | |||||||||||||||||||||||||||||||
20 | 160 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Užitečné zatížení (je-li k dispozici) |
Pevné záhlaví CoAP: Verze, Typ, Délka tokenu, Kód požadavku / odpovědi a ID zprávy.
První 4 bajty jsou povinné ve všech datagramech CoAP.
Tato pole lze snadno extrahovat z těchto 4 bajtů v jazyce C pomocí těchto maker:
#define COAP_HEADER_VERSION (data) ((0xC0 a data [0]) >> 6)#define COAP_HEADER_TYPE (data) ((0x30 a data [0]) >> 4)#define COAP_HEADER_TKL (data) ((0x0F & data [0]) >> 0)#define COAP_HEADER_CLASS (data) (((data [1] >> 5) a 0x07))#define COAP_HEADER_CODE (data) (((data [1] >> 0) & 0x1F))#define COAP_HEADER_MID (data) ((data [2] << 8) | (data [3]))
Verze (VER) (2 bity)
- Označuje číslo verze CoAP.
Typ (2 bity)
- To popisuje typ zprávy datagramu pro kontext dvou typů zpráv Request a Response.
- Žádost
- 0: Potvrzeno: Tato zpráva očekává odpovídající potvrzovací zprávu.
- 1: Nepotvrditelné: Tato zpráva neočekává potvrzovací zprávu.
- Odezva
- 2: Potvrzení: Tato zpráva je odpovědí, která potvrzuje potvrzitelnou zprávu
- 3: Reset: Tato zpráva naznačuje, že přijala zprávu, ale nemohla ji zpracovat.
- Žádost
Délka tokenu (4 bity)
- Označuje délku pole Token s proměnnou délkou, které může mít délku 0-8 bajtů.
Kód požadavku / odpovědi (8 bitů)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
Třída | Kód |
Tři nejvýznamnější bity tvoří číslo známé jako „třída“, které je analogické s třída stavových kódů HTTP. Pět nejméně významných bitů tvoří kód, který komunikuje další podrobnosti o požadavku nebo odpovědi. Celý kód je obvykle sdělen ve formě kód třídy
.
Nejnovější kódy požadavků / odpovědí CoAP najdete na [1], ačkoli níže uvedený seznam uvádí některé příklady:
|
|
|
ID zprávy (16 bitů)
- Slouží k detekci duplikace zpráv a k přiřazení zpráv typu Potvrzení / Obnovení zpráv typu Potvrdit / Nepotvrdit.: Zprávy odpovědi budou mít stejné ID zprávy jako požadavek.
Žeton
Nepovinné pole, jehož velikost je označena polem Délka tokenu, jehož hodnoty generuje klient. Server musí echo každou hodnotu tokenu bez jakékoli změny zpět na klienta. Je určen k použití jako identifikátor lokálního klienta, aby poskytl další kontext pro určité souběžné transakce.
Volba
Bitové pozice | |||||||
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Možnost Delta | Možnost Délka | ||||||
Možnost Delta Extended (žádná, 8 bitů, 16 bitů) | |||||||
Délka možnosti prodloužena (žádná, 8 bitů, 16 bitů) | |||||||
Hodnota možnosti |
Možnost Delta:
- 0 až 12: Pro delta mezi 0 až 12: Představuje přesnou hodnotu delta mezi posledním ID možnosti a požadovaným ID možnosti, bez hodnoty Delta Delta Extended
- 13: Pro delta od 13 do 268: Option Delta Extended je 8bitová hodnota, která představuje hodnotu Delta Delta mínus 13
- 14: Pro delta od 269 do 65 804: Možnost Delta Extended je 16bitová hodnota, která představuje hodnotu Delta Delta mínus 269
- 15: Vyhrazeno pro značku užitečného zatížení, kde jsou možnosti Delta a Délka možnosti nastaveny společně jako 0xFF.
Délka možnosti:
- 0 až 12: Pro délku volby mezi 0 až 12: Představuje přesnou hodnotu délky bez žádné hodnoty délky prodloužené
- 13: For Option Length from 13 to 268: Option Length Extended is a 8-bit value that represents the Option Length value minus 13
- 14: Pro Option Length od 269 do 65 804: Option Length Extended je 16bitová hodnota, která představuje hodnotu délky Option minus 269
- 15: Vyhrazeno pro budoucí použití. Pokud je pole Option Length nastaveno na 0xFF, jedná se o chybu.
Hodnota možnosti:
- Velikost pole Hodnota možnosti je definována hodnotou Délka možnosti v bajtech.
- Sémantické a formátování tohoto pole závisí na příslušné možnosti.
Implementace
název | Programovací jazyk | Implementovaná verze CoAP | Klient-server | Implementované funkce CoAP | Licence | Odkaz |
---|---|---|---|---|---|---|
aiocoap | Python 3 | RFC 7252 | Klient + server | Blokové převody, pozorujte (částečné) | MIT | https://pypi.python.org/pypi/aiocoap |
Kalifornium | Jáva | RFC 7252 | Klient + server | Pozorujte, blokové převody, DTLS | EPL + EDL | https://www.eclipse.org/californium |
cantcoap | C ++ / C | RFC 7252 | Klient + server | BSD | https://github.com/staropram/cantcoap | |
Canopus | Jít | RFC 7252 | Klient + server | Jádro | Licence Apache 2.0 | https://github.com/zubairhamed/canopus |
Go-CoAP | Jít | RFC 7252, RFC 8232, RFC 7641, RFC 7959 | Klient + server | Core, Observe, Blockwise, Multicast, TCP / TLS | Licence Apache 2.0 | https://github.com/go-ocf/go-coap |
Implementace CoAP pro Go | Jít | RFC 7252 | Klient + server | Core + Draft Subscribe | MIT | https://github.com/dustin/go-coap |
CoAP.NET | C# | RFC 7252, coap-13, coap-08, coap-03 | Klient + server | Jádro, pozorování, blokové převody | 3-klauzule BSD | https://github.com/smeshlink/CoAP.NET |
CoAPSharp | C #, .NET | RFC 7252 | Klient + server | Jádro, pozorování, blokování, RD | LGPL | http://www.coapsharp.com |
CoAPthon | Krajta | RFC 7252 | Klient + server + předat proxy + reverzní proxy | Pozorujte, zjišťování serveru vícesměrového vysílání, analýza formátu CoRE Link, blokově | MIT | https://github.com/Tanganelli/CoAPthon |
CoAP Shell | Jáva | RFC 7252 | Klient | Pozorujte, blokové převody, DTLS | Licence Apache 2.0 | https://github.com/tzolov/coap-shell |
Měď | JavaScript (plugin prohlížeče) | RFC 7252 | Klient | Pozorujte, blokové převody | 3-klauzule BSD | https://github.com/mkovatsc/Copper https://addons.mozilla.org/firefox/addon/copper-270430/[trvalý mrtvý odkaz ] |
eCoAP | C | RFC 7252 | Klient + server | Jádro | MIT | https://gitlab.com/jobol/ecoap |
Erbium pro Contiki | C | RFC 7252 | Klient + server | Pozorujte, blokové převody | 3-klauzule BSD | http://www.contiki-os.org/ (er-rest-příklad) |
iCoAP | Cíl-C | RFC 7252 | Klient | Jádro, pozorování, blokové převody | MIT | https://github.com/stuffrabbit/iCoAP |
java-coap | Jáva | RFC 7252, RFC 7641, RFC 7959, RFC 8323 | Klient + server | Licence Apache 2.0 | https://github.com/PelionIoT/java-coap | |
jCoAP | Jáva | RFC 7252 | Klient + server | Pozorujte, blokové převody | Licence Apache 2.0 | https://code.google.com/p/jcoap/ |
libcoap | C | RFC 7252 | Klient + server | Pozorujte, blokové převody, DTLS | BSD / GPL | https://github.com/obgm/libcoap |
LibNyoci | C | RFC 7252 | Klient + server | Jádro, pozorování, blokování, DTLS | MIT | https://github.com/darconeous/libnyoci |
lobaro-coap | C | RFC 7252 | Klient + server | Pozorujte, blokové převody | MIT | http://www.lobaro.com/lobaro-coap |
microcoap | C | RFC 7252 | Klient + server | MIT | https://github.com/1248/microcoap | |
microCoAPy | MicroPython | RFC 7252 | Klient + server | Jádro | Licence Apache 2.0 | https://github.com/insighio/microCoAPy |
nanocoap | C | RFC 7252 | Klient + server | Jádrové, blokové převody | LGPL | https://api.riot-os.org/group__net__nanocoap.html |
nCoap | Jáva | RFC 7252 | Klient + server | Pozorujte, blokové převody, formát CoRE Link, Koncový bod ID konceptu | BSD | https://github.com/okleine/nCoAP |
uzel coap | Javascript | RFC 7252 | Klient + server | Jádro, pozorování, blokování | MIT | https://github.com/mcollina/node-coap |
Ruby coap | Rubín | RFC 7252 | Klient + server (david) | Jádro, pozorování, blokování, RD | MIT, GPL | https://github.com/nning/coap https://github.com/nning/david |
Knihovna zařízení Sensinode C. | C | RFC 7252 | Klient + server | Jádro, pozorování, blokování, RD | Komerční | https://silver.arm.com/browse/SEN00 |
Knihovna zařízení Sensinode Java | Java SE | RFC 7252 | Klient + server | Jádro, pozorování, blokování, RD | Komerční | https://silver.arm.com/browse/SEN00 |
Sensinode NanoService Platform | Java SE | RFC 7252 | Cloudový server | Jádro, pozorování, blokování, RD | Komerční | https://silver.arm.com/browse/SEN00 |
SwiftCoAP | Rychlý | RFC 7252 | Klient + server | Jádro, pozorování, blokové převody | MIT | https://github.com/stuffrabbit/SwiftCoAP |
TinyOS CoapBlip | nesC / C | coap-13 | Klient + server | Pozorujte, blokové převody | BSD | https://web.archive.org/web/20130312140509/http://docs.tinyos.net/tinywiki/index.php/CoAP |
txThings | Python (Twisted) | RFC 7252 | Klient + server | Blokové převody, pozorujte (částečné) | MIT | https://github.com/mwasilak/txThings/ |
FreeCoAP | C | RFC 7252 | Klient + Server + Proxy HTTP / CoAP | Převody Core, DTLS, Blockwise | BSD | https://github.com/keith-cullen/FreeCoAP |
coap-rs | Rez | RFC 7252 | Klient + server | Jádro, DTLS, Multicast, možnost Sledovat, Příliš mnoho požadavků Kód odpovědi | MIT | https://github.com/Covertness/coap-rs |
YaCoAP | C | MIT | https://github.com/RIOT-Makers/YaCoAP |
Implementace proxy
- Squid 3.1.9 s transparentním modulem mapování HTTP-CoAP
- jcoap Proxy
- Californium CF-Proxy
- CoAPthon
- FreeCoAP
Skupinová komunikace CoAP
V mnoha aplikačních doménách CoAP je zásadní mít schopnost adresovat několik zdrojů CoAP jako skupinu, místo toho, aby každý zdroj řešil samostatně (např. Zapnout všechna světla povolená CoAP v místnosti s jediným požadavkem CoAP spuštěným přepnutím Aby se tato potřeba vyřešila, vyvinula IETF volitelné rozšíření pro CoAP ve formě experimentálního RFC: Skupinová komunikace pro CoAP - RFC 7390[3] Toto rozšíření spoléhá na to, že vícesměrové vysílání IP bude doručovat požadavek CoAP všem členům skupiny. Použití vícesměrového vysílání má určité výhody, jako je snížení počtu paketů potřebných k doručení požadavku členům. Vícesměrové vysílání však má také svá omezení, například špatnou spolehlivost a nepřátelství vůči mezipaměti. Alternativní metoda pro skupinovou komunikaci CoAP, která používá jednosměrové vysílání místo vícesměrového vysílání, se spoléhá na to, že má zprostředkovatele, kde jsou skupiny vytvořeny. Klienti zasílají své skupinové požadavky zprostředkovateli, který zasílá jednotlivé žádosti o jednosměrové vysílání členům skupiny, shromažďuje odpovědi od nich , a odešle zpět agregovanou odpověď klientovi.[4]
Bezpečnostní
CoAP definuje čtyři režimy zabezpečení[5]
- NoSec, kde DTLS je zakázán
- PreSharedKey, kde je povolen DTLS, existuje seznam předem sdílených klíčů a každý klíč obsahuje seznam uzlů, se kterými lze komunikovat. Zařízení musí podporovat šifrovací sadu AES.
- RawPublicKey, kde je povolen DTLS a zařízení používá asymetrický pár klíčů bez certifikátu, který je ověřen mimo pásmo. Zařízení musí pro výměnu klíčů podporovat šifrovací sadu AES a algoritmy eliptické křivky.
- Certifikát, kde je povolen DTLS a zařízení používá X.509 certifikáty k ověření.
Byl proveden výzkum optimalizace DTLS implementací bezpečnostních spolupracovníků jako prostředků CoAP, spíše než použitím DTLS jako obálky zabezpečení pro provoz CoAP. Tento výzkum ukázal, že zlepšení až 6,5krát žádná optimalizovaná implementace. [6]
Bezpečnostní problémy
Ačkoli protokol standard obsahuje ustanovení pro zmírnění hrozby DDoS zesílení útoky,[7] tato ustanovení nejsou v praxi implementována,[8] což má za následek přítomnost více než 580 000 cílů primárně umístěných v Číně a útoky až 320 Gb / s.[9]
Viz také
Reference
- ^ RFC 7252, omezený aplikační protokol (CoAP)
- ^ "Integrace bezdrátových senzorových sítí s webem ", Walter, Colitti 2011
- ^ RFC 7390, skupinová komunikace pro CoAP
- ^ "Flexibilní skupinová komunikace založená na jednosměrovém vysílání pro zařízení s podporou CoAP ", Ishaq, I .; Hoebeke, J .; Van den Abeele, F .; Rossey, J .; Moerman, I .; Demeester, P. Sensors 2014
- ^ RFC 7252, omezený aplikační protokol (CoAP)
- ^ Capossele, Angelo; Cervo, Valerio; De Cicco, Gianluca; Petrioli, Chiara (červen 2015). "Zabezpečení jako prostředek CoAP: Optimalizovaná implementace DTLS pro IoT". IEEE: 529–554. doi:10.1109 / ICC.2015.7248379.
- ^ „TLS 1.3 nás všechny zachrání a další důvody, proč je IoT stále nejistý,“ Dani Grant, 24. 12. 2017
- ^ „When Machines Can't Talk: Security and Privacy Issues of Machine-to-Machine Data Protocols“, Federico Maggi a Rainer Vosseler, 06.12.2018
- ^ „Protokol CoAP je další velkou věcí pro útoky DDoS,“ Catalin Cimpanu, 05.12.2018
externí odkazy
- Funkce a souhrny specifikací a seznamy knihoven a nástrojů programovacího jazyka
- Interaktivní testy interoperability webového serveru
- RFC 7252 „Omezený aplikační protokol (CoAP)“