TCP Usage Guidance in the Internet of Things (IoT)
RFC 9006

Document Type RFC - Informational (March 2021; No errata)
Authors Carles Gomez  , Jon Crowcroft  , Michael Scharf 
Last updated 2021-03-27
Replaces draft-gomez-lwig-tcp-constrained-node-networks
Stream Internet Engineering Task Force (IETF)
Formats plain text html xml pdf htmlized (tools) htmlized bibtex
Stream WG state Submitted to IESG for Publication
Document shepherd Zhen Cao
Shepherd write-up Show (last changed 2020-10-08)
IESG IESG state RFC 9006 (Informational)
Action Holders
Consensus Boilerplate Yes
Telechat date
Responsible AD Erik Kline
Send notices to Zhen Cao <>
IANA IANA review state Version Changed - Review Needed
IANA action state No IANA Actions

Internet Engineering Task Force (IETF)                          C. Gomez
Request for Comments: 9006                                           UPC
Category: Informational                                     J. Crowcroft
ISSN: 2070-1721                                  University of Cambridge
                                                               M. Scharf
                                                    Hochschule Esslingen
                                                              March 2021

           TCP Usage Guidance in the Internet of Things (IoT)


   This document provides guidance on how to implement and use the
   Transmission Control Protocol (TCP) in Constrained-Node Networks
   (CNNs), which are a characteristic of the Internet of Things (IoT).
   Such environments require a lightweight TCP implementation and may
   not make use of optional functionality.  This document explains a
   number of known and deployed techniques to simplify a TCP stack as
   well as corresponding trade-offs.  The objective is to help embedded
   developers with decisions on which TCP features to use.

Status of This Memo

   This document is not an Internet Standards Track specification; it is
   published for informational purposes.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Not all documents
   approved by the IESG are candidates for any level of Internet
   Standard; see Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at

Copyright Notice

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

Table of Contents

   1.  Introduction
   2.  Characteristics of CNNs Relevant for TCP
     2.1.  Network and Link Properties
     2.2.  Usage Scenarios
     2.3.  Communication and Traffic Patterns
   3.  TCP Implementation and Configuration in CNNs
     3.1.  Addressing Path Properties
       3.1.1.  Maximum Segment Size (MSS)
       3.1.2.  Explicit Congestion Notification (ECN)
       3.1.3.  Explicit Loss Notifications
     3.2.  TCP Guidance for Single-MSS Stacks
       3.2.1.  Single-MSS Stacks -- Benefits and Issues
       3.2.2.  TCP Options for Single-MSS Stacks
       3.2.3.  Delayed Acknowledgments for Single-MSS Stacks
       3.2.4.  RTO Calculation for Single-MSS Stacks
     3.3.  General Recommendations for TCP in CNNs
       3.3.1.  Loss Recovery and Congestion/Flow Control  Selective Acknowledgments (SACKs)
       3.3.2.  Delayed Acknowledgments
       3.3.3.  Initial Window
   4.  TCP Usage Recommendations in CNNs
     4.1.  TCP Connection Initiation
     4.2.  Number of Concurrent Connections
     4.3.  TCP Connection Lifetime
   5.  Security Considerations
   6.  IANA Considerations
   7.  References
     7.1.  Normative References
     7.2.  Informative References
   Appendix A.  TCP Implementations for Constrained Devices
     A.1.  uIP
     A.2.  lwIP
     A.3.  RIOT
     A.4.  TinyOS
     A.5.  FreeRTOS
     A.6.  uC/OS
     A.7.  Summary
   Authors' Addresses

1.  Introduction

   The Internet Protocol suite is being used for connecting Constrained-
   Node Networks (CNNs) to the Internet, enabling the so-called Internet
   of Things (IoT) [RFC7228].  In order to meet the requirements that
   stem from CNNs, the IETF has produced a suite of new protocols
   specifically designed for such environments (see, e.g., [RFC8352]).
   New IETF protocol stack components include the IPv6 over Low-Power
   Wireless Personal Area Networks (6LoWPANs) adaptation layer
   [RFC4944][RFC6282][RFC6775], the IPv6 Routing Protocol for Low-Power
   and Lossy Networks (RPL) [RFC6550], and the Constrained Application
   Protocol (CoAP) [RFC7252].

   As of this writing, the main transport-layer protocols in IP-based
   IoT scenarios are UDP and TCP.  TCP has been criticized, often
   unfairly, as a protocol that is unsuitable for the IoT.  It is true
   that some TCP features, such as relatively long header size,
   unsuitability for multicast, and always-confirmed data delivery, are
   not optimal for IoT scenarios.  However, many typical claims on TCP
Show full document text