0% found this document useful (0 votes)
84 views27 pages

Constrained Application Protocol (Coap) : Politecnico Di Milano

The document discusses the Constrained Application Protocol (CoAP), which was designed for use in constrained wireless networks. CoAP enables web-based services in networks with limited-power devices and low-bandwidth connections. It uses a request/response interaction model similar to HTTP, but is designed to be more lightweight for use in constrained environments. CoAP uses UDP as its transport protocol and provides functions for message reliability.

Uploaded by

rent pe
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
84 views27 pages

Constrained Application Protocol (Coap) : Politecnico Di Milano

The document discusses the Constrained Application Protocol (CoAP), which was designed for use in constrained wireless networks. CoAP enables web-based services in networks with limited-power devices and low-bandwidth connections. It uses a request/response interaction model similar to HTTP, but is designed to be more lightweight for use in constrained environments. CoAP uses UDP as its transport protocol and provides functions for message reliability.

Uploaded by

rent pe
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 27

Politecnico di Milano

Advanced Network Technologies Laboratory

Constrained Application Protocol


(CoAP)

1
Background  
o  GOAL:  to  enable  web-­‐based  services  in  
constrained  wireless  networks  
n  8  bit  micro-­‐controllers  
n  limited  memory  
n  low-­‐power  networks  
o  Problem:  WEB  solu@on  are  hardly  applicable  
o  Solu@on:  re-­‐design  web-­‐based  services  for  
constrained  networks  -­‐>  COAP  

2
How  Does  the  Web  Work?  
o  Resources  in  the  Web  are:  
n  managed  by  servers    
n  iden@fied  by  URIs    
n  accessed  synchronously  by  
clients  through  request/
response  paradigms  
o  In  a  word,  Representa@onal    
State  Transfer  (REST)    

3
URL Resolution

4
Request/Response
Transaction

o  Other  common  HTTP  methods:  PUT,  POST,  


DELETE  

5
The CoAP Architecture

6
CoAP Design Requirements

See draft-shelby-core-coap-req

7
CoAP At a Glance
o  Embedded web transfer protocol (coap://)
o  Asynchronous transaction model
o  UDP binding with reliability and multicast support
o  GET, POST, PUT, DELETE methods
o  URI support
o  4 byte header
o  Subset of MIME types and HTTP response codes
o  Built-in discovery
o  Optional observation and block transfer

8
COAP  Messaging  Basics  
o  Transport:
n  (mainly) UDP binding
o  Message Exchange between Endpoints
n  Messages with 4 bytes header (shared by request and
responses) containing a message ID (16 bits)
n  Reliable exchange through Confirmable Messages which
must be acknowledged (through ACK or Reset Messages).
Simple Stop-and-Wait retransmission with exponential back-
off.
n  Unreliable exchange through Non-Confirmable Message
n  Duplicate detection for both confirmable and non-confirmable
messages (through message ID)

9
COAP  Messaging  

Message ID

10
COAP Message Semantics
o  REST Request/Response piggybacked
on CoAP Messages
o  Method, Response Code and Options
(URI, content-type etc.)

11
COAP  Request/Response  Examples  
Message ID

Token

12
COAP:  Separate  Response  

13
COAP:  Non-­‐confirmable  Request  

14
Message Header (4 bytes)
!
!
! 0 1 2 3!
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+!
|Ver| T | TKL | Code | Message ID |!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+!
| Token (if any, TKL bytes) ...!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+!
| Options (if any) ...!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+!
|1 1 1 1 1 1 1 1| Payload (if any) ...!
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+!
!
!
!
!
Ver - Version (1)!
!
T – Message Type (Confirmable, Non-Confirmable, Acknowledgement, Reset)!
!
TKL- Token Length, if any, the number of Token bytes after this header!
!
Code - Request Method (1-10) or Response Code (40-255)!
!
Message ID – 16-bit identifier for matching responses!
!
Token – Optional response matching token

15
Option Format
!
!
!
0 1 2 3 4 5 6 7!
+---------------+---------------+!
| | |!
| Option Delta | Option Length | 1 byte!
| | |!
+---------------+---------------+!
\ \!
/ Option Delta / 0-2 bytes!
\ (extended) \!
+-------------------------------+!
\ \!
/ Option Length / 0-2 bytes!
\ (extended) \!
+-------------------------------+!
\ \!
/ /!
\ \!
/ Option Value / 0 or more bytes!
\ \!
/ /!
\ \!
+-------------------------------+!
!
!
!
Option Delta - Difference between this option type and the previous!
!
Length - Length of the option value!
!
Value - The value of Length bytes immediately follows Length

16
Base Specification Options
!
!
+-----+---+---+---+---+----------------+--------+--------+----------+!
| No. | C | U | N | R | Name | Format | Length | Default |!
+-----+---+---+---+---+----------------+--------+--------+----------+!
| 1 | x | | | x | If-Match | opaque | 0-8 | (none) |!
| 3 | x | x | - | | Uri-Host | string | 1-255 | (see |!
| | | | | | | | | below) |!
| 4 | | | | x | ETag | opaque | 1-8 | (none) |!
| 5 | x | | | | If-None-Match | empty | 0 | (none) |!
| 7 | x | x | - | | Uri-Port | uint | 0-2 | (see |!
| | | | | | | | | below) |!
| 8 | | | | x | Location-Path | string | 0-255 | (none) |!
| 11 | x | x | - | x | Uri-Path | string | 0-255 | (none) |!
| 12 | | | | | Content-Format | uint | 0-2 | (none) |!
| 14 | | x | - | | Max-Age | uint | 0-4 | 60 |!
| 15 | x | x | - | x | Uri-Query | string | 0-255 | (none) |!
| 16 | | | | | Accept | uint | 0-2 | (none) |!
| 20 | | | | x | Location-Query | string | 0-255 | (none) |!
| 35 | x | x | - | | Proxy-Uri | string | 1-1034 | (none) |!
| 39 | x | x | - | | Proxy-Scheme | string | 1-255 | (none) |!
+-----+---+---+---+---+----------------+--------+--------+----------+!
!
C=Critical, U=Unsafe, N=NoCacheKey, R=Repeatable!

17
Dealing with Packet Loss

o  Stop  and  Wait  approach  


o  Repeat  a  request  aSer  a  @me-­‐out  in  case  
ACK  (or  RST)  is  not  coming  back  
18
Back-­‐Off  Details  
o  Ini@al  @me-­‐out  set  to:    
n  Rand  [ACK_TIMEOUT,  ACK_TIMEOUT  *  
ACK_RANDOM_FACTOR]  ([2s,  3s])  
o  When  @me-­‐out  expires  and  the  transmission  counter  is  
less  than  MAX_RETRANSMIT  (4)  
n  retransmit  
n  Increase  transmission  counter  
n  double  the  @me-­‐out  value  
o  The  procedure  is  repeated  un@l  
n  A  ACK  is  received  
n  A  RST  message  is  received  
n  the  transmission  counter  exceeds  MAX_RETRANSMIT  
n  the  total  aaempt  dura@on  exceeds  MAX_TRANSMIT_WAIT  
(93s)  

19
Proxying and caching

20
COAP  ObservaKon  
o  PROBLEM:    
n  REST  paradigm  is  oSen  “PULL”  type,  that  is,  
data  is  obtained  by  issuing  an  explicit  request  
n  Informa@on/data  in  WSN  is  oSen  periodic/
triggered  (e.g.,  get  me  a  temperature  sample  
every  2  seconds  or  get  me  a  warning  if  
temperature  goes  below  5°C)  
o  SOLUTION:  use  Observa@on  on  COAP  
resources  

21
Observation

See draft-ietf-core-observe

22
COAP  Block  Transfer  
o  PROBLEM:  avoid  segmenta@on  in  the  lower  
layers  (IPv6)  
o  SOLUTION:  COAP  Block  Transfer  Mode  
n  brings  up  fragmenta@on  at  the  applica@on  layer    

23
Block transfer

o  Block2  Op@on  added  to  messages  


n  nr=incremental  block  number  within  original  data  
n  m=more  blocks  flag  
n  sz=block  size  
24
Discovery & Semantics
o  Resource Discovery
n  GOAL: Discovering the links hosted by
CoAP (or HTTP) servers
GET /.well-known/core?optional_query_string

n  Returns a link-header style format


o  URL, relation, type, interface, content-type etc.

25
CoRE Resource Discovery

!
!
!
!
!
!
!
</dev/bat>;obs;if="";rt="ipso:dev-bat";ct="0",!
</dev/mdl>;if="";rt="ipso:dev-mdl";ct="0",!
</dev/mfg>;if="";rt="ipso:dev-mfg";ct="0 ,!
</pwr/0/rel>;obs;if="";rt="ipso:pwr-rel";ct="0",!
</pwr/0/w>;obs;if="";rt="ipso:pwr-w";ct="0",!
</sen/temp>;obs;if="";rt="ucum:Cel";ct="0"!

26
Getting Started with CoAP
o  Open source implementations:
n  Java CoAP Library Californium
n  C CoAP Library Erbium
n  libCoAP C Library
n  jCoAP Java Library
n  OpenCoAP C Library
n  TinyOS and Contiki include CoAP support
o  Firefox has a CoAP plugin called Copper
o  Wireshark has CoAP plugin

27

You might also like