Internet DRAFT - draft-ma-core-stateful-observe
draft-ma-core-stateful-observe
CoRE Working Group C. Ma
Internet-Draft P. Hong
Intended status: Standards Track K. Xue
Expires: December 26, 2013 USTC
June 24, 2013
Stateful Observation in CoAP
draft-ma-core-stateful-observe-02
Abstract
The Observe Option allows a CoAP client to observe changes in the
state of resources and obtain a current representation of the last
resource state. To be an observer of an origin server's resources,
the client is required to register its interest with the server. A
successful registration will make the client added into the server's
observation list, while a failed one MAY drive the client to re-
register.
However, repeated and frequent re-registrations cannot guarantee the
client to eventually become an observer of the target server. In the
case that the server is unable or unwilling to accept an observer,
the time-intensive re-registrations will just bring redundant
messages in the constrained network and considerable energy
consumption on both the client and the server.
This memo defines a new CoAP option, State, for providing stateful
observation on the resources of CoAP servers. By observing the state
of the server in terms of the Observe Option, a client can explicitly
learn when the server will not actively reject an observation
registration, and then can wisely performs the re-registration. This
avoids the potential registration flooding that causes considerable
network overhead and energy consumption on the constrained nodes.
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
Ma, et al. Expires December 26, 2013 [Page 1]
Internet-Draft Stateful Observation in CoAP June 2013
material or to cite them other than as "work in progress."
This Internet-Draft will expire on December 26, 2013.
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
This document may contain material from IETF Documents or IETF
Contributions published or made publicly available before November
10, 2008. The person(s) controlling the copyright in some of this
material may not have granted the IETF Trust the right to allow
modifications of such material outside the IETF Standards Process.
Without obtaining an adequate license from the person(s) controlling
the copyright in such materials, this document may not be modified
outside the IETF Standards Process, and derivative works of it may
not be created outside the IETF Standards Process, except to format
it for publication as an RFC or to translate it into languages other
than English.
Ma, et al. Expires December 26, 2013 [Page 2]
Internet-Draft Stateful Observation in CoAP June 2013
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Background . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2. Protocol overview . . . . . . . . . . . . . . . . . . . . 4
1.3. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5
2. The State Option . . . . . . . . . . . . . . . . . . . . . . . 5
3. Using the State Option . . . . . . . . . . . . . . . . . . . . 6
3.1. State notifications . . . . . . . . . . . . . . . . . . . 7
3.2. State option in request . . . . . . . . . . . . . . . . . 7
3.3. State option in initial response . . . . . . . . . . . . . 7
3.4. State option in state notifications . . . . . . . . . . . 8
3.5. Cancellation . . . . . . . . . . . . . . . . . . . . . . . 8
4. Intermediaries . . . . . . . . . . . . . . . . . . . . . . . . 8
5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6. Security Considerations . . . . . . . . . . . . . . . . . . . 14
6.1. Amplification attacks . . . . . . . . . . . . . . . . . . 14
6.2. IP address spoofing attacks . . . . . . . . . . . . . . . 14
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 14
9. Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10.1. Normative reference . . . . . . . . . . . . . . . . . . . 15
10.2. Informative reference . . . . . . . . . . . . . . . . . . 15
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 15
Ma, et al. Expires December 26, 2013 [Page 3]
Internet-Draft Stateful Observation in CoAP June 2013
1. Introduction
1.1. Background
CoAP [I-D.ietf-core-coap] is an Application Protocol for Constrained
Nodes/Networks. The observe [I-D.ietf-core-observe] specification
describes a subject/observer pattern to establish an observation
relationship between a CoAP client and a CoAP server. In this way,
the CoAP client will be notified whenever the state of the observed
resource changes. Furthermore, to provide the CoAP client with
tailored resources, the conditional observe [ID.li-core-conditional-
observe] specification proposes to implement frequently occurring
conditional observations by virtue of a new CoAP Condition Option.
In both of the specifications, the client is required to register its
interest with the server. A successful registration will make the
client added into the server's observation list, while a failed one
may drive the client to re-register. If the registration is
frustrated by factors such as network congestion and transmission
error, the client still has chances to become an observer by re-
registering with the server. In the case that the registration
failure results from the target server's incapability or
unwillingness, however, time-intensive re-registrations will not work
but just cause redundant messages in the constrained network and
waste the constrained energy of both the client and the server.
1.2. Protocol overview
This memo provides a mechanism for CoAP clients to explicitly learn
when the server will not actively reject an observation registration,
and to wisely perform a re-registration. This is accomplished
through a new CoAP option "State", which defines three states of a
CoAP server in terms of the "Observe" option (observation states) as
follows.
STATE 0: The CoAP server can add a CoAP client in the observation
list;
STATE 1: The CoAP server cannot add a CoAP client in the observation
list, but into the candidate queue, which is maintained by the server
for notifying the members about the changed observation state;
STATE 2: The CoAP server is unwilling or unable to accept a CoAP
client as an observer or a candidate.
A CoAP client who wishes to observe the resources of a CoAP server
can add the State Option along with the Observe Option in the initial
registration request. If the server is in STATE 0, the client will
Ma, et al. Expires December 26, 2013 [Page 4]
Internet-Draft Stateful Observation in CoAP June 2013
be successfully added into the observation list and will become an
observer of the resources of the server. If the server is in STATE
1, the client will become a candidate, and thus can re-register with
the server when it is notified that the server returns to STATE 0.
This case is a typical stateful observation pattern as shown in
Figure 1. If the server is in STATE 2, the client temporarily quits
registering with the server.
Observer Subject
| |
| Register |
+-------------------->|
| |
| State Notification |
|<--------------------+
| |
| State Notification |
|<--------------------+
| |
| Re-register |
+-------------------->|
| |
|Resource Notification|
|<--------------------+
| |
|Resource Notification|
|<--------------------+
| |
Figure 1: Stateful Observation Design Pattern
1.3. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
2. The State Option
+------+-----+----------+-----------+--------+---------+
| Type | C/E | Name | Data type | Length | Default |
+------+-----+----------+-----------+--------+---------+
| 30 | E | State | uint | 1-2B | (none) |
+------+-----+----------+-----------+--------+---------+
Ma, et al. Expires December 26, 2013 [Page 5]
Internet-Draft Stateful Observation in CoAP June 2013
Table 1: State Option Format
The State Option can be presented in both request and response
messages. In this document, the State Option MUST be used together
with the "Observe" Option and MAY be used with the "Max-age" Option.
0 1 2 3 4 5 6 7 0 1 2
+-+-+-+-+-+-+-+-+-+-+
| TYPE |R| VAL |
+-+-+-+-+-+-+-+-+-+-+
Figure 2: State Option Value
TYPE: The type indicates which option is described by the State
Option. In this document, the option number of the described Observe
Option is 10, therefore, the type should be 001010. It is set to be
a 6-bit integer for option description extension use.
R: The reliability flag indicates whether a state notification needs
to be sent in non-confirmable (0) form or in confirmable (1) form.
VAL: The state value that is represented by the VAL flag is used to
indicate the state of a CoAP server in terms of an option. For
instance, the state values combined with the Observe Option are 0, 1,
and 10, referring to the three observation states of an observable
CoAP server that are summarized in TABLE 2. The maximal length of
VAL is set to be 3 bits for extension use. The VAL part of a State
Option in the request message MUST be vacant.
+----------+-----------+--------------------------------+
|State Type|State Value| Indication |
+----------+-----------+--------------------------------+
| 1010 | 0 | Observation list is available |
+----------+-----------+--------------------------------+
| 1010 | 1 |Observation list is unavailable |
| | | Candidate queue is available |
+----------+-----------+--------------------------------+
| 1010 | 10 | Both are unavailable |
+----------+-----------+--------------------------------+
Table 2: State Indication
3. Using the State Option
Ma, et al. Expires December 26, 2013 [Page 6]
Internet-Draft Stateful Observation in CoAP June 2013
3.1. State notifications
If a CoAP client is added in the observation list of a CoAP server,
it will receive resource notifications as described in [I-D.ietf-
core-observe]. If the client is added in the candidate queue,
however, it will receive state notifications describing the
observation state of the server. A state notification includes an
Observe Option, a State Option, a Token Option that matches the token
specified by the client in the GET request, and a Max-age Option that
indicates the state notification delivery interval, and MAY contains
the payload which is in reply to the GET request.
3.2. State option in request
If a CoAP client wants to establish an observation relationship with
a CoAP server, it sends a GET request with an Observe Option, a State
Option and a Token Option to the server. Specifically, the TYPE of
the State Option is 1010, indicating that the client wants to observe
the observation state of the server, and the VAL part of the State
Option in the request message MUST be vacant.
3.3. State option in initial response
A CoAP server keeps an observation list and a candidate queue. When
the CoAP server receives the request, it performs as follows.
It firstly checks the state of its observation list and the candidate
queue.
If the server is in STATE 0, it adds the client in the observation
list, and responds as the same way described in [I-D.ietf-core-
observe], which excludes the State Option.
If the server is in STATE 1, it adds the client in the candidate
queue and sends a response containing the payload in reply to the GET
request, the Observe Option, the Token Option, the Max-age Option,
and the State Option with the TYPE part of 1010 and the VAL part of
1. Note that the Max-age Option is set for indicating the life time
of a state notifications, rather than the payload, and its default
value is 60s.
If the server is in STATE 2, it sends a response containing the
payload in reply to the GET request, the Observe Option, the Token
Option, and the State Option with the TYPE part of 1010 and the VAL
part of 10. The client will not be added into the candidate queue
and will not receive subsequent state notifications.
Ma, et al. Expires December 26, 2013 [Page 7]
Internet-Draft Stateful Observation in CoAP June 2013
3.4. State option in state notifications
The server MUST choose an appropriate max-age for the state
notification. The value of the max-age should be larger than that in
the resource notifications.
The server sends the state notification with the VAL part of 1 to the
observation candidates whenever the last state notification has been
sent over the max-age, and notifies the candidates when its
observation state changes to be State 0.
Upon receiving the state notification with the VAL part of 0, the
candidate re-registers with the server by sending a GET request with
the Observe Option, the State Option and a new token.
The number (n) of the responsive candidates MAY be larger than that
(N) of the observers the server can additionally add in the list. In
this case, the server just simply chooses the top N candidates whose
responses are firstly received by it. The rest n-N responders still
stay in the candidate queue. A former candidate learns whether the
former re-registration succeeds through the subsequent notification.
Namely, a subsequent rescoure notification indicates a successful re-
registration, while a subsequent state notification indicates a
failed re-registration.
3.5. Cancellation
When a CoAP client wants to leave the observation list, it follows
the operations in [I-D.ietf-core-observe]. If the client wants to
leave the candidate queue, it can reject a confirmable notification
with a RST message or perform a GET request without the State Option
and the Observe Option for a currently observed state. In both of
the two cases, the server will remove the client from the candidate
queue.
The dismission of an observer is the same as that in [I-D.ietf-core-
observe]. If the server wants to dismiss a candidate, it SHOULD set
the VAL part of the state notification to be 10 and choose a large
max-age for the state notification. Otherwise, the server SHOULD NOT
send the state notification with the VAL part of 10 to the
candidates.
4. Intermediaries
It is possible that there is an intermediary between an origin server
and the CoAP client that is interested in a resource in the namespace
of the server. In this case, the client registers its interest with
Ma, et al. Expires December 26, 2013 [Page 8]
Internet-Draft Stateful Observation in CoAP June 2013
the intermediary towards the origin server, acting as if it was
communicating with the origin server itself as specified in Section
3. The intermediary provides the client with a current
representation of the target resource and sends (state) notifications
upon changes to the resource (or observation) state, as an origin
server as specified in Section 3. To accomplish this, the
intermediary SHOULD make use of the protocol specified in this
document, taking the role of the client and registering its own
interest in the target resource with the original server.
If there is more than one CoAP-to-CoAP intermediary between the CoAP
client and the origin server, the first intermediary towards the
origin server is in charge of providing the client with a current
representation of the target resource and sends (state) notifications
upon changes to the resource (or observation) state, as an origin
server as specified in Section 3. The intermediary transmits the GET
request from the client hop by hop. If the next hop does not return
a response with an Observe Option, the intermediary MAY resort to
polling the next hop, or MAY itself return a response without an
Observe Option. The last intermediary towards the server transmits
the request to the server as if it is the client, or responds to the
request with the storage in its cache.
Additionally, the intermediary can also register in several target
resources with the original servers that it can directly reach, and
keep its own cache up to date. Whenever there is a GET request with
an Observe Option and a State Option from the client (or other
intermediary), the intermediary responds to the client with the
storage in its cache.
5. Examples
This section gives a number of examples to illustrate the use of
State Option in a GET request.
The first example (Figure 3) shows that a registration that is
carried in the GET request with Observe Option and State Option makes
the client added in the observation list of the server. The client
receives resource notifications of the current state and upon a state
change.
Ma, et al. Expires December 26, 2013 [Page 9]
Internet-Draft Stateful Observation in CoAP June 2013
Observed CLIENT SERVER Resource Observation
content State State
________ | | ________ _____
| |
unknown | | 20.6 C list
+--------->| Header: GET 0x43011633
| GET | Token: 0x4a
| | Uri-Path: temperature
| | Observe: 0
| | State:
| |
________ |<---------+ Header: 2.05 0x63451633
| 2.05 | Token: 0x4a
20.6 C | | Observe: 8
| | Max-Age: 20
| | Payload: "20.6 C"
| | ________ _____
| |
________ |<---------+ 18.9 C list
| 2.05 | Header: 2.05 0x53457b50
18.9 C | | Token: 0x4a
| | Observe: 16
| | Max-Age: 20
| | Payload: "18.9 C"
| |
Figure 3: The client is added in the observation list after a
registration
The example in Figure 4 shows that a registration that is carried in
the GET request with Observe Option and State Option makes the client
added into the candidate queue of the server. The client receives a
state notification of the current observation state and upon a state
change. When the client learns the server is in STATE 0 through the
state notification, the client re-registers with the server and then
is added into the observation list.
Ma, et al. Expires December 26, 2013 [Page 10]
Internet-Draft Stateful Observation in CoAP June 2013
Observed CLIENT SERVER Resource Observation
content State State
________ | | ________ _____
| |
unknown | | 20.6 C queue
+--------->| Header: GET 0x43011633
| GET | Token: 0x4a
| | Uri-Path: temperature
| | Observe: 0
| | State:
| |
________ |<---------+ Header: 2.05 0x63451633
| 2.05 | Token: 0x4a
1 | | Observe: 8
20.6 C | | Max-Age: 40
| | State: 1
| | ________ _____ Payload: "20.6 C"
| |
| | 18.9 C list
________ |<---------+ Header: 2.03 0x53457b50
| 2.03 | Token: 0x4a
0 | | Observe: 16
20.6 C | | Max-Age: 40
| | State: 0
| |
+--------->| Header: GET 0x43021634
| GET | Token: 0xa1
| | Uri-Path: temperature
| | Observe: 23
| | State:
| |
________ |<---------+ Header: 2.05 0x64451733
| 2.05 | Token: 0xa1
18.9 C | | Observe: 31
| | Max-Age: 20
| | Payload: "18.9 C"
| |
Figure 4: The client is added into the candidate queue after the
initial registration and is added into the observation list after the
re-registration
This example (Figure 5) shows that the client that is in the
candidate queue hasn't received a state notification over a max-age
time of 40s, and thus re-registers with the server.
Ma, et al. Expires December 26, 2013 [Page 11]
Internet-Draft Stateful Observation in CoAP June 2013
Observed CLIENT SERVER Resource Observation
content State State
________ | | ________ _____
| |
1 | | 20.6 C queue
19.7 C | |
| | ________ _____
| |
| | 18.9 C list
| X-------+ Header: 2.03 0x53457b50
| 2.03 | Token: 0x4a
| | Observe: 16
| | Max-Age: 40
| | State: 0
________ | |
+--------->| Header: GET 0x43011633
1 | GET | Token: 0xb4
19.7 C | | Uri-Path: temperature
| | Observe: 27
| | ________ _____ State:
| |
________ |<---------+ 19.4 C list Header: 2.05 0x63451633
| 2.05 | Token: 0xb4
19.4 C | | Observe: 31
| | Max-Age: 40
| | Payload: "19.4 C"
| |
Figure 5: The client re-registers after Max-Age ends
The example in Figure 6 shows that a proxy registers its interest
with the server, and receives state notifications to keep its cache
up to date. The client gets state notification from the proxy and
registers with the server (via the proxy) when the server returns to
State 0.
Ma, et al. Expires December 26, 2013 [Page 12]
Internet-Draft Stateful Observation in CoAP June 2013
CLIENT PROXY SERVER
| | |
| +------>| Header: GET 0x44015fb8
| | GET | Token: 0x1a
| | | Uri-Host: sensor.example
| | | Uri-Path: temperature
| | | Observe: 0
| | | State:
| | |
| |<------+ Header: 2.05 0x63455fb8
| | 2.05 | Token: 0x1a
| | | Observe: 32
| | | Max-Age: 60
| | | State: 1
| | | Payload: "19.4 C"
| | |
| |<------+ Header: 2.03 0x63455f56
| | 2.03 | Token: 0x1a
| | | Observe: 40
| | | Max-Age: 60
| | | State: 0
| | |
| +------>| Header: GET 0x42011663
| | GET | Token: 0x3b
| | | Uri-Host: sensor.example
| | | Uri-Path: temperature
| | | Observe: 45
| | | State:
| | |
| <-------+ Header: 2.05 0x64451733
| | 2.05 | Token: 0x3b
| | | Observe: 49
| | | Max-Age: 30
| | | Payload: "18.9 C"
| | |
+------>| | Header: GET 0x42011633
| GET | | Token: 0x9a
| | | Proxy-Uri: coap://sensor.example/temperature
| | | Observe: 52
| | | State:
| | |
|<-----+| | Header: 2.03 0x62451633
| 2.05 | | Token: 0x9a
| | | Observe: 56
| | | Max-Age: 25
| | | Payload: "18.9 C"
| | |
Ma, et al. Expires December 26, 2013 [Page 13]
Internet-Draft Stateful Observation in CoAP June 2013
Figure 6: A proxy registers with the server and receives state
notification to keep its cache up to date
6. Security Considerations
6.1. Amplification attacks
The amplification attacks towards observing the observation state are
more mitigatory compared to observing resources, since the state
notification has smaller message size and lower frequency than a
resource notification due to the lack of resource representation
payload and a larger max-age. Nonetheless, to further reduce the
harmful effects caused by the amplification attacks, the state
notifications sent in non-confirmable messages are recommended to be
interspersed with confirmable messages.
6.2. IP address spoofing attacks
Spoofing (state) notifications or RST in the response to a (state)
notification in a CON message, MAY make a client "deaf". For
instance, if a state notification with "VAL=0" is tampered by the
spoofing attacker to be a state notification with "VAL=10" and a
large max-age, the client will be spoofed to be waiting for a long
time. This kind of attack can be prevented using security modes
other than NoSec.
7. IANA Considerations
The following entries are added to the CoAP Option Numbers registry
of [I-D.ietf-core-coap]:
+--------+---------+-----------+
| Number | Name | Reference |
+--------+---------+-----------+
| 30 | State | [RFCXXXX] |
+--------+---------+-----------+
8. Acknowledgements
Thanks to the support from the National Science and Technology Major
Project of China under Grant No.2011ZX03005-006.
Ma, et al. Expires December 26, 2013 [Page 14]
Internet-Draft Stateful Observation in CoAP June 2013
9. Changelog
Changed from draft-00 to draft-01:
Added the description of max-age. Section 3.4
Changed the description of cancellation. Section 3.5
10. References
10.1. Normative reference
[I-D.ietf-core-coap]
Shelby, Z., Hartke, K., Bormann, C., and B. Frank,
"Constrained Application Protocol (CoAP)",
draft-ietf-core-coap-10 (work in progress), June 2012.
[I-D.ietf-core-observe]
Hartke, K., "Observing Resources in CoAP",
draft-ietf-core-observe-05 (work in progress), March 2012.
10.2. Informative reference
[I-D.li-core-conditional-observe]
Li, S., Hoebeke, J., and A. Jara, "Conditional observe in
CoAP", draft-li-core-conditional-observe-02 (work in
progress), June 2012.
Authors' Addresses
Changsha Ma
USTC
Room 307, EEIS Department, USTC West Campus
Shushan District, Hefei, Anhui 230027
P. R. China
Phone: +86-551-3601334
Email: machangs@mail.ustc.edu.cn
Ma, et al. Expires December 26, 2013 [Page 15]
Internet-Draft Stateful Observation in CoAP June 2013
Peilin Hong
USTC
Room 305, EEIS Department, USTC West Campus
Shushan District, Hefei, Anhui 230027
P. R. China
Phone: +86-551-3601334
Email: plhong@ustc.edu.cn
Kaiping Xue
USTC
Room 305, EEIS Department, USTC West Campus
Shushan District, Hefei, Anhui 230027
P. R. China
Phone: +86-551-3601334
Email: kpxue@ustc.edu.cn
Ma, et al. Expires December 26, 2013 [Page 16]