<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.0.23 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc strict="yes"?>
<?rfc toc="yes"?>
<?rfc tocdepth="2"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="no"?>
<?rfc subcompact="no"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-tschofenig-core-coap-tcp-tls-03.txt" category="std">

  <front>
    <title abbrev="TCP/TLS Transport for CoAP">A TCP and TLS Transport for the Constrained Application Protocol (CoAP)</title>
    <author role="editor" initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universitaet Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>

    <author initials="S." surname="Lemay" fullname="Simon Lemay">
      <organization>Zebra Technologies</organization>
      <address>
        <postal>
          <street>820 W. Jackson Blvd.suite 700</street>
          <city>Chicago</city>
          <code>60607</code>
          <country>United States of America</country>
        </postal>
        <phone>+1-847-634-6700</phone>
        <email>slemay@zebra.com</email>
      </address>
    </author>
    <author initials="V." surname="Solorzano Barboza" fullname="Valik Solorzano Barboza">
      <organization>Zebra Technologies</organization>
      <address>
        <postal>
          <street>820 W. Jackson Blvd. suite 700</street>
          <city>Chicago</city>
          <code>60607</code>
          <country>United States of America</country>
        </postal>
        <phone>+1-847-634-6700</phone>
        <email>vsolorzanobarboza@zebra.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>ARM Ltd.</organization>
      <address>
        <postal>
          <street>110 Fulbourn Rd</street>
          <city>Cambridge</city>
          <code>CB1 9NJ</code>
          <country>Great Britain</country>
        </postal>
        <email>Hannes.tschofenig@gmx.net</email>
        <uri>http://www.tschofenig.priv.at</uri>
      </address>
    </author>

    <date year="2015"/>

    <area>Applications Area (app)</area>
    <workgroup>CORE</workgroup>
    

    <abstract>


<t>The Hypertext Transfer Protocol (HTTP) has been designed with TCP as an underlying
transport protocol. The Constrained Application Protocol (CoAP), which has
been inspired by HTTP, has on the other hand been defined to make use of
UDP. Therefore, reliable delivery and a simple congestion control and flow control mechanism
are provided by the message layer of the CoAP protocol.</t>

<t>A number of environments benefit from the use of CoAP directly over a
reliable byte stream that already provides these services.
This document defines the use of CoAP over TCP as well as CoAP over TLS.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<!-- 
<t>The Internet protocol stack is organized in layers, namely link layer,
internet layer, transport layer, and the application layer
(<xref target="RFC1122"/>).</t>

<t>IP emerged as the waist of the hour glass and supports a variety of
link layers and new link layer technologies can be added in the
future, without affecting IP.</t>

<t>Combined with the end-to-end principle, the hour glass indicates the
level of protocol understanding that intermediaries need to have in order
to forward IP packets between a sender and a receiver (absent
any specific application layer entities, such as proxies or caches).
Having IP as the waist means that anyone can extend the layers above
the network layer in the way they want to communicate end-to-end,
including defining new transport layer protocols.</t>


<t>Unfortunately, some network deployments depart from this architecture. --> 
<t>The <xref target="RFC7252">Constrained Application Protocol (CoAP)</xref> was designed
for Internet of Things (IoT) deployments, assuming that UDP can be
used freely – UDP <xref target="RFC0768"/>, or DTLS <xref target="RFC6347"/> over UDP, is a good choice for
transferring small amounts of data in networks that follow the IP
architecture.
Some CoAP deployments, however, may have to integrate well with
existing enterprise infrastructure, where the use of UDP-based
protocols may not be well-received or even blocked by firewalls.
Middleboxes that are unaware of CoAP usage for IoT can make the use of UDP
brittle.</t>

<t>CoAP over TCP can also help with NAT traversal too. NATs often calculate expiration timers 
based on the transport layer protocol being used by application protocols. A transport layer protocol like 
TCP gives NAT implementations additional information about the session semantic and this allows 
NATs to keep NAT bindings around for a longer period. UDP on the other hand does not provide such 
session semantics to a NAT and timeouts tend to be much shorter, as research confirms <xref target="HomeGateway"/>.</t>

<t>As an additional usage scenario, some environments benefit from the more advanced congestion
control and flow control capabilities provided by TCP. While there is ongoing work to 
add more sophisticated congestion control to CoAP, see <xref target="I-D.bormann-core-cocoa"/>, 
it is still far less efficient than functionality provided by TCP.</t>

<t>Finally, CoAP may be integrated into a Web environment where the front-end uses CoAP from IoT devices to a cloud infrastructure but the CoAP messages are then piggybacked on top of TCP in the back-end to other Web services. A TCP-to-UDP gateway can be
used at the cloud boundary to talk to the UDP-based IoT.</t>

<t>To make both IoT devices work smoothly in these demanding environments, CoAP needs
to make use of a different transport protocol, namely TCP
<xref target="RFC0793"/> and in some situations even TLS <xref target="RFC5246"/>.</t>

<t>The present document
document describes a shim header that conveys length information about
each CoAP message included.  Modifications to CoAP beyond the replacement of
the message layer
(e.g., to introduce further optimizations) are intentionally avoided.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>

</section>
<section anchor="constrained-application-protocol" title="Constrained Application Protocol">

<t>The interaction model of CoAP over TCP is very similar to the one for
CoAP over UDP with the key difference that TCP voids the need to
provide certain transport layer protocol features, such as reliable
delivery, fragmentation and reassembly, as well as congestion control,
at the CoAP level. The protocol stack is illustrated in <xref target="stack"/> (derived
from <xref target="RFC7252"/>, Figure 1).</t>

<figure title="The CoAP over TLS/TCP Protocol Stack" anchor="stack"><artwork><![CDATA[
        +----------------------+
        |      Application     |
        +----------------------+
        +----------------------+
        |  Requests/Responses  |  CoAP (RFC7252)
        |----------------------|
        |    Message adapter   |  this document
        +----------------------+
        +-----------+    ^
        |    TLS    |    |
        +-----------+    v
        +----------------------+
        |          TCP         |
        +----------------------+
]]></artwork></figure>

<t>TCP offers features that are not available in UDP and consequently
have been provided in the message layer of CoAP. Since TCP offers
reliable delivery, there is no need to offer a redundant
acknowledgement at the CoAP messaging layer. </t>

<t>Hence, the only message type supported when using CoAP over TCP is
the Non-confirmable message (NON).  By nature of TCP, a NON over TCP is still transmitted
reliably. <xref target="NON"/> (derived from <xref target="RFC7252"/>, Figure 3) shows this
message exchange graphically.  A UDP-to-TCP gateway will therefore discard all
empty messages, such as empty ACKs (after operating on them at the
message layer), and re-pack the contents of all non-empty CON, NON, or
ACK messages (i.e., those ACK messages that have a piggy-backed
response) into NON messages.</t>

<t>Similarly, there is no need to detect duplicate delivery of a message.
In UDP CoAP, the Message ID is used for relating acknowledgements to
Confirmable messages as well as for duplicate detection.
Since the Message ID thus is not meaningful over TCP, it is elided (as indicated by the
dashes in <xref target="NON"/>).</t>

<figure title="NON Message Transmission over TCP." anchor="NON"><artwork><![CDATA[
        Client              Server
           |                  |
           |   NON [------]   |
           +----------------->|
           |                  |
]]></artwork></figure>

<t>As a result of removing the message layer in CoAP over TCP, the only supported message type
from the ones CoAP over UDP provides is the NON type. A response is sent back as defined
in <xref target="RFC7252"/>, as
illustrated in <xref target="NON2"/> (derived from <xref target="RFC7252"/>, Figure 6).</t>

<figure title="NON Request/Response." anchor="NON2"><artwork><![CDATA[
        Client              Server
           |                  |
           |   NON [------]   |
           | GET /temperature |
           |   (Token 0x74)   |
           +----------------->|
           |                  |
           |   NON [------]   |
           |   2.05 Content   |
           |   (Token 0x74)   |
           |     "22.5 C"     |
           |<-----------------+
           |                  |
]]></artwork></figure>

</section>
<section anchor="message-format" title="Message Format">

<t>The CoAP message format defined in <xref target="RFC7252"/>, as shown in
<xref target="CoAP-Header"/>, relies on the datagram transport (UDP, or DTLS over
UDP) for keeping the individual messages separate.</t>

<figure title="RFC 7252 defined CoAP Message Format." anchor="CoAP-Header"><artwork><![CDATA[
    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) ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>In a stream oriented transport protocol such as TCP, some other form
of delimiting messages is needed.  For this purpose, CoAP over TCP
introduces a length field.  <xref target="Shim"/> shows the 2-byte shim header
carrying length information prepending the CoAP message header.</t>

<figure title="CoAP Header with prepended Shim Header." anchor="Shim"><artwork><![CDATA[
     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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Message Length         |Ver| T |  TKL  |      Code     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Token (if any, TKL bytes) ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   Options (if any) ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |1 1 1 1 1 1 1 1|    Payload (if any) ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The ‘Message Length' field is a 16-bit unsigned integer in network
byte order. It provides the length of the subsequent CoAP message
(including the CoAP header but excluding this message length field) in
bytes.  T is always the code for NON (1).  The Message ID is
meaningless and thus elided.  The semantics of the other CoAP header
fields is left unchanged.</t>

<section anchor="discussion" title="Discussion">

<t>One might wish that,
when CoAP is used over TLS, then the TLS record layer length field
could be used in place of the shim header length.  Each CoAP message would be transported in a
separate TLS record layer message, making the shim header that includes the
length information redundant.</t>

<t>However,
    RFC 5246 says that "Client
   message boundaries are not preserved in the record layer (i.e.,
   multiple client messages of the same ContentType MAY be coalesced
   into a single TLSPlaintext record, or a single message MAY be
   fragmented across several records)." While the Record Layer provides 
length information about of subsequent application data and handshaking payloads 
TLS implementations typically do not support an API interface that would provide access to
   the record layer delimiting information.
An additional problem with this approach is that this approach would remove the
potential optimization of packing several CoAP messages into one
record layer message, which is normally a way to amortize the record layer and MAC overhead
over all these messages.</t>

<t>In summary, we are not pursuing this idea for an optimization.</t>

<t>One other observation is that the message size limitations defined in
Section 4.6 of <xref target="RFC7252"/> are no longer strictly necessary.
Consenting [how?] implementations may want to interchange messages
with payload sizes than 1024 bytes, potentially also obviating the
need for the Block protocol <xref target="I-D.ietf-core-block"/>.  It must be noted that
entirely getting rid of the block protocol is
not a generally applicable solution, as:</t>

<t><list style="symbols">
  <t>a UDP-to-TCP gateway may simply not have the context to convert a
message with a Block option into the equivalent exchange without any
use of a Block option.</t>
  <t>large messages might also cause undesired head-of-line blocking.</t>
</list></t>

<t>The general assumption is therefore that the block protocol will
continue to be used over TCP, even if applications occasionally do
exchange messages with payload sizes larger than desirable in UDP.</t>

</section>
</section>
<section anchor="URI" title="CoAP URI">

<t>CoAP <xref target="RFC7252"/> defines the "coap" and "coaps" URI schemes for
identifying CoAP resources and providing a means of locating the
resource. RFC 7252 defines these resources for use with CoAP over UDP.</t>

<t>The present specification introduces two new URI schemes, namely "coap+tcp"
and "coaps+tcp".  The rules from Section 6 of <xref target="RFC7252"/> apply to
these two new URI schemes.</t>

<t><xref target="RFC7252"/>, Section 8 (Multicast CoAP), does not apply to the URI
schemes defined in the present specification.</t>

<t>Resources made available via one of the "coap+tcp" or "coaps+tcp" schemes
   have no shared identity with the other scheme or with the "coap" or
   "coaps" scheme, even if their resource identifiers indicate the
   same authority (the same host listening to the same port).
   The schemes constitute distinct namespaces and, in combination with
   the authority, are considered to be distinct
   origin servers.</t>

<section anchor="coaptcp-uri-scheme" title="coap+tcp URI scheme">

<figure><artwork><![CDATA[
coap-tcp-URI = "coap+tcp:" "//" host [ ":" port ] path-abempty 
               [ "?" query ]
]]></artwork></figure>

<t>The semantics defined in <xref target="RFC7252"/>, Section 6.1, applies to this
URI scheme, with the following changes:</t>

<t><list style="symbols">
  <t>The port subcomponent indicates the TCP port
 at which the CoAP server is located.  (If it is empty or not given,
 then the default port 5683 is assumed, as with UDP.)</t>
</list></t>

</section>
<section anchor="coapstcp-uri-scheme" title="coaps+tcp URI scheme">

<figure><artwork><![CDATA[
coaps-tcp-URI = "coaps+tcp:" "//" host [ ":" port ] path-abempty 
                [ "?" query ]
]]></artwork></figure>

<t>The semantics defined in <xref target="RFC7252"/>, Section 6.2, applies to this
URI scheme, with the following changes:</t>

<t><list style="symbols">
  <t>The port subcomponent indicates the TCP port
 at which the TLS server for the CoAP server is located.  If it is empty or not given,
 then the default port 443 is assumed (this is different from the
 default port for "coaps", i.e., CoAP over DTLS over UDP).</t>
  <t>When CoAP is exchanged over TLS port 443 then the "TLS Application
Layer Protocol Negotiation Extension"
<xref target="RFC7301"/> MUST be used to allow demultiplexing
at the server-side unless out-of-band information ensures that the
client only interacts with a server that is able to demultiplex CoAP
messages over port 443. This would, for example, be true for many
Internet of Things deployments where clients are pre-configured to
only ever talk with specific servers.
      <cref anchor="_1" source="cabo">Shouldn't we simply always require ALPN?</cref></t>
</list></t>

</section>
</section>
<section anchor="security" title="Security Considerations">

<t>This document defines how to convey CoAP over TCP and TLS. It does not
introduce new vulnerabilities beyond those described already in the
CoAP specification. CoAP <xref target="RFC7252"/> makes use of DTLS 1.2 and this
specification consequently uses TLS 1.2 <xref target="RFC5246"/>. CoAP MUST NOT be
used with older versions of TLS. Guidelines for use of cipher suites
and TLS extensions can be found in <xref target="I-D.ietf-dice-profile"/>.</t>

</section>
<section anchor="iana" title="IANA Considerations">

<section anchor="service-name-and-port-number-registration" title="Service Name and Port Number Registration">

<t>IANA is requested to assign the port number 5683 and the service name "coap+tcp",
in accordance with <xref target="RFC6335"/>.</t>

<t><list style="hanging">
  <t hangText='Service Name.'><vspace blankLines='0'/>
  coap+tcp</t>
  <t hangText='Transport Protocol.'><vspace blankLines='0'/>
  tcp</t>
  <t hangText='Assignee.'><vspace blankLines='0'/>
  IESG &lt;iesg@ietf.org&gt;</t>
  <t hangText='Contact.'><vspace blankLines='0'/>
  IETF Chair &lt;chair@ietf.org&gt;</t>
  <t hangText='Description.'><vspace blankLines='0'/>
  Constrained Application Protocol (CoAP)</t>
  <t hangText='Reference.'><vspace blankLines='0'/>
  [RFCthis]</t>
  <t hangText='Port Number.'><vspace blankLines='0'/>
  5683</t>
</list></t>

<t>Similarly, IANA is requested to assign the
service name "coaps+tcp", in accordance with <xref target="RFC6335"/>.
However, no separate port number is used for coaps over TCP; instead,
the ALPN protocol ID defined in <xref target="alpnpid"/> is used over port 443.</t>

<t><list style="hanging">
  <t hangText='Service Name.'><vspace blankLines='0'/>
  coaps+tcp</t>
  <t hangText='Transport Protocol.'><vspace blankLines='0'/>
  tcp</t>
  <t hangText='Assignee.'><vspace blankLines='0'/>
  IESG &lt;iesg@ietf.org&gt;</t>
  <t hangText='Contact.'><vspace blankLines='0'/>
  IETF Chair &lt;chair@ietf.org&gt;</t>
  <t hangText='Description.'><vspace blankLines='0'/>
  Constrained Application Protocol (CoAP)</t>
  <t hangText='Reference.'><vspace blankLines='0'/>
  <xref target="RFC7301"/>, [RFCthis]</t>
  <t hangText='Port Number.'><vspace blankLines='0'/>
  443  (see also <xref target="alpnpid"/> of [RFCthis]})</t>
</list></t>

</section>
<section anchor="uri-schemes" title="URI Schemes">

<t>This document registers two new URI schemes, namely "coap+tcp" and
"coaps+tcp", for the use of CoAP over TCP and for CoAP over TLS over
TCP, respectively. The "coap+tcp" and "coaps+tcp" URI schemes can thus
be compared to the "http" and "https" URI schemes.</t>

<t>The syntax of the "coap" and "coaps" URI schemes is specified in
Section 6 of <xref target="RFC7252"/> and the present document re-uses their
semantics for "coap+tcp" and "coaps+tcp", respectively, with the
exception that TCP, or TLS over TCP is used as a transport protocol.</t>

<t>IANA is requested to add these new URI schemes to the registry
established with <xref target="RFC4395"/>.</t>

</section>
<section anchor="alpnpid" title="ALPN Protocol ID">

<t>This document requests a value from the "Application Layer Protocol
Negotiation (ALPN) Protocol IDs" created by <xref target="RFC7301"/>:</t>

<t><list style="hanging">
  <t hangText='Protocol:'><vspace blankLines='0'/>
  CoAP</t>
  <t hangText='Identification Sequence:'><vspace blankLines='0'/>
  0x63 0x6f 0x61 0x70 ("coap")</t>
  <t hangText='Reference:'><vspace blankLines='0'/>
  [RFCthis]</t>
</list></t>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>We would like to thank Stephen Berard, Geoffrey Cristallo, Olivier Delaby, Michael Koster, Matthias Kovatsch, Szymon Sasin, and Zach Shelby for their feedback.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference anchor='RFC5246'>

<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'>
<organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<date year='2008' month='August' />
<abstract>
<t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='5246' />
<format type='TXT' octets='222395' target='http://www.rfc-editor.org/rfc/rfc5246.txt' />
</reference>



<reference anchor='RFC7252'>

<front>
<title>The Constrained Application Protocol (CoAP)</title>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'>
<organization /></author>
<author initials='K.' surname='Hartke' fullname='K. Hartke'>
<organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'>
<organization /></author>
<date year='2014' month='June' />
<abstract>
<t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.&lt;/t>&lt;t> CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t></abstract></front>

<seriesInfo name='RFC' value='7252' />
<format type='TXT' octets='258789' target='http://www.rfc-editor.org/rfc/rfc7252.txt' />
</reference>



<reference anchor='RFC2119'>

<front>
<title abbrev='RFC Key Words'>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='Scott Bradner'>
<organization>Harvard University</organization>
<address>
<postal>
<street>1350 Mass. Ave.</street>
<street>Cambridge</street>
<street>MA 02138</street></postal>
<phone>- +1 617 495 3864</phone>
<email>sob@harvard.edu</email></address></author>
<date year='1997' month='March' />
<area>General</area>
<keyword>keyword</keyword>
<abstract>
<t>
   In many standards track documents several words are used to signify
   the requirements in the specification.  These words are often
   capitalized.  This document defines these words as they should be
   interpreted in IETF documents.  Authors who follow these guidelines
   should incorporate this phrase near the beginning of their document:

<list>
<t>
      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
      RFC 2119.
</t></list></t>
<t>
   Note that the force of these words is modified by the requirement
   level of the document in which they are used.
</t></abstract></front>

<seriesInfo name='BCP' value='14' />
<seriesInfo name='RFC' value='2119' />
<format type='TXT' octets='4723' target='http://www.rfc-editor.org/rfc/rfc2119.txt' />
<format type='HTML' octets='17970' target='http://xml.resource.org/public/rfc/html/rfc2119.html' />
<format type='XML' octets='5777' target='http://xml.resource.org/public/rfc/xml/rfc2119.xml' />
</reference>



<reference anchor='RFC4395'>

<front>
<title>Guidelines and Registration Procedures for New URI Schemes</title>
<author initials='T.' surname='Hansen' fullname='T. Hansen'>
<organization /></author>
<author initials='T.' surname='Hardie' fullname='T. Hardie'>
<organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'>
<organization /></author>
<date year='2006' month='February' />
<abstract>
<t>This document provides guidelines and recommendations for the definition of Uniform Resource Identifier (URI) schemes.  It also updates the process and IANA registry for URI schemes.  It obsoletes both RFC 2717 and RFC 2718.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract></front>

<seriesInfo name='BCP' value='35' />
<seriesInfo name='RFC' value='4395' />
<format type='TXT' octets='31933' target='http://www.rfc-editor.org/rfc/rfc4395.txt' />
</reference>



<reference anchor='RFC0793'>

<front>
<title abbrev='Transmission Control Protocol'>Transmission Control Protocol</title>
<author initials='J.' surname='Postel' fullname='Jon Postel'>
<organization>University of Southern California (USC)/Information Sciences Institute</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal></address></author>
<date year='1981' day='1' month='September' /></front>

<seriesInfo name='STD' value='7' />
<seriesInfo name='RFC' value='793' />
<format type='TXT' octets='172710' target='http://www.rfc-editor.org/rfc/rfc793.txt' />
</reference>



<reference anchor='RFC7301'>

<front>
<title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
<author initials='S.' surname='Friedl' fullname='S. Friedl'>
<organization /></author>
<author initials='A.' surname='Popov' fullname='A. Popov'>
<organization /></author>
<author initials='A.' surname='Langley' fullname='A. Langley'>
<organization /></author>
<author initials='E.' surname='Stephan' fullname='E. Stephan'>
<organization /></author>
<date year='2014' month='July' />
<abstract>
<t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake.  For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t></abstract></front>

<seriesInfo name='RFC' value='7301' />
<format type='TXT' octets='17439' target='http://www.rfc-editor.org/rfc/rfc7301.txt' />
</reference>


       <?rfc include="reference.I-D.ietf-dice-profile"?>  





    </references>

    <references title='Informative References'>


       <?rfc include="reference.I-D.bormann-core-cocoa"?>  

<reference anchor='RFC0768'>

<front>
<title>User Datagram Protocol</title>
<author initials='J.' surname='Postel' fullname='J. Postel'>
<organization>University of Southern California (USC)/Information Sciences Institute</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90291</code>
<country>US</country></postal>
<phone>+1 213 822 1511</phone></address></author>
<date year='1980' day='28' month='August' /></front>

<seriesInfo name='STD' value='6' />
<seriesInfo name='RFC' value='768' />
<format type='TXT' octets='5896' target='http://www.rfc-editor.org/rfc/rfc768.txt' />
</reference>


<!-- 
<reference anchor='RFC1122'>

<front>
<title>Requirements for Internet Hosts - Communication Layers</title>
<author initials='R.' surname='Braden' fullname='Robert Braden'>
<organization>University of Southern California (USC)/ Information Sciences Institute (ISI)</organization>
<address>
<postal>
<street>4676 Admiralty Way</street>
<city>Marina del Rey</city>
<region>CA</region>
<code>90292-6695</code>
<country>US</country></postal>
<phone>+1 213 822 1511</phone>
<email>Braden@ISI.EDU</email></address></author>
<date year='1989' month='October' /></front>

<seriesInfo name='STD' value='3' />
<seriesInfo name='RFC' value='1122' />
<format type='TXT' octets='295992' target='http://www.rfc-editor.org/rfc/rfc1122.txt' />
</reference>

--> 

<reference anchor='RFC6347'>

<front>
<title>Datagram Transport Layer Security Version 1.2</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'>
<organization /></author>
<author initials='N.' surname='Modadugu' fullname='N. Modadugu'>
<organization /></author>
<date year='2012' month='January' />
<abstract>
<t>This document specifies version 1.2 of the Datagram Transport Layer Security (DTLS) protocol.  The DTLS protocol provides communications privacy for datagram protocols.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  The DTLS protocol is based on the Transport Layer Security (TLS) protocol and provides equivalent security guarantees.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.  This document updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t></abstract></front>

<seriesInfo name='RFC' value='6347' />
<format type='TXT' octets='73546' target='http://www.rfc-editor.org/rfc/rfc6347.txt' />
</reference>



<reference anchor='RFC6335'>

<front>
<title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
<author initials='M.' surname='Cotton' fullname='M. Cotton'>
<organization /></author>
<author initials='L.' surname='Eggert' fullname='L. Eggert'>
<organization /></author>
<author initials='J.' surname='Touch' fullname='J. Touch'>
<organization /></author>
<author initials='M.' surname='Westerlund' fullname='M. Westerlund'>
<organization /></author>
<author initials='S.' surname='Cheshire' fullname='S. Cheshire'>
<organization /></author>
<date year='2011' month='August' />
<abstract>
<t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry. It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.&lt;/t>&lt;t> This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP). It also updates the DNS SRV specification to clarify what a service name is and how it is registered. This memo documents an Internet Best Current Practice.</t></abstract></front>

<seriesInfo name='BCP' value='165' />
<seriesInfo name='RFC' value='6335' />
<format type='TXT' octets='79088' target='http://www.rfc-editor.org/rfc/rfc6335.txt' />
</reference>



       <?rfc include="reference.I-D.ietf-core-block"?>  



	<reference anchor="HomeGateway">
        <front>
          <title>An experimental study of home gateway characteristics, In Proceedings of the '10th annual conference on Internet measurement'</title>
            <author initials="L." surname="Eggert" fullname="Lars Eggert">
              <organization/>
            </author>
          <date year="2010"/>
        </front>
        <format type='PDF'
        target='http://eggert.org/papers/2010-imc-hgw-study.pdf' />
      </reference>





    </references>


<!--  LocalWords:  TCP CoAP UDP firewalling firewalled TLS IP SCTP
 -->
<!--  LocalWords:  DCCP IoT optimizations ACKs acknowledgement TKL
 -->
<!--  LocalWords:  prepending URI DTLS demultiplexing demultiplex pre
 -->
<!--  LocalWords:  IANA ALPN
 -->



  </back>
</rfc>

