<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced. 
     An alternate method (rfc include) is described in the references. -->
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="no"?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-gomez-iotops-quic-iot-00"
     ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="QUIC in IoT">
     QUIC Usage Guidance in the Internet of Things (IoT)</title>
 
    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->
 
    <author fullname="Carles Gomez" initials="C." surname="Gomez">
      <organization>UPC</organization>

      <address>
        <postal>
          <street>C/Esteve Terradas, 7</street>

          <city>Castelldefels</city>

          <region/>

          <code>08860</code>

          <country>Spain</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>carles.gomez@upc.edu</email>

        <uri/>
      </address>
    </author>

    <author fullname="Nika Soltani-Tehrani" initials="N." surname="Soltani-Tehrani">
      <organization>UPC</organization>

      <address>
        <postal>
          <street>C/Esteve Terradas, 7</street>

          <city>Castelldefels</city>

          <region/>

          <code>08860</code>

          <country>Spain</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>nika.soltani.tehrani@estudiantat.upc.edu</email>

        <uri/>
      </address>
    </author>

    <author fullname="Jon Crowcroft" initials="J." surname="Crowcroft">
      <organization>University of Cambridge</organization>

      <address>
        <postal>
          <street>JJ Thomson Avenue</street>

          <city>Cambridge</city>

          <region/>

          <code>CB3 0FD</code>

          <country>United Kingdom</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>jon.crowcroft@cl.cam.ac.uk</email>

        <uri/>
      </address>
    </author>


    <!-- uri and facsimile elements may also be added -->

    <date month="August" year="2026"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>OPS</area>

    <workgroup>IOTOPS Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <!---->

    <abstract>
      <t>This document provides guidance on how to use QUIC in Constrained-Node Networks (CNNs), which are a characteristic of the Internet of Things (IoT).
      </t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction ">

      <t>QUIC is a modern transport-layer protocol intended to provide end-to- 
   end reliability and security <xref target="RFC9000"/><xref target="RFC9001"/><xref target="RFC9002"/>.  It was 
   designed to overcome several issues of prior protocol stacks, such as Transmission Control Protocol (TCP)/Transport Layer Security (TLS) 
   <xref target="RFC9293"/><xref target="RFC9846"/>.</t>

      <t>QUIC was not specifically designed for Constrained-Node Networks    
   (CNNs), which are typical in Internet of Things (IoT) environments 
   <xref target="I-D.ietf-iotops-7228bis"/>. However, its increasing adoption on the 
   Internet suggests that QUIC may become a protocol to consider also for 
   CNNs. Reasons include compatibility with existing QUIC-based 
   infrastructure, availability of a wide panoply of implementations and 
   tools, and a significant community, among others.
      </t>  

      <t>Leveraging optional and configurable functionality in QUIC, this 
   document aims to provide guidance on how QUIC can be tailored for 
   improved operation over CNNs.
      </t>
  

    </section>
 
      <section title="Terminology">
   
       <section title="Requirements language">
    
        <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
          BCP14 <xref target="RFC2119"/>, <xref target="RFC8174"/>, when, and only when,
          they appear in all capitals, as shown here.      
        </t>

        <t>The reader is assumed to be familiar with the terms and concepts    
   defined in <xref target="RFC9000"/><xref target="RFC9001"/><xref target="RFC9002"/><xref target="I-D.ietf-iotops-7228bis"/>.
        </t>

       </section>
      
      </section>


  <section title="Constrained-Node Network characteristics">
    
     <t>CNNs are defined in <xref target="I-D.ietf-iotops-7228bis"/> as networks "whose characteristics are influenced by being composed of a significant portion of constrained nodes". The latter exhibit significant limitations on processing, memory, and energy resources <xref target="I-D.ietf-iotops-7228bis"/>. The first two dimensions pose constraints on the complexity and memory footprint of the protocols that constrained nodes can support. Energy availability constraints requires using techniques to save energy, such as radio duty-cycling in wireless devices <xref target="RFC8352"/>, and the minimization of the number of messages transmitted/received, as well as their size.
     </t>

     <t> 
<xref target="I-D.ietf-iotops-7228bis"/> lists typical network constraints in CNNs, including low achievable bitrate/throughput, high packet loss and high variability of packet loss, highly asymmetric link characteristics, severe penalties for using larger packets, limits on reachability over time, high latency (e.g., due to sleep intervals intended to save energy), etc.  CNNs may use wireless or wired technologies (e.g., Power Line Communication), and the transmission rates are in many cases low (e.g., below 1 Mbit/s), even challenging responsiveness in scenarios where a human expects an action to occur after the transmission of a frame.  
     </t>    

     <t>
Many constrained nodes communicate end to end with capable nodes <xref target="I-D.ietf-iotops-7228bis"/> (e.g., located in the cloud or at the edge).  However, end-to-end communication between constrained nodes is also possible.
     </t>

  </section>

  <section title="QUIC guidance for CNNs">

      <t>This section provides guidance on how to use or configure QUIC for CNNs.  Advice is provided in the following areas: connections, initial and minimum congestion window, reliable versus unreliable datagrams, header overhead, ACK frequency, and initial RTT and related parameters.
      </t>

    <section title="Connections">
   
     <section title="Client and server role"> 

      <t>In QUIC, connection establishment is initiated by a client.  In order to better accommodate possible energy-saving techniques (e.g., radio duty-cycling) of a constrained device, the latter is recommended to act as client in a QUIC connection.  This approach makes it easier for the constrained device to initiate connection establishment when it is ready to do so.
      </t> 
     
     </section>

     <section title="Connection duration"> 

      <t>In order to minimize protocol overhead, a connection between a client and a server should last for as long as possible.  In fact, many CNN use cases involve sensors that periodically send measurement reports over years of battery lifetime.  It is possible to disable the idle timeout (max_idle_timeout) when both endpoints omit this parameter or indicate a value of 0.
      </t>

      <t>However, most practical environments involve middleboxes (e.g., firewalls) that may block a UDP flow after 30 seconds of inactivity <xref target="RFC9000"/>.  In such cases, two approaches can be followed at the QUIC level to avoid connectivity issues between the client and the server: i) sending a packet containing a PING frame from the client before 30 seconds have passed since the last transmitted or received QUIC packet, and ii) opening a new connection between the same client and server when the client has new data to send and more than 30 seconds have passed since the last transmitted or received QUIC packet.
      </t> 
     
      <t>Another approach is using application-layer heartbeat messages. 
Periodic application-layer heartbeats can prevent early record deletion in middleboxes.  If the UDP binding timeout for a middlebox to be traversed by a given connection is known, middlebox filter state deletion will be avoided if the heartbeat period is lower than the middlebox UDP binding timeout.  One specific advantage of heartbeat messages is that they also allow liveness checks at the application level.
      </t>

     </section>

    </section>     

    <section title="Initial and minimum congestion window">

      <t>In QUIC, the recommended value for the initial congestion window is "ten times the maximum datagram size (max_datagram_size), while limiting the window to the larger of 14,720 bytes or twice the maximum datagram size". On the other hand, the recommended value for the minimum congestion window is equal to 2 * max_datagram_size. Some constrained devices may only be able to support smaller window sizes.  For such devices, the initial and minimum congestion window need to be set accordingly, even if they result in smaller values than the default ones recommended.
      </t>
 
    </section> 
   
   <section title="Reliable versus unreliable datagrams">

      <t>In IoT scenarios, reliability requirements vary depending on the considered application.  Some data packets require reliable delivery, whereas others do not.  QUIC provides reliable data delivery by default, using Acknowledgments (ACKs) and retransmission of lost data. However, in order to reduce protocol overhead, it is possible to carry less critical data atop DATAGRAM frames <xref target="RFC9221"/>.  Such frames elicit ACKs, but are not retransmitted upon loss detection.
      </t>
 
    </section>

    <section title="Header overhead">

      <t>Some of the fields in QUIC packet and frame formats, such as Connection ID and packet number fields, are of variable size. In some circumstances,     
         it is possible to exploit this feature to reduce packet header overhead, considering the associated trade-offs.
      </t>

      <t>Connection ID fields have a size between 0 and 20 bytes. Reducing the size of a Connection ID degrades communication privacy and may decrease the efficiency of load balancing operations.  If these concerns do not apply or can be tolerated to some extent for a particular IoT scenario, the latter may benefit from using shorter-sized Connection ID fields.  As described in RFC 9000, "a zero-length connection ID can be used when a connection ID is not needed to route to the correct endpoint". However, a zero-sized Connection ID may only be safely used in very controlled environments.
      </t> 

      <t>
Packet numbers have a size between 1 and 4 bytes.  Reducing the packet number size increases the probability of ambiguity in identifying packets.  However, if the rate of packets to be sent over a connection is expected to be low (e.g., a sensor that transmits a reading every minute) or ACKs are received at a sufficient rate, a shorter packet number size can be safely used.
      </t>
      <t>
Many IoT use cases (e.g., a device periodically sending sensor readings) do not require more than a single stream per connection. This provides an intrinsic limitation to packet header overhead.  
      </t>
      <t>
Another approach to reduce packet overhead in QUIC is using header compression.  For example, Static Context Header Compression (SCHC) [RFC8724] has been proposed for QUIC <xref target="I-D.sirohi-schc-quic-compression"/>.
      </t>

    </section>

    <section title="ACK frequency">
      
      <t>
A typical IoT use case is a sensor that periodically transmits a single data packet containing a sensor reading.  Even if the minimum recommended congestion window is 2 packets, the sender in such use case will typically only keep one packet in flight at most.  In such case, if an application-layer response is not elicited, the receiver will delay sending the corresponding ACK by max_ack_delay, which has the default value of 25 ms.  This mechanism is an attempt to reduce the number of ACKs or packets transmitted by the receiver, but in this specific case, the ACK will just be unnecessarily delayed, potentially consuming more energy on the sensor, without decreasing the actual number of ACKs sent. 
      </t>
 
      <t> 
One way to request an ACK to be sent immediately is by including an IMMEDIATE_ACK frame in the packet carrying the STREAM frame with the user data, which increases the packet size by one byte.  In this case, immediate ACK transmission applies only to the next ACK to be sent.  It is also possible to request ACKs to be sent immediately by sending a packet containing an ACK_FREQUENCY frame with the Requested Max Ack Delay field set to zero microseconds.  This is a request that should produce a steady-state ACK transmission behavior (of ACKs being sent immediately).  Note that, in this case, the minimum value for min_ack_delay supported by the receiver needs to be zero.
      </t>

      <t>                                                      
For less constrained IoT devices, in scenarios allowing a large congestion window size, it may be useful to request a lower ACK rate than default in order to reduce the number of ACKs transmitted by the receiver. This can be done by sending an ACK_FREQUENCY frame with an appropriate value for Ack-Eliciting Threshold.
      </t> 

    </section>

    <section title="Initial RTT and related parameters">

      <t>  
QUIC defines an initial value for the RTT estimate. According to RFC 9002, "when no previous RTT is available, the initial RTT should be set to 333 milliseconds". This value, denoted as kInitialRtt, serves as the starting point for the RTT estimator. One consequence is that the initial value of the Probe TimeOut (PTO) is 1 second. In turn, this value affects other parameters, as max_idle_timeout needs to be at least 3 times the PTO, and the persistent congestion duration is recommended to be 3 times the PTO. 
      </t>

      <t>
However, in many IoT scenarios, the RTT is much greater than 1 second. This may be due to various reasons, which could be combined in some cases: i) bit rates may be low, sometimes below 1 kbit/s; ii) links may be duty-cycled, leading to long intervals (from seconds to days) where a constrained device may be in sleep state (i.e., radio off); iii) some constrained devices use connectivity provided by sparse satellite constellations supporting store and forward operation, introducing delays up to the order of hours; iv) some technologies (e.g., some Low Power Wide Area Network (LPWAN) technologies) require uplink transmission from a constrained device to enable downlink transmission.   
      </t> 

      <t>
RFC 9002 allows a kInitialRtt setting different from 333 ms. Therefore, in IoT scenarios, such parameter needs to be configured based on the expected RTT of the intended scenario, often requiring a greater value than the default one.
      </t> 

    </section>

  </section>

    <section title="Security Considerations">

      <t>TO-DO
      </t>

  </section>

  <section title="IANA Considerations">  
      <t>This document has no IANA considerations.
      </t>
   </section>


    <!-- This PI places the pagebreak correctly (before the section title) in the text output. -->

    <!-- Possibly a 'Contributors' section ... -->
 

   </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">

      <?rfc include='reference.RFC.2119.xml'?>

      <?rfc include='reference.RFC.8174.xml'?>

      <?rfc include='reference.RFC.9000.xml'?>

      <?rfc include='reference.RFC.9001.xml'?>

      <?rfc include='reference.RFC.9002.xml'?>

      <?rfc include='reference.RFC.9221.xml'?>

      <?rfc include='reference.I-D.ietf-iotops-7228bis'?>

    </references>

    <references title="Informative References">
      <!-- Here we use entities that we defined at the beginning. -->

      <?rfc include='reference.I-D.sirohi-schc-quic-compression'?>

      <?rfc include='reference.RFC.8352.xml'?>

      <?rfc include='reference.RFC.8724.xml'?> 

      <?rfc include='reference.RFC.9293.xml'?>

      <?rfc include='reference.RFC.9846.xml'?>

    </references>  

    <section numbered="false" anchor="ACKs" title="Acknowledgments">

      <t>Carles Gomez has been supported in part by the Spanish Goverment's Ministerio de Ciencia, Innovacion y Universidades MCIU/AEI/10.13039/501100011033/FEDER/UE through project PID2023-146378NB-I00, and through the Estancias de Movilidad en Centros Extranjeros de Ensenanza Superior e Investigacion PRX24/00397 grant.
      </t>

      <t>The authors would like to thank (in alphabetical order) TO-DO for useful considerations, reviews and comments.
      </t>     

    </section>

    <!-- -->
  </back>
</rfc>