[Search] [txt|pdf|bibtex] [Tracker] [Email] [Diff1] [Diff2] [Nits]

Versions: 00 01                                                         
CoRE                                                          C. Bormann
Internet-Draft                                   Universitaet Bremen TZI
Intended status: Standards Track                           July 04, 2014
Expires: January 5, 2015


                        A TCP transport for CoAP
                     draft-bormann-core-coap-tcp-01

Abstract

   CoAP (RFC 7252) is defined to be transported over datagram transports
   such as UDP or DTLS.  For a number of applications, it may be useful
   to channel CoAP messages in a TCP connection.  This draft discusses
   different ways to do that.

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
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on January 5, 2015.

Copyright Notice

   Copyright (c) 2014 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.




Bormann                  Expires January 5, 2015                [Page 1]


Internet-Draft                  CoAP-TCP                       July 2014


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Objectives  . . . . . . . . . . . . . . . . . . . . . . .   2
     1.2.  Terminology . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Framing . . . . . . . . . . . . . . . . . . . . . . . . . . .   3
     2.1.  Length prefix . . . . . . . . . . . . . . . . . . . . . .   3
     2.2.  Delimiter-based . . . . . . . . . . . . . . . . . . . . .   3
     2.3.  Self-delimiting . . . . . . . . . . . . . . . . . . . . .   4
   3.  Changes to CoAP . . . . . . . . . . . . . . . . . . . . . . .   5
     3.1.  One Message Type Only . . . . . . . . . . . . . . . . . .   5
     3.2.  Token . . . . . . . . . . . . . . . . . . . . . . . . . .   5
     3.3.  Message-ID, Fixed Header Format . . . . . . . . . . . . .   5
     3.4.  Rejecting messages  . . . . . . . . . . . . . . . . . . .   5
     3.5.  Resilient variant . . . . . . . . . . . . . . . . . . . .   6
     3.6.  Signatures  . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  Transport selection . . . . . . . . . . . . . . . . . . . . .   6
   5.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   6
     5.1.  Normative References  . . . . . . . . . . . . . . . . . .   6
     5.2.  Informative References  . . . . . . . . . . . . . . . . .   6
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   7

1.  Introduction

   (See Abstract)

   The primary use case addressed by this specification is:

   o  Aggregation of CoAP streams behind proxies, e.g.:

      *  Behind a DTLS terminator/load balancer on the cloud side

      *  As a wide-area interface to a proxy that speaks CoAP over UDP
         on the constrained side

1.1.  Objectives

   (TBD)

1.2.  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].

   The term "byte" is used in its now customary sense as a synonym for
   "octet".




Bormann                  Expires January 5, 2015                [Page 2]


Internet-Draft                  CoAP-TCP                       July 2014


   All multi-byte integers in this protocol are interpreted in network
   byte order.

2.  Framing

   The TCP stream needs to be structured into frames in order to delimit
   CoAP messages.

   As the size of CoAP messages is limited, there is no need to split a
   single CoAP message into multiple frames (no interleaving).

   Several alternative frame formats are possible.  The current version
   of this specifications proposes several alternatives, with the
   understanding that a single one of these is likely to be chosen.

   One desirable characteristic of a framing scheme is detection of
   premature termination of the TCP connection.  While TCP in principle
   distinguishes orderly (FIN) and destructive (RST) termination of a
   connection, the difference is not always visible from the socket
   interface; also, a crashing process gives the impression of orderly
   termination.  All schemes proposed here provide this detection.

2.1.  Length prefix

   A popular form of framing for TCP starts each frame with a length
   indication [RFC1006].

   A simple form of length prefix would be an SDNV [RFC6256], which is
   efficient for large numbers of mostly small (< 128 B) messages.
   Alternatively, a two-byte prefix could always be used, or the length
   could be embedded in the CoAP message by using the unused Message-ID
   field.

   The main disadvantage of a length prefix is that the sender needs to
   know the length before sending the message proper.  The main
   advantage of a length prefix is that the receiver knows the length at
   the start of receiving the message.

2.2.  Delimiter-based

   Another form of message delimiting uses special byte values for
   delimiting protocol elements, e.g.  CRLF for lines in a text stream.
   Since CoAP requires full data transparency, introducing a delimiter
   byte requires escaping occurrences of the delimiter in the data
   stream, which in turn requires escaping the escape mechanism.  In
   traditional byte-stuffing (called "octet-stuffing" in [RFC1662]), the
   overhead of this escaping can be up to 100 % on top of the actual
   data.  Cheshire has shown how to combine delimiter-based and length



Bormann                  Expires January 5, 2015                [Page 3]


Internet-Draft                  CoAP-TCP                       July 2014


   prefix based encoding in "Consistent Overhead Byte Stuffing" [COBS];
   however, this requires at least two bytes per message, achieving full
   efficiency only for relatively large messages and only if the length
   of the remaining message is known (see Section 2.1 before).  A scheme
   such as the FSE scheme in [RFC2687] might be simpler to implement
   (the efficiency of an FSE-style scheme can be quite high by
   exploiting the fact that CoAP frames never start with a value below
   0x40).  A good value for FSE-style (or even a non-zero COBS-style)
   delimiter can be determined by examining a corpus of CoAP messages
   (TBD).

   A major advantage of a COBS-like scheme would be compatibility with
   schemes that synchronize TCP packet boundaries with message
   boundaries [MINION].

   Requiring a delimiter at the _end_ of a frame fulfills the
   requirement for detection of premature TCP connection termination,
   except for an FSE-style scheme where the FSE starting an escape
   sequence happens to fall on a packet boundary.

2.3.  Self-delimiting

   Currently, CoAP messages are not self-delimiting, as the payload
   delimiter is optional and does not contain a payload length.

   In the scheme proposed here, the payload delimiter is made required;
   the payload length is then encoded exactly as in CoAP options.  For
   example:

   o  0xF0 would indicate that a zero-length (absent) payload follows

   o  0xF1 would indicate a single-byte payload

   o  0xFD 0x47 would indicate a 84-byte payload

   o  0xFE 0xFF 0xFF would indicate a 65804-byte payload

   One advantage of implementing this scheme is that it could also be
   used to aggregate multiple CoAP messages into one datagram of a
   datagram-based transport such as UDP or DTLS, if that is desired,
   without increasing the overhead for unaggregated messages.  For this
   application, 0xFF could still be used in order to efficiently encode
   "payload delimited by message boundary" in the final CoAP message in
   the datagram.







Bormann                  Expires January 5, 2015                [Page 4]


Internet-Draft                  CoAP-TCP                       July 2014


3.  Changes to CoAP

   The content of this section is expressed as a delta on [RFC7252].

3.1.  One Message Type Only

   As reliability is handled by TCP, there is no need for ACK messages.
   Similarly, rebooting nodes will drop their TCP connections, so there
   is no need for RST messages (but see Section 3.4).

   Cf. [I-D.savolainen-core-coap-websockets].

   There may still be a desire to differentiate CON and NON for the
   intention behind a TCP-to-UDP proxy.  In contrast to
   [I-D.savolainen-core-coap-websockets], this specification proposes to
   retain the difference between CON and NON messages as a hint for the
   reliability requirements placed on a message forwarded through a
   proxy.  There are no ACK or RST messages; ACK messages MUST be
   encoded as CON messages.

3.2.  Token

   The Token space is local to the TCP connection.  In particular, this
   means that closing down a TCP connection cancels all outstanding
   requests (the responses are not sent over a new connection, which is
   handled like a new endpoint).

3.3.  Message-ID, Fixed Header Format

   As there are no ACKs, there is no need to correlate an ACK to a CON.
   As a result, there is no need to carry a Message-ID for this.  There
   is also no danger of duplication of a message, so the Message-ID is
   entirely without function.

   If it seems desirable to maintain the frame format, the message-ID
   could still be sent empty.  Alternatively, it could be used as a
   space for the frame length.

   As does [I-D.savolainen-core-coap-websockets], this specification
   proposes to elide the Message-ID, i.e. to send bytes 0 and 1 of the
   CoAP message followed directly by byte 4 and following.

3.4.  Rejecting messages

   [I-D.ietf-core-observe] now supports Observation Cancellation,
   reducing the need to support Reset-like messages for cancelling an
   observation relationship.




Bormann                  Expires January 5, 2015                [Page 5]


Internet-Draft                  CoAP-TCP                       July 2014


3.5.  Resilient variant

   An alternative approach is to treat the TCP connection as ephemeral.
   If a connection can go away at any point in time, and be replaced by
   a new one, the delivery of messages is no longer fully reliable.  All
   functions of Message-IDs remain, as well as the functions of ACKs.
   Tokens retain their meaning beyond a connection.

3.6.  Signatures

   A new TCP connection can send an identifying signature in both
   directions to facilitate debugging and protocol evolution and to
   enable detection of mismatches.

   E.g., the side opening a connection could send the seven bytes
   "CoAP1\r\n" and the answering side similarly "cOap1\r\n".

4.  Transport selection

   There may be use cases where the TCP transport should be explicitly
   selected from a URI.  This problem should be solved in a way that
   doesn't cause the available of different transports to generate
   aliases for the same resource, i.e. the same "coap://" URI should be
   used for the same resource.  Cf.
   [I-D.silverajan-core-coap-alternative-transports].

5.  References

5.1.  Normative References

   [I-D.ietf-core-observe]
              Hartke, K., "Observing Resources in CoAP", draft-ietf-
              core-observe-14 (work in progress), June 2014.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC7252]  Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
              Application Protocol (CoAP)", RFC 7252, June 2014.

5.2.  Informative References

   [COBS]     Cheshire, S. and M. Baker, "Consistent Overhead Byte
              Stuffing", ToN Vol.7, No. 2, April 1999.







Bormann                  Expires January 5, 2015                [Page 6]


Internet-Draft                  CoAP-TCP                       July 2014


   [I-D.savolainen-core-coap-websockets]
              Savolainen, T., Hartke, K., and B. Silverajan, "CoAP over
              WebSockets", draft-savolainen-core-coap-websockets-02
              (work in progress), April 2014.

   [I-D.silverajan-core-coap-alternative-transports]
              Silverajan, B. and T. Savolainen, "CoAP Communication with
              Alternative Transports", draft-silverajan-core-coap-
              alternative-transports-05 (work in progress), June 2014.

   [MINION]   Iyengar, J., Ford, B., Amin, S., Nowlan, M., and N.
              Tiwari, "Wire-Compatible Unordered Delivery in TCP and
              TLS", CoRR abs/1103.0463, February 2011,
              <http://arxiv.org/abs/1103.0463v2>.

   [RFC1006]  Rose, M. and D. Cass, "ISO transport services on top of
              the TCP: Version 3", STD 35, RFC 1006, May 1987.

   [RFC1662]  Simpson, W., "PPP in HDLC-like Framing", STD 51, RFC 1662,
              July 1994.

   [RFC2687]  Bormann, C., "PPP in a Real-time Oriented HDLC-like
              Framing", RFC 2687, September 1999.

   [RFC6256]  Eddy, W. and E. Davies, "Using Self-Delimiting Numeric
              Values in Protocols", RFC 6256, May 2011.

Author's Address

   Carsten Bormann
   Universitaet Bremen TZI
   Postfach 330440
   Bremen  D-28359
   Germany

   Phone: +49-421-218-63921
   Email: cabo@tzi.org














Bormann                  Expires January 5, 2015                [Page 7]