summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9006.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9006.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9006.txt')
-rw-r--r--doc/rfc/rfc9006.txt1343
1 files changed, 1343 insertions, 0 deletions
diff --git a/doc/rfc/rfc9006.txt b/doc/rfc/rfc9006.txt
new file mode 100644
index 0000000..d4e7435
--- /dev/null
+++ b/doc/rfc/rfc9006.txt
@@ -0,0 +1,1343 @@
+
+
+
+
+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)
+
+Abstract
+
+ 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
+ https://www.rfc-editor.org/info/rfc9006.
+
+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
+ (https://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.
+
+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
+ 3.3.1.1. 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
+ Acknowledgments
+ 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
+ unsuitability for IoT (e.g., a high complexity, connection-oriented
+ approach incompatibility with radio duty-cycling and spurious
+ congestion control activation in wireless links) are not valid, can
+ be solved, or are also found in well-accepted IoT end-to-end
+ reliability mechanisms (see a detailed analysis in [IntComp]).
+
+ At the application layer, CoAP was developed over UDP [RFC7252].
+ However, the integration of some CoAP deployments with existing
+ infrastructure is being challenged by middleboxes such as firewalls,
+ which may limit and even block UDP-based communications. This is the
+ main reason why a CoAP over TCP specification has been developed
+ [RFC8323].
+
+ Other application-layer protocols not specifically designed for CNNs
+ are also being considered for the IoT space. Some examples include
+ HTTP/2 and even HTTP/1.1, both of which run over TCP by default
+ [RFC7230] [RFC7540], and the Extensible Messaging and Presence
+ Protocol (XMPP) [RFC6120]. TCP is also used by non-IETF application-
+ layer protocols in the IoT space such as the Message Queuing
+ Telemetry Transport (MQTT) [MQTT] and its lightweight variants.
+
+ TCP is a sophisticated transport protocol that includes optional
+ functionality (e.g., TCP options) that may improve performance in
+ some environments. However, many optional TCP extensions require
+ complex logic inside the TCP stack and increase the code size and the
+ memory requirements. Many TCP extensions are not required for
+ interoperability with other standard-compliant TCP endpoints. Given
+ the limited resources on constrained devices, careful selection of
+ optional TCP features can make an implementation more lightweight.
+
+ This document provides guidance on how to implement and configure TCP
+ and guidance on how applications should use TCP in CNNs. The
+ overarching goal is to offer simple measures to allow for lightweight
+ TCP implementation and suitable operation in such environments. A
+ TCP implementation following the guidance in this document is
+ intended to be compatible with a TCP endpoint that is compliant to
+ the TCP standards, albeit possibly with a lower performance. This
+ implies that such a TCP client would always be able to connect with a
+ standard-compliant TCP server, and a corresponding TCP server would
+ always be able to connect with a standard-compliant TCP client.
+
+ This document assumes that the reader is familiar with TCP. A
+ comprehensive survey of the TCP standards can be found in RFC 7414
+ [RFC7414]. Similar guidance regarding the use of TCP in special
+ environments has been published before, e.g., for cellular wireless
+ networks [RFC3481].
+
+2. Characteristics of CNNs Relevant for TCP
+
+2.1. Network and Link Properties
+
+ CNNs are defined in [RFC7228] as networks whose characteristics are
+ influenced by being composed of a significant portion of constrained
+ nodes. The latter are characterized by significant limitations on
+ processing, memory, and energy resources, among others [RFC7228].
+ The first two dimensions pose constraints on the complexity and
+ memory footprint of the protocols that constrained nodes can support.
+ The latter requires techniques to save energy, such as radio duty-
+ cycling in wireless devices [RFC8352] and the minimization of the
+ number of messages transmitted/received (and their size).
+
+ [RFC7228] 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,
+ etc. CNNs may use wireless or wired technologies (e.g., Power Line
+ Communication), and the transmission rates are typically low (e.g.,
+ below 1 Mbps).
+
+ For use of TCP, one challenge is that not all technologies in a CNN
+ may be aligned with typical Internet subnetwork design principles
+ [RFC3819]. For instance, constrained nodes often use physical- /
+ link-layer technologies that have been characterized as 'lossy',
+ i.e., exhibit a relatively high bit error rate. Dealing with
+ corruption loss is one of the open issues in the Internet [RFC6077].
+
+2.2. Usage Scenarios
+
+ There are different deployment and usage scenarios for CNNs. Some
+ CNNs follow the star topology, whereby one or several hosts are
+ linked to a central device that acts as a router connecting the CNN
+ to the Internet. Alternatively, CNNs may also follow the multihop
+ topology [RFC6606].
+
+ In constrained environments, there can be different types of devices
+ [RFC7228]. For example, there can be devices with a single combined
+ send/receive buffer, a separate send and receive buffer, or a pool of
+ multiple send/receive buffers. In the latter case, it is possible
+ that buffers are also shared for other protocols.
+
+ One key use case for TCP in CNNs is a model where constrained devices
+ connect to unconstrained servers in the Internet. But it is also
+ possible that both TCP endpoints run on constrained devices. In the
+ first case, communication will possibly traverse a middlebox (e.g., a
+ firewall, NAT, etc.). Figure 1 illustrates such a scenario. Note
+ that the scenario is asymmetric, as the unconstrained device will
+ typically not suffer the severe constraints of the constrained
+ device. The unconstrained device is expected to be mains-powered,
+ have a high amount of memory and processing power, and be connected
+ to a resource-rich network.
+
+ Assuming that a majority of constrained devices will correspond to
+ sensor nodes, the amount of data traffic sent by constrained devices
+ (e.g., sensor node measurements) is expected to be higher than the
+ amount of data traffic in the opposite direction. Nevertheless,
+ constrained devices may receive requests (to which they may respond),
+ commands (for configuration purposes and for constrained devices
+ including actuators), and relatively infrequent firmware/software
+ updates.
+
+
+ +---------------+
+ o o <-------- TCP communication -----> | |
+ o o | |
+ o o | Unconstrained |
+ o o +-----------+ | device |
+ o o o ------ | Middlebox | ------- | |
+ o o +-----------+ | (e.g., cloud) |
+ o o o | |
+ +---------------+
+ Constrained devices
+
+ Figure 1: TCP Communication between a Constrained Device and an
+ Unconstrained Device, Traversing a Middlebox
+
+2.3. Communication and Traffic Patterns
+
+ IoT applications are characterized by a number of different
+ communication patterns. The following non-comprehensive list
+ explains some typical examples:
+
+ Unidirectional transfers: An IoT device (e.g., a sensor) can
+ (repeatedly) send updates to the other endpoint. There is not
+ always a need for an application response back to the IoT device.
+
+ Request-response patterns: An IoT device receiving a request from
+ the other endpoint, which triggers a response from the IoT device.
+
+ Bulk data transfers: A typical example for a long file transfer
+ would be an IoT device firmware update.
+
+ A typical communication pattern is that a constrained device
+ communicates with an unconstrained device (cf. Figure 1). But it is
+ also possible that constrained devices communicate amongst
+ themselves.
+
+3. TCP Implementation and Configuration in CNNs
+
+ This section explains how a TCP stack can deal with typical
+ constraints in CNN. The guidance in this section relates to the TCP
+ implementation and its configuration.
+
+3.1. Addressing Path Properties
+
+3.1.1. Maximum Segment Size (MSS)
+
+ Assuming that IPv6 is used, and for the sake of lightweight
+ implementation and operation, unless applications require handling
+ large data units (i.e., leading to an IPv6 datagram size greater than
+ 1280 bytes), it may be desirable to limit the IP datagram size to
+ 1280 bytes in order to avoid the need to support Path MTU Discovery
+ [RFC8201]. In addition, an IP datagram size of 1280 bytes avoids
+ incurring IPv6-layer fragmentation [RFC8900].
+
+ An IPv6 datagram size exceeding 1280 bytes can be avoided by setting
+ the TCP MSS to 1220 bytes or less. Note that it is already a
+ requirement for TCP implementations to consume payload space instead
+ of increasing datagram size when including IP or TCP options in an IP
+ packet to be sent [RFC6691]. Therefore, it is not required to
+ advertise an MSS smaller than 1220 bytes in order to accommodate TCP
+ options.
+
+ Note that setting the MTU to 1280 bytes is possible for link-layer
+ technologies in the CNN space, even if some of them are characterized
+ by a short data unit payload size, e.g., up to a few tens or hundreds
+ of bytes. For example, the maximum frame size in IEEE 802.15.4 is
+ 127 bytes. 6LoWPAN defined an adaptation layer to support IPv6 over
+ IEEE 802.15.4 networks. The adaptation layer includes a
+ fragmentation mechanism, since IPv6 requires the layer below to
+ support an MTU of 1280 bytes [RFC8200], while IEEE 802.15.4 lacks
+ fragmentation mechanisms. 6LoWPAN defines an IEEE 802.15.4 link MTU
+ of 1280 bytes [RFC4944]. Other technologies, such as Bluetooth low
+ energy [RFC7668], ITU-T G.9959 [RFC7428], or Digital Enhanced
+ Cordless Telecommunications (DECT) Ultra Low Energy (ULE) [RFC8105],
+ also use 6LoWPAN-based adaptation layers in order to enable IPv6
+ support. These technologies do support link-layer fragmentation. By
+ exploiting this functionality, the adaptation layers that enable IPv6
+ over such technologies also define an MTU of 1280 bytes.
+
+ On the other hand, there exist technologies also used in the CNN
+ space, such as Master Slave (MS) / Token Passing (TP) [RFC8163],
+ Narrowband IoT (NB-IoT) [RFC8376], or IEEE 802.11ah [6LO-WLANAH],
+ that do not suffer the same degree of frame size limitations as the
+ technologies mentioned above. It is recommended that the MTU for MS/
+ TP be 1500 bytes [RFC8163]; the MTU in NB-IoT is 1600 bytes, and the
+ maximum frame payload size for IEEE 802.11ah is 7991 bytes.
+
+ Using a larger MSS (to a suitable extent) may be beneficial in some
+ scenarios, especially when transferring large payloads, as it reduces
+ the number of packets (and packet headers) required for a given
+ payload. However, the characteristics of the constrained network
+ need to be considered. In particular, in a lossy network where
+ unreliable fragment delivery is used, the amount of data that TCP
+ unnecessarily retransmits due to fragment loss increases (and
+ throughput decreases) quickly with the MSS. This happens because the
+ loss of a fragment leads to the loss of the whole fragmented packet
+ being transmitted. Unnecessary data retransmission is particularly
+ harmful in CNNs due to the resource constraints of such environments.
+ Note that, while the original 6LoWPAN fragmentation mechanism
+ [RFC4944] does not offer reliable fragment delivery, fragment
+ recovery functionality for 6LoWPAN or 6Lo environments has been
+ standardized [RFC8931].
+
+3.1.2. Explicit Congestion Notification (ECN)
+
+ ECN [RFC3168] allows a router to signal in the IP header of a packet
+ that congestion is rising, for example, when a queue size reaches a
+ certain threshold. An ECN-enabled TCP receiver will echo back the
+ congestion signal to the TCP sender by setting a flag in its next TCP
+ Acknowledgment (ACK). The sender triggers congestion control
+ measures as if a packet loss had happened.
+
+ RFC 8087 [RFC8087] outlines the principal gains in terms of increased
+ throughput, reduced delay, and other benefits when ECN is used over a
+ network path that includes equipment that supports Congestion
+ Experienced (CE) marking. In the context of CNNs, a remarkable
+ feature of ECN is that congestion can be signaled without incurring
+ packet drops (which will lead to retransmissions and consumption of
+ limited resources such as energy and bandwidth).
+
+ ECN can further reduce packet losses since congestion control
+ measures can be applied earlier [RFC2884]. Fewer lost packets
+ implies that the number of retransmitted segments decreases, which is
+ particularly beneficial in CNNs, where energy and bandwidth resources
+ are typically limited. Also, it makes sense to try to avoid packet
+ drops for transactional workloads with small data sizes, which are
+ typical for CNNs. In such traffic patterns, it is more difficult and
+ often impossible to detect packet loss without retransmission
+ timeouts (e.g., as there may not be three duplicate ACKs). Any
+ retransmission timeout slows down the data transfer significantly.
+ In addition, if the constrained device uses power-saving techniques,
+ a retransmission timeout will incur a wake-up action, in contrast to
+ ACK clock-triggered sending. When the congestion window of a TCP
+ sender has a size of one segment and a TCP ACK with an ECN signal
+ (ECN-Echo (ECE) flag) arrives at the TCP sender, the TCP sender
+ resets the retransmit timer, and the sender will only be able to send
+ a new packet when the retransmit timer expires. Effectively, at that
+ moment, the TCP sender reduces its sending rate from 1 segment per
+ Round-Trip Time (RTT) to 1 segment per Retransmission Timeout (RTO)
+ and reduces the sending rate further on each ECN signal received in
+ subsequent TCP ACKs. Otherwise, if an ECN signal is not present in a
+ subsequent TCP ACK, the TCP sender resumes the normal ACK-clocked
+ transmission of segments [RFC3168].
+
+ ECN can be incrementally deployed in the Internet. Guidance on
+ configuration and usage of ECN is provided in RFC 7567 [RFC7567].
+ Given the benefits, more and more TCP stacks in the Internet support
+ ECN, and it makes sense to specifically leverage ECN in controlled
+ environments such as CNNs. As of this writing, there is ongoing work
+ to extend the types of TCP packets that are ECN capable, including
+ pure ACKs [TCPM-ECN]. Such a feature may further increase the
+ benefits of ECN in CNN environments. Note, however, that supporting
+ ECN increases implementation complexity.
+
+3.1.3. Explicit Loss Notifications
+
+ There has been a significant body of research on solutions capable of
+ explicitly indicating whether a TCP segment loss is due to
+ corruption, in order to avoid activation of congestion control
+ mechanisms [ETEN] [RFC2757]. While such solutions may provide
+ significant improvement, they have not been widely deployed and
+ remain as experimental work. In fact, as of today, the IETF has not
+ standardized any such solution.
+
+3.2. TCP Guidance for Single-MSS Stacks
+
+ This section discusses TCP stacks that allow transferring a single
+ MSS. More general guidance is provided in Section 3.3.
+
+3.2.1. Single-MSS Stacks -- Benefits and Issues
+
+ A TCP stack can reduce the memory requirements by advertising a TCP
+ window size of 1 MSS and also transmit, at most, 1 MSS of
+ unacknowledged data. In that case, both congestion and flow control
+ implementation are quite simple. Such a small receive and send
+ window may be sufficient for simple message exchanges in the CNN
+ space. However, only using a window of 1 MSS can significantly
+ affect performance. A stop-and-wait operation results in low
+ throughput for transfers that exceed the length of 1 MSS, e.g., a
+ firmware download. Furthermore, a single-MSS solution relies solely
+ on timer-based loss recovery, therefore missing the performance gain
+ of Fast Retransmit and Fast Recovery (which requires a larger window
+ size; see Section 3.3.1).
+
+ If CoAP is used over TCP with the default setting for NSTART in RFC
+ 7252 [RFC7252], a CoAP endpoint is not allowed to send a new message
+ to a destination until a response for the previous message sent to
+ that destination has been received. This is equivalent to an
+ application-layer window size of 1 data unit. For this use of CoAP,
+ a maximum TCP window of 1 MSS may be sufficient, as long as the CoAP
+ message size does not exceed 1 MSS. An exception in CoAP over TCP,
+ though, is the Capabilities and Settings Message (CSM) that must be
+ sent at the start of the TCP connection. The first application
+ message carrying user data is allowed to be sent immediately after
+ the CSM message. If the sum of the CSM size plus the application
+ message size exceeds the MSS, a sender using a single-MSS stack will
+ need to wait for the ACK confirming the CSM before sending the
+ application message.
+
+3.2.2. TCP Options for Single-MSS Stacks
+
+ A TCP implementation needs to support, at a minimum, TCP options 2,
+ 1, and 0. These are, respectively, the MSS option, the No-Operation
+ option, and the End Of Option List marker [RFC0793]. None of these
+ are a substantial burden to support. These options are sufficient
+ for interoperability with a standard-compliant TCP endpoint, albeit
+ many TCP stacks support additional options and can negotiate their
+ use. A TCP implementation is permitted to silently ignore all other
+ TCP options.
+
+ A TCP implementation for a constrained device that uses a single-MSS
+ TCP receive or transmit window size may not benefit from supporting
+ the following TCP options: Window Scale [RFC7323], TCP Timestamps
+ [RFC7323], Selective Acknowledgment (SACK) [RFC2018], and SACK-
+ Permitted [RFC2018]. Also, other TCP options may not be required on
+ a constrained device with a very lightweight implementation. With
+ regard to the Window Scale option, note that it is only useful if a
+ window size greater than 64 kB is needed.
+
+ Note that a TCP sender can benefit from the TCP Timestamps option
+ [RFC7323] in detecting spurious RTOs. The latter are quite likely to
+ occur in CNN scenarios due to a number of reasons (e.g., route
+ changes in a multihop scenario, link-layer retries, etc.). The
+ header overhead incurred by the Timestamps option (of up to 12 bytes)
+ needs to be taken into account.
+
+3.2.3. Delayed Acknowledgments for Single-MSS Stacks
+
+ TCP Delayed Acknowledgments are meant to reduce the number of ACKs
+ sent within a TCP connection, thus reducing network overhead, but
+ they may increase the time until a sender may receive an ACK. In
+ general, usefulness of Delayed ACKs depends heavily on the usage
+ scenario (see Section 3.3.2). There can be interactions with single-
+ MSS stacks.
+
+ When traffic is unidirectional, if the sender can send at most 1 MSS
+ of data or the receiver advertises a receive window not greater than
+ the MSS, Delayed ACKs may unnecessarily contribute delay (up to 500
+ ms) to the RTT [RFC5681], which limits the throughput and can
+ increase data delivery time. Note that, in some cases, it may not be
+ possible to disable Delayed ACKs. One known workaround is to split
+ the data to be sent into two segments of smaller size. A standard-
+ compliant TCP receiver may immediately acknowledge the second MSS of
+ data, which can improve throughput. However, this "split hack" may
+ not always work since a TCP receiver is required to acknowledge every
+ second full-sized segment, but not two consecutive small segments.
+ The overhead of sending two IP packets instead of one is another
+ downside of the "split hack".
+
+ Similar issues may happen when the sender uses the Nagle algorithm,
+ since the sender may need to wait for an unnecessarily Delayed ACK to
+ send a new segment. Disabling the algorithm will not have impact if
+ the sender can only handle stop-and-wait operation at the TCP level.
+
+ For request-response traffic, when the receiver uses Delayed ACKs, a
+ response to a data message can piggyback an ACK, as long as the
+ latter is sent before the Delayed ACK timer expires, thus avoiding
+ unnecessary ACKs without payload. Disabling Delayed ACKs at the
+ request sender allows an immediate ACK for the data segment carrying
+ the response.
+
+3.2.4. RTO Calculation for Single-MSS Stacks
+
+ The RTO calculation is one of the fundamental TCP algorithms
+ [RFC6298]. There is a fundamental trade-off: a short, aggressive RTO
+ behavior reduces wait time before retransmissions, but it also
+ increases the probability of spurious timeouts. The latter leads to
+ unnecessary waste of potentially scarce resources in CNNs such as
+ energy and bandwidth. In contrast, a conservative timeout can result
+ in long error recovery times and, thus, needlessly delay data
+ delivery.
+
+ If a TCP sender uses a very small window size, and it cannot benefit
+ from Fast Retransmit and Fast Recovery or SACK, the RTO algorithm has
+ a large impact on performance. In that case, RTO algorithm tuning
+ may be considered, although careful assessment of possible drawbacks
+ is recommended [RFC8961].
+
+ As an example, adaptive RTO algorithms defined for CoAP over UDP have
+ been found to perform well in CNN scenarios [Commag] [CORE-FASOR].
+
+3.3. General Recommendations for TCP in CNNs
+
+ This section summarizes some widely used techniques to improve TCP,
+ with a focus on their use in CNNs. The TCP extensions discussed here
+ are useful in a wide range of network scenarios, including CNNs.
+ This section is not comprehensive. A comprehensive survey of TCP
+ extensions is published in RFC 7414 [RFC7414].
+
+3.3.1. Loss Recovery and Congestion/Flow Control
+
+ Devices that have enough memory to allow a larger (i.e., more than 3
+ MSS of data) TCP window size can leverage a more efficient loss
+ recovery than the timer-based approach used for a smaller TCP window
+ size (see Section 3.2.1) by using Fast Retransmit and Fast Recovery
+ [RFC5681], at the expense of slightly greater complexity and
+ Transmission Control Block (TCB) size. Assuming that Delayed ACKs
+ are used by the receiver, a window size of up to 5 MSS is required
+ for Fast Retransmit and Fast Recovery to work efficiently: in a given
+ TCP transmission of full-sized segments 1, 2, 3, 4, and 5, if segment
+ 2 gets lost, and the ACK for segment 1 is held by the Delayed ACK
+ timer, then the sender should get an ACK for segment 1 when 3 arrives
+ and duplicate ACKs when segments 4, 5, and 6 arrive. It will
+ retransmit segment 2 when the third duplicate ACK arrives. In order
+ to have segments 2, 3, 4, 5, and 6 sent, the window has to be of at
+ least 5 MSS. With an MSS of 1220 bytes, a buffer of a size of 5 MSS
+ would require 6100 bytes.
+
+ The example in the previous paragraph did not use a further TCP
+ improvement such as Limited Transmit [RFC3042]. The latter may also
+ be useful for any transfer that has more than one segment in flight.
+ Small transfers tend to benefit more from Limited Transmit, because
+ they are more likely to not receive enough duplicate ACKs. Assuming
+ the example in the previous paragraph, Limited Transmit allows
+ sending 5 MSS with a congestion window (cwnd) of three segments, plus
+ two additional segments for the first two duplicate ACKs. With
+ Limited Transmit, even a cwnd of two segments allows sending 5 MSS,
+ at the expense of additional delay contributed by the Delayed ACK
+ timer for the ACK that confirms segment 1.
+
+ When a multiple-segment window is used, the receiver will need to
+ manage the reception of possible out-of-order received segments,
+ requiring sufficient buffer space. Note that even when a window of 1
+ MSS is used, out-of-order arrival should also be managed, as the
+ sender may send multiple sub-MSS packets that fit in the window. (On
+ the other hand, the receiver is free to simply drop out-of-order
+ segments, thus forcing retransmissions.)
+
+3.3.1.1. Selective Acknowledgments (SACKs)
+
+ If a device with less severe memory and processing constraints can
+ afford advertising a TCP window size of several MSSs, it makes sense
+ to support the SACK option to improve performance. SACK allows a
+ data receiver to inform the data sender of non-contiguous data blocks
+ received, thus a sender (having previously sent the SACK-Permitted
+ option) can avoid performing unnecessary retransmissions, saving
+ energy and bandwidth, as well as reducing latency. In addition, SACK
+ often allows for faster loss recovery when there is more than one
+ lost segment in a window of data, since SACK recovery may complete
+ with less RTTs. SACK is particularly useful for bulk data transfers.
+ A receiver supporting SACK will need to keep track of the data blocks
+ that need to be received. The sender will also need to keep track of
+ which data segments need to be resent after learning which data
+ blocks are missing at the receiver. SACK adds 8*n+2 bytes to the TCP
+ header, where n denotes the number of data blocks received, up to
+ four blocks. For a low number of out-of-order segments, the header
+ overhead penalty of SACK is compensated by avoiding unnecessary
+ retransmissions. When the sender discovers the data blocks that have
+ already been received, it needs to also store the necessary state to
+ avoid unnecessary retransmission of data segments that have already
+ been received.
+
+3.3.2. Delayed Acknowledgments
+
+ For certain traffic patterns, Delayed ACKs may have a detrimental
+ effect, as already noted in Section 3.2.3. Advanced TCP stacks may
+ use heuristics to determine the maximum delay for an ACK. For CNNs,
+ the recommendation depends on the expected communication patterns.
+
+ When traffic over a CNN is expected mostly to be unidirectional
+ messages with a size typically up to 1 MSS, and the time between two
+ consecutive message transmissions is greater than the Delayed ACK
+ timeout, it may make sense to use a smaller timeout or disable
+ Delayed ACKs at the receiver. This avoids incurring additional
+ delay, as well as the energy consumption of the sender (which might,
+ e.g., keep its radio interface in receive mode) during that time.
+ Note that disabling Delayed ACKs may only be possible if the peer
+ device is administered by the same entity managing the constrained
+ device. For request-response traffic, enabling Delayed ACKs is
+ recommended at the server end, in order to allow combining a response
+ with the ACK into a single segment, thus increasing efficiency. In
+ addition, if a client issues requests infrequently, disabling Delayed
+ ACKs at the client allows an immediate ACK for the data segment
+ carrying the response.
+
+ In contrast, Delayed ACKs allow for a reduced number of ACKs in bulk
+ transfer types of traffic, e.g., for firmware/software updates or for
+ transferring larger data units containing a batch of sensor readings.
+
+ Note that, in many scenarios, the peer that a constrained device
+ communicates with will be a general purpose system that communicates
+ with both constrained and unconstrained devices. Since Delayed ACKs
+ are often configured through system-wide parameters, the behavior of
+ Delayed ACKs at the peer will be the same regardless of the nature of
+ the endpoints it talks to. Such a peer will typically have Delayed
+ ACKs enabled.
+
+3.3.3. Initial Window
+
+ [RFC5681] specifies a TCP Initial Window (IW) of roughly 4 kB.
+ Subsequently, RFC 6928 [RFC6928] defines an experimental new value
+ for the IW, which in practice will result in an IW of 10 MSS.
+ Nowadays, the latter is used in many TCP implementations.
+
+ Note that a 10-MSS IW was recommended for resource-rich environments
+ (e.g., broadband environments), which are significantly different
+ from CNNs. In CNNs, many application-layer data units are relatively
+ small (e.g., below 1 MSS). However, larger objects (e.g., large
+ files containing sensor readings, firmware updates, etc.) may also
+ need to be transferred in CNNs. If such a large object is
+ transferred in CNNs, with an IW setting of 10 MSS, there is
+ significant buffer overflow risk, since many CNN devices support
+ network or radio buffers of a size smaller than 10 MSS. In order to
+ avoid such a problem, the IW needs to be carefully set in CNNs, based
+ on device and network resource constraints. In many cases, a safe IW
+ setting will be smaller than 10 MSS.
+
+4. TCP Usage Recommendations in CNNs
+
+ This section discusses how TCP can be used by applications that are
+ developed for CNN scenarios. These remarks are by and large
+ independent of how TCP is exactly implemented.
+
+4.1. TCP Connection Initiation
+
+ In the scenario of a constrained device to an unconstrained device
+ illustrated above, a TCP connection is typically initiated by the
+ constrained device, in order for the device to support possible sleep
+ periods to save energy.
+
+4.2. Number of Concurrent Connections
+
+ TCP endpoints with a small amount of memory may only support a small
+ number of connections. Each TCP connection requires storing a number
+ of variables in the TCB. Depending on the internal TCP
+ implementation, each connection may result in further memory
+ overhead, and connections may compete for scarce resources (e.g.,
+ further memory overhead for send and receive buffers, etc.).
+
+ A careful application design may try to keep the number of concurrent
+ connections as small as possible. A client can, for instance, limit
+ the number of simultaneous open connections that it maintains to a
+ given server. Multiple connections could, for instance, be used to
+ avoid the "head-of-line blocking" problem in an application transfer.
+ However, in addition to consuming resources, using multiple
+ connections can also cause undesirable side effects in congested
+ networks. For example, the HTTP/1.1 specification encourages clients
+ to be conservative when opening multiple connections [RFC7230].
+ Furthermore, each new connection will start with a three-way
+ handshake, therefore increasing message overhead.
+
+ Being conservative when opening multiple TCP connections is of
+ particular importance in Constrained-Node Networks.
+
+4.3. TCP Connection Lifetime
+
+ In order to minimize message overhead, it makes sense to keep a TCP
+ connection open as long as the two TCP endpoints have more data to
+ send. If applications exchange data rather infrequently, i.e., if
+ TCP connections would stay idle for a long time, the idle time can
+ result in problems. For instance, certain middleboxes such as
+ firewalls or NAT devices are known to delete state records after an
+ inactivity interval. RFC 5382 [RFC5382] specifies a minimum value
+ for such an interval of 124 minutes. Measurement studies have
+ reported that TCP NAT binding timeouts are highly variable across
+ devices, with the median being around 60 minutes, the shortest
+ timeout being around 2 minutes, and more than 50% of the devices with
+ a timeout shorter than the aforementioned minimum timeout of 124
+ minutes [HomeGateway]. The timeout duration used by a middlebox
+ implementation may not be known to the TCP endpoints.
+
+ In CNNs, such middleboxes may, e.g., be present at the boundary
+ between the CNN and other networks. If the middlebox can be
+ optimized for CNN use cases, it makes sense to increase the initial
+ value for filter state inactivity timers to avoid problems with idle
+ connections. Apart from that, this problem can be dealt with by
+ different connection-handling strategies, each having pros and cons.
+
+ One approach for infrequent data transfer is to use short-lived TCP
+ connections. Instead of trying to maintain a TCP connection for a
+ long time, it is possible that short-lived connections can be opened
+ between two endpoints, which are closed if no more data needs to be
+ exchanged. For use cases that can cope with the additional messages
+ and the latency resulting from starting new connections, it is
+ recommended to use a sequence of short-lived connections instead of
+ maintaining a single long-lived connection.
+
+ The message and latency overhead that stems from using a sequence of
+ short-lived connections could be reduced by TCP Fast Open (TFO)
+ [RFC7413], which is an experimental TCP extension, at the expense of
+ increased implementation complexity and increased TCB size. TFO
+ allows data to be carried in SYN (and SYN-ACK) segments and to be
+ consumed immediately by the receiving endpoint. This reduces the
+ message and latency overhead compared to the traditional three-way
+ handshake to establish a TCP connection. For security reasons, the
+ connection initiator has to request a TFO cookie from the other
+ endpoint. The cookie, with a size of 4 or 16 bytes, is then included
+ in SYN packets of subsequent connections. The cookie needs to be
+ refreshed (and obtained by the client) after a certain amount of
+ time. While a given cookie is used for multiple connections between
+ the same two endpoints, the latter may become vulnerable to privacy
+ threats. In addition, a valid cookie may be stolen from a
+ compromised host and may be used to perform SYN flood attacks, as
+ well as amplified reflection attacks to victim hosts (see Section 5
+ of [RFC7413]). Nevertheless, TFO is more efficient than frequently
+ opening new TCP connections with the traditional three-way handshake,
+ as long as the cookie can be reused in subsequent connections.
+ However, as stated in [RFC7413], TFO deviates from the standard TCP
+ semantics, since the data in the SYN could be replayed to an
+ application in some rare circumstances. Applications should not use
+ TFO unless they can tolerate this issue, e.g., by using TLS
+ [RFC7413]. A comprehensive discussion on TFO can be found in RFC
+ 7413 [RFC7413].
+
+ Another approach is to use long-lived TCP connections with
+ application-layer heartbeat messages. Various application protocols
+ support such heartbeat messages (e.g., CoAP over TCP [RFC8323]).
+ Periodic application-layer heartbeats can prevent early filter state
+ record deletion in middleboxes. If the TCP 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 TCP binding timeout. Otherwise, the
+ implementer needs to take into account that middlebox TCP binding
+ timeouts fall in a wide range of possible values [HomeGateway], and
+ it may be hard to find a proper heartbeat period for application-
+ layer heartbeat messages.
+
+ One specific advantage of heartbeat messages is that they also allow
+ liveness checks at the application level. In general, it makes sense
+ to realize liveness checks at the highest protocol layer possible
+ that is meaningful to the application, in order to maximize the depth
+ of the liveness check. In addition, timely detection of a dead peer
+ may allow savings in terms of TCB memory use. However, the
+ transmission of heartbeat messages consumes resources. This aspect
+ needs to be assessed carefully, considering the characteristics of
+ each specific CNN.
+
+ A TCP implementation may also be able to send "keep-alive" segments
+ to test a TCP connection. According to [RFC1122], keep-alives are an
+ optional TCP mechanism that is turned off by default, i.e., an
+ application must explicitly enable it for a TCP connection. The
+ interval between keep-alive messages must be configurable, and it
+ must default to no less than two hours. With this large timeout, TCP
+ keep-alive messages might not always be useful to avoid deletion of
+ filter state records in some middleboxes. However, sending TCP keep-
+ alive probes more frequently risks draining power on energy-
+ constrained devices.
+
+5. Security Considerations
+
+ Best current practices for securing TCP and TCP-based communication
+ also applies to CNN. As an example, use of TLS [RFC8446] is strongly
+ recommended if it is applicable. However, note that TLS protects
+ only the contents of the data segments.
+
+ There are TCP options that can actually protect the transport layer.
+ One example is the TCP Authentication Option (TCP-AO) [RFC5925].
+ However, this option adds overhead and complexity. TCP-AO typically
+ has a size of 16-20 bytes. An implementer needs to asses the trade-
+ off between security and performance when using TCP-AO, considering
+ the characteristics (in terms of energy, bandwidth, and computational
+ power) of the environment where TCP will be used.
+
+ For the mechanisms discussed in this document, the corresponding
+ considerations apply. For instance, if TFO is used, the security
+ considerations of RFC 7413 [RFC7413] apply.
+
+ Constrained devices are expected to support smaller TCP window sizes
+ than less-limited devices. In such conditions, segment
+ retransmission triggered by RTO expiration is expected to be
+ relatively frequent, due to lack of (enough) duplicate ACKs,
+ especially when a constrained device uses a single-MSS
+ implementation. For this reason, constrained devices running TCP may
+ appear as particularly appealing victims of the so-called "shrew"
+ Denial-of-Service (DoS) attack [SHREW], whereby one or more sources
+ generate a packet spike targeted to coincide with consecutive RTO-
+ expiration-triggered retry attempts of a victim node. Note that the
+ attack may be performed by Internet-connected devices, including
+ constrained devices in the same CNN as the victim, as well as remote
+ ones. Mitigation techniques include RTO randomization and attack
+ blocking by routers able to detect shrew attacks based on their
+ traffic pattern.
+
+6. IANA Considerations
+
+ This document has no IANA actions.
+
+7. References
+
+7.1. Normative References
+
+ [RFC0793] Postel, J., "Transmission Control Protocol", STD 7,
+ RFC 793, DOI 10.17487/RFC0793, September 1981,
+ <https://www.rfc-editor.org/info/rfc793>.
+
+ [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts -
+ Communication Layers", STD 3, RFC 1122,
+ DOI 10.17487/RFC1122, October 1989,
+ <https://www.rfc-editor.org/info/rfc1122>.
+
+ [RFC2018] Mathis, M., Mahdavi, J., Floyd, S., and A. Romanow, "TCP
+ Selective Acknowledgment Options", RFC 2018,
+ DOI 10.17487/RFC2018, October 1996,
+ <https://www.rfc-editor.org/info/rfc2018>.
+
+ [RFC3042] Allman, M., Balakrishnan, H., and S. Floyd, "Enhancing
+ TCP's Loss Recovery Using Limited Transmit", RFC 3042,
+ DOI 10.17487/RFC3042, January 2001,
+ <https://www.rfc-editor.org/info/rfc3042>.
+
+ [RFC3168] Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
+ of Explicit Congestion Notification (ECN) to IP",
+ RFC 3168, DOI 10.17487/RFC3168, September 2001,
+ <https://www.rfc-editor.org/info/rfc3168>.
+
+ [RFC5681] Allman, M., Paxson, V., and E. Blanton, "TCP Congestion
+ Control", RFC 5681, DOI 10.17487/RFC5681, September 2009,
+ <https://www.rfc-editor.org/info/rfc5681>.
+
+ [RFC6298] Paxson, V., Allman, M., Chu, J., and M. Sargent,
+ "Computing TCP's Retransmission Timer", RFC 6298,
+ DOI 10.17487/RFC6298, June 2011,
+ <https://www.rfc-editor.org/info/rfc6298>.
+
+ [RFC6691] Borman, D., "TCP Options and Maximum Segment Size (MSS)",
+ RFC 6691, DOI 10.17487/RFC6691, July 2012,
+ <https://www.rfc-editor.org/info/rfc6691>.
+
+ [RFC6928] Chu, J., Dukkipati, N., Cheng, Y., and M. Mathis,
+ "Increasing TCP's Initial Window", RFC 6928,
+ DOI 10.17487/RFC6928, April 2013,
+ <https://www.rfc-editor.org/info/rfc6928>.
+
+ [RFC7228] Bormann, C., Ersue, M., and A. Keranen, "Terminology for
+ Constrained-Node Networks", RFC 7228,
+ DOI 10.17487/RFC7228, May 2014,
+ <https://www.rfc-editor.org/info/rfc7228>.
+
+ [RFC7323] Borman, D., Braden, B., Jacobson, V., and R.
+ Scheffenegger, Ed., "TCP Extensions for High Performance",
+ RFC 7323, DOI 10.17487/RFC7323, September 2014,
+ <https://www.rfc-editor.org/info/rfc7323>.
+
+ [RFC7413] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP
+ Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014,
+ <https://www.rfc-editor.org/info/rfc7413>.
+
+ [RFC7567] Baker, F., Ed. and G. Fairhurst, Ed., "IETF
+ Recommendations Regarding Active Queue Management",
+ BCP 197, RFC 7567, DOI 10.17487/RFC7567, July 2015,
+ <https://www.rfc-editor.org/info/rfc7567>.
+
+ [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+ (IPv6) Specification", STD 86, RFC 8200,
+ DOI 10.17487/RFC8200, July 2017,
+ <https://www.rfc-editor.org/info/rfc8200>.
+
+7.2. Informative References
+
+ [6LO-WLANAH]
+ Del Carpio Vega, L., Robles, M., and R. Morabito, "IPv6
+ over 802.11ah", Work in Progress, Internet-Draft, draft-
+ delcarpio-6lo-wlanah-01, 19 October 2015,
+ <https://tools.ietf.org/html/draft-delcarpio-6lo-wlanah-
+ 01>.
+
+ [Commag] Betzler, A., Gomez, C., Demirkol, I., and J. Paradells,
+ "CoAP Congestion Control for the Internet of Things", IEEE
+ Communications Magazine, Vol. 54, Issue 7, pp. 154-160,
+ DOI 10.1109/MCOM.2016.7509394, July 2016,
+ <https://doi.org/10.1109/MCOM.2016.7509394>.
+
+ [CORE-FASOR]
+ Jarvinen, I., Kojo, M., Raitahila, I., and Z. Cao, "Fast-
+ Slow Retransmission Timeout and Congestion Control
+ Algorithm for CoAP", Work in Progress, Internet-Draft,
+ draft-ietf-core-fasor-01, 19 October 2020,
+ <https://tools.ietf.org/html/draft-ietf-core-fasor-01>.
+
+ [Dunk] Dunkels, A., "Full TCP/IP for 8-Bit Architectures",
+ MobiSys '03, pp. 85-98, DOI 10.1145/1066116.106611, May
+ 2003, <https://doi.org/10.1145/1066116.106611>.
+
+ [ETEN] Krishnan, R., Sterbenz, J., Eddy, W., and C. Partridge,
+ "Explicit transport error notification (ETEN) for error-
+ prone wireless and satellite networks", Computer Networks,
+ DOI 10.1016/j.comnet.2004.06.012, June 2004,
+ <https://doi.org/10.1016/j.comnet.2004.06.012>.
+
+ [GNRC] Lenders, M., Kietzmann, P., Hahm, O., Petersen, H.,
+ Gündoğa, C., Baccelli, E., Schleiser, K., Schmidt, T., and
+ M. Wählisch, "Connecting the World of Embedded Mobiles:
+ The RIOT Approach to Ubiquitous Networking for the IoT",
+ arXiv:1801.02833v1 [cs.NI], January 2018.
+
+ [HomeGateway]
+ Haetoenen, S., Nyrhinen, A., Eggert, L., Strowes, S.,
+ Sarolahti, P., and M. Kojo, "An Experimental Study of Home
+ Gateway Characteristics", Proceedings of the 10th ACM
+ SIGCOMM conference on Internet measurement, pp. 260-266,
+ DOI 10.1145/1879141.1879174, November 2010,
+ <https://doi.org/10.1145/1879141.1879174>.
+
+ [IntComp] Gomez, C., Arcia-Moret, A., and J. Crowcroft, "TCP in the
+ Internet of Things: from Ostracism to Prominence", IEEE
+ Internet Computing, Vol. 22, Issue 1, pp. 29-41,
+ DOI 10.1109/MIC.2018.112102200, January 2018,
+ <https://doi.org/10.1109/MIC.2018.112102200>.
+
+ [MQTT] ISO/IEC, "Information technology -- Message Queuing
+ Telemetry Transport (MQTT) v3.1.1", ISO/IEC 20922:2016,
+ June 2016.
+
+ [RFC2757] Montenegro, G., Dawkins, S., Kojo, M., Magret, V., and N.
+ Vaidya, "Long Thin Networks", RFC 2757,
+ DOI 10.17487/RFC2757, January 2000,
+ <https://www.rfc-editor.org/info/rfc2757>.
+
+ [RFC2884] Hadi Salim, J. and U. Ahmed, "Performance Evaluation of
+ Explicit Congestion Notification (ECN) in IP Networks",
+ RFC 2884, DOI 10.17487/RFC2884, July 2000,
+ <https://www.rfc-editor.org/info/rfc2884>.
+
+ [RFC3481] Inamura, H., Ed., Montenegro, G., Ed., Ludwig, R., Gurtov,
+ A., and F. Khafizov, "TCP over Second (2.5G) and Third
+ (3G) Generation Wireless Networks", BCP 71, RFC 3481,
+ DOI 10.17487/RFC3481, February 2003,
+ <https://www.rfc-editor.org/info/rfc3481>.
+
+ [RFC3819] Karn, P., Ed., Bormann, C., Fairhurst, G., Grossman, D.,
+ Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L.
+ Wood, "Advice for Internet Subnetwork Designers", BCP 89,
+ RFC 3819, DOI 10.17487/RFC3819, July 2004,
+ <https://www.rfc-editor.org/info/rfc3819>.
+
+ [RFC4944] Montenegro, G., Kushalnagar, N., Hui, J., and D. Culler,
+ "Transmission of IPv6 Packets over IEEE 802.15.4
+ Networks", RFC 4944, DOI 10.17487/RFC4944, September 2007,
+ <https://www.rfc-editor.org/info/rfc4944>.
+
+ [RFC5382] Guha, S., Ed., Biswas, K., Ford, B., Sivakumar, S., and P.
+ Srisuresh, "NAT Behavioral Requirements for TCP", BCP 142,
+ RFC 5382, DOI 10.17487/RFC5382, October 2008,
+ <https://www.rfc-editor.org/info/rfc5382>.
+
+ [RFC5925] Touch, J., Mankin, A., and R. Bonica, "The TCP
+ Authentication Option", RFC 5925, DOI 10.17487/RFC5925,
+ June 2010, <https://www.rfc-editor.org/info/rfc5925>.
+
+ [RFC6077] Papadimitriou, D., Ed., Welzl, M., Scharf, M., and B.
+ Briscoe, "Open Research Issues in Internet Congestion
+ Control", RFC 6077, DOI 10.17487/RFC6077, February 2011,
+ <https://www.rfc-editor.org/info/rfc6077>.
+
+ [RFC6120] Saint-Andre, P., "Extensible Messaging and Presence
+ Protocol (XMPP): Core", RFC 6120, DOI 10.17487/RFC6120,
+ March 2011, <https://www.rfc-editor.org/info/rfc6120>.
+
+ [RFC6282] Hui, J., Ed. and P. Thubert, "Compression Format for IPv6
+ Datagrams over IEEE 802.15.4-Based Networks", RFC 6282,
+ DOI 10.17487/RFC6282, September 2011,
+ <https://www.rfc-editor.org/info/rfc6282>.
+
+ [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, J.,
+ Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur,
+ JP., and R. Alexander, "RPL: IPv6 Routing Protocol for
+ Low-Power and Lossy Networks", RFC 6550,
+ DOI 10.17487/RFC6550, March 2012,
+ <https://www.rfc-editor.org/info/rfc6550>.
+
+ [RFC6606] Kim, E., Kaspar, D., Gomez, C., and C. Bormann, "Problem
+ Statement and Requirements for IPv6 over Low-Power
+ Wireless Personal Area Network (6LoWPAN) Routing",
+ RFC 6606, DOI 10.17487/RFC6606, May 2012,
+ <https://www.rfc-editor.org/info/rfc6606>.
+
+ [RFC6775] Shelby, Z., Ed., Chakrabarti, S., Nordmark, E., and C.
+ Bormann, "Neighbor Discovery Optimization for IPv6 over
+ Low-Power Wireless Personal Area Networks (6LoWPANs)",
+ RFC 6775, DOI 10.17487/RFC6775, November 2012,
+ <https://www.rfc-editor.org/info/rfc6775>.
+
+ [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
+ Protocol (HTTP/1.1): Message Syntax and Routing",
+ RFC 7230, DOI 10.17487/RFC7230, June 2014,
+ <https://www.rfc-editor.org/info/rfc7230>.
+
+ [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained
+ Application Protocol (CoAP)", RFC 7252,
+ DOI 10.17487/RFC7252, June 2014,
+ <https://www.rfc-editor.org/info/rfc7252>.
+
+ [RFC7414] Duke, M., Braden, R., Eddy, W., Blanton, E., and A.
+ Zimmermann, "A Roadmap for Transmission Control Protocol
+ (TCP) Specification Documents", RFC 7414,
+ DOI 10.17487/RFC7414, February 2015,
+ <https://www.rfc-editor.org/info/rfc7414>.
+
+ [RFC7428] Brandt, A. and J. Buron, "Transmission of IPv6 Packets
+ over ITU-T G.9959 Networks", RFC 7428,
+ DOI 10.17487/RFC7428, February 2015,
+ <https://www.rfc-editor.org/info/rfc7428>.
+
+ [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext
+ Transfer Protocol Version 2 (HTTP/2)", RFC 7540,
+ DOI 10.17487/RFC7540, May 2015,
+ <https://www.rfc-editor.org/info/rfc7540>.
+
+ [RFC7668] Nieminen, J., Savolainen, T., Isomaki, M., Patil, B.,
+ Shelby, Z., and C. Gomez, "IPv6 over BLUETOOTH(R) Low
+ Energy", RFC 7668, DOI 10.17487/RFC7668, October 2015,
+ <https://www.rfc-editor.org/info/rfc7668>.
+
+ [RFC8087] Fairhurst, G. and M. Welzl, "The Benefits of Using
+ Explicit Congestion Notification (ECN)", RFC 8087,
+ DOI 10.17487/RFC8087, March 2017,
+ <https://www.rfc-editor.org/info/rfc8087>.
+
+ [RFC8105] Mariager, P., Petersen, J., Ed., Shelby, Z., Van de Logt,
+ M., and D. Barthel, "Transmission of IPv6 Packets over
+ Digital Enhanced Cordless Telecommunications (DECT) Ultra
+ Low Energy (ULE)", RFC 8105, DOI 10.17487/RFC8105, May
+ 2017, <https://www.rfc-editor.org/info/rfc8105>.
+
+ [RFC8163] Lynn, K., Ed., Martocci, J., Neilson, C., and S.
+ Donaldson, "Transmission of IPv6 over Master-Slave/Token-
+ Passing (MS/TP) Networks", RFC 8163, DOI 10.17487/RFC8163,
+ May 2017, <https://www.rfc-editor.org/info/rfc8163>.
+
+ [RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
+ "Path MTU Discovery for IP version 6", STD 87, RFC 8201,
+ DOI 10.17487/RFC8201, July 2017,
+ <https://www.rfc-editor.org/info/rfc8201>.
+
+ [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K.,
+ Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained
+ Application Protocol) over TCP, TLS, and WebSockets",
+ RFC 8323, DOI 10.17487/RFC8323, February 2018,
+ <https://www.rfc-editor.org/info/rfc8323>.
+
+ [RFC8352] Gomez, C., Kovatsch, M., Tian, H., and Z. Cao, Ed.,
+ "Energy-Efficient Features of Internet of Things
+ Protocols", RFC 8352, DOI 10.17487/RFC8352, April 2018,
+ <https://www.rfc-editor.org/info/rfc8352>.
+
+ [RFC8376] Farrell, S., Ed., "Low-Power Wide Area Network (LPWAN)
+ Overview", RFC 8376, DOI 10.17487/RFC8376, May 2018,
+ <https://www.rfc-editor.org/info/rfc8376>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [RFC8900] Bonica, R., Baker, F., Huston, G., Hinden, R., Troan, O.,
+ and F. Gont, "IP Fragmentation Considered Fragile",
+ BCP 230, RFC 8900, DOI 10.17487/RFC8900, September 2020,
+ <https://www.rfc-editor.org/info/rfc8900>.
+
+ [RFC8931] Thubert, P., Ed., "IPv6 over Low-Power Wireless Personal
+ Area Network (6LoWPAN) Selective Fragment Recovery",
+ RFC 8931, DOI 10.17487/RFC8931, November 2020,
+ <https://www.rfc-editor.org/info/rfc8931>.
+
+ [RFC8961] Allman, M., "Requirements for Time-Based Loss Detection",
+ BCP 233, RFC 8961, DOI 10.17487/RFC8961, November 2020,
+ <https://www.rfc-editor.org/info/rfc8961>.
+
+ [RIOT] Baccelli, E., Gündoğa, C., Hahm, O., Kietzmann, P.,
+ Lenders, M., Petersen, H., Schleiser, K., Schmidt, T., and
+ M. Wählisch, "RIOT: An Open Source Operating System for
+ Low-End Embedded Devices in the IoT", IEEE Internet of
+ Things Journal, Vol. 5, Issue 6,
+ DOI 10.1109/JIOT.2018.2815038, March 2018,
+ <https://doi.org/10.1109/JIOT.2018.2815038>.
+
+ [SHREW] Nyrhinen, A. and E. Knightly, "Low-Rate TCP-Targeted
+ Denial of Service Attacks (The Shrew vs. the Mice and
+ Elephants)", SIGCOMM'03, DOI 10.1145/863955.863966, August
+ 2003, <https://doi.org/10.1145/863955.863966>.
+
+ [TCPM-ECN] Bagnulo, M. and B. Briscoe, "ECN++: Adding Explicit
+ Congestion Notification (ECN) to TCP Control Packets",
+ Work in Progress, Internet-Draft, draft-ietf-tcpm-
+ generalized-ecn-07, 16 February 2021,
+ <https://tools.ietf.org/html/draft-ietf-tcpm-generalized-
+ ecn-07>.
+
+Appendix A. TCP Implementations for Constrained Devices
+
+ This section overviews the main features of TCP implementations for
+ constrained devices. The survey is limited to open-source stacks
+ with a small footprint. It is not meant to be all-encompassing. For
+ more powerful embedded systems (e.g., with 32-bit processors), there
+ are further stacks that comprehensively implement TCP. On the other
+ hand, please be aware that this Annex is based on information
+ available as of the writing.
+
+A.1. uIP
+
+ uIP is a TCP/IP stack, targeted for 8- and 16-bit microcontrollers,
+ which pioneered TCP/IP implementations for constrained devices. uIP
+ has been deployed with Contiki and the Arduino Ethernet shield. A
+ code size of ~5 kB (which comprises checksumming, IPv4, ICMP, and
+ TCP) has been reported for uIP [Dunk]. Later versions of uIP
+ implement IPv6 as well.
+
+ uIP uses the same global buffer for both incoming and outgoing
+ traffic, which has a size of a single packet. In case of a
+ retransmission, an application must be able to reproduce the same
+ user data that had been transmitted. Multiple connections are
+ supported but need to share the global buffer.
+
+ The MSS is announced via the MSS option on connection establishment,
+ and the receive window size (of 1 MSS) is not modified during a
+ connection. Stop-and-wait operation is used for sending data. Among
+ other optimizations, this allows for the avoidance of sliding window
+ operations, which use 32-bit arithmetic extensively and are expensive
+ on 8-bit CPUs.
+
+ Contiki uses the "split hack" technique (see Section 3.2.3) to avoid
+ Delayed ACKs for senders using a single segment.
+
+ The code size of the TCP implementation in Contiki-NG has been
+ measured to be 3.2 kB on CC2538DK, cross-compiling on Linux.
+
+A.2. lwIP
+
+ lwIP is a TCP/IP stack, targeted for 8- and 16-bit microcontrollers.
+ lwIP has a total code size of ~14 kB to ~22 kB (which comprises
+ memory management, checksumming, network interfaces, IPv4, ICMP, and
+ TCP) and a TCP code size of ~9 kB to ~14 kB [Dunk]. Both IPv4 and
+ IPv6 are supported in lwIP since v2.0.0.
+
+ In contrast with uIP, lwIP decouples applications from the network
+ stack. lwIP supports a TCP transmission window greater than a single
+ segment, as well as the buffering of incoming and outgoing data.
+ Other implemented mechanisms comprise slow start, congestion
+ avoidance, fast retransmit, and fast recovery. SACK and Window Scale
+ support has been recently added to lwIP.
+
+A.3. RIOT
+
+ The RIOT TCP implementation (called "GNRC TCP") has been designed for
+ Class 1 devices [RFC7228]. The main target platforms are 8- and
+ 16-bit microcontrollers, with 32-bit platforms also supported. GNRC
+ TCP offers a similar function set as uIP, but it provides and
+ maintains an independent receive buffer for each connection. In
+ contrast to uIP, retransmission is also handled by GNRC TCP. For
+ simplicity, GNRC TCP uses a single-MSS implementation. The
+ application programmer does not need to know anything about the TCP
+ internals; therefore, GNRC TCP can be seen as a user-friendly uIP TCP
+ implementation.
+
+ The MSS is set on connections establishment and cannot be changed
+ during connection lifetime. GNRC TCP allows multiple connections in
+ parallel, but each TCB must be allocated somewhere in the system. By
+ default, there is only enough memory allocated for a single TCP
+ connection, but it can be increased at compile time if the user needs
+ multiple parallel connections.
+
+ The RIOT TCP implementation offers an optional Portable Operating
+ System Interface (POSIX) socket wrapper that enables POSIX
+ compliance, if needed.
+
+ Further details on RIOT and GNRC can be found in [RIOT] and [GNRC].
+
+A.4. TinyOS
+
+ TinyOS was important as a platform for early constrained devices.
+ TinyOS has an experimental TCP stack that uses a simple non-blocking
+ library-based implementation of TCP, which provides a subset of the
+ socket interface primitives. The application is responsible for
+ buffering. The TCP library does not do any receive-side buffering.
+ Instead, it will immediately dispatch new, in-order data to the
+ application or otherwise drop the segment. A send buffer is provided
+ by the application. Multiple TCP connections are possible.
+ Recently, there has been little work on the stack.
+
+A.5. FreeRTOS
+
+ FreeRTOS is a real-time operating system kernel for embedded devices
+ that is supported by 16- and 32-bit microprocessors. Its TCP
+ implementation is based on multiple-segment window size, although a
+ "Tiny-TCP" option, which is a single-MSS variant, can be enabled.
+ Delayed ACKs are supported, with a 20 ms Delayed ACK timer as a
+ technique intended "to gain performance".
+
+A.6. uC/OS
+
+ uC/OS is a real-time operating system kernel for embedded devices,
+ which is maintained by Micrium. uC/OS is intended for 8-, 16-, and
+ 32-bit microprocessors. The uC/OS TCP implementation supports a
+ multiple-segment window size.
+
+A.7. Summary
+
+ None of the implementations considered in this Annex support ECN or
+ TFO.
+
+ +==========+=====+======+==========+======+========+==========+=====+
+ | | uIP |lwIP | lwIP 2.1 | RIOT | TinyOS | FreeRTOS |uC/OS|
+ | | |orig | | | | | |
+ +==========+=====+======+==========+======+========+==========+=====+
+ | Code | <5 |~9 to | 38 | <7 | N/A | <9.2 | N/A |
+ | Size | | ~14 | | | | | |
+ | (kB) | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Memory | (a) | (T1) | (T4) | (T3) | N/A | (T2) | N/A |
+ +==========+=====+======+==========+======+========+==========+=====+
+ | TCP |
+ | Features |
+ +==========+=====+======+==========+======+========+==========+=====+
+ | Single- | Yes | No | No | Yes | No | No | No |
+ | Segm. | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Slow | No | Yes | Yes | No | Yes | No | Yes |
+ | start | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Fast | No | Yes | Yes | No | Yes | No | Yes |
+ | rec/retx | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Keep- | No | No | Yes | No | No | Yes | Yes |
+ | alive | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Win. | No | No | Yes | No | No | Yes | No |
+ | Scale | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | TCP | No | No | Yes | No | No | Yes | No |
+ | timest. | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | SACK | No | No | Yes | No | No | Yes | No |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Del. | No | Yes | Yes | No | No | Yes | Yes |
+ | ACKs | | | | | | | |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Socket | No | No | Optional | (I) | Subset | Yes | Yes |
+ +----------+-----+------+----------+------+--------+----------+-----+
+ | Concur. | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
+ | Conn. | | | | | | | |
+ +==========+=====+======+==========+======+========+==========+=====+
+ | TLS supp | No | No | Yes | Yes | Yes | Yes | Yes |
+ | orted | | | | | | | |
+ +==========+=====+======+==========+======+========+==========+=====+
+
+ Table 1: Summary of TCP Features for Different Lightweight TCP
+ Implementations
+
+ Legend:
+
+ (T1): TCP-only, on x86 and AVR platforms
+
+ (T2): TCP-only, on ARM Cortex-M platform
+
+ (T3): TCP-only, on ARM Cortex-M0+ platform (NOTE: RAM usage for the
+ same platform is ~2.5 kB for one TCP connection plus ~1.2 kB
+ for each additional connection)
+
+ (T4): TCP-only, on CC2538DK, cross-compiling on Linux
+
+ (a): Includes IP, ICMP, and TCP on x86 and AVR platforms. The
+ Contiki-NG TCP implementation has a code size of 3.2 kB on
+ CC2538DK, cross-compiling on Linux
+
+ (I): Optional POSIX socket wrapper that enables POSIX compliance
+ if needed
+
+ Mult.: Multiple
+
+ N/A: Not Available
+
+Acknowledgments
+
+ The work of Carles Gomez has been funded in part by the Spanish
+ Government (Ministerio de Educacion, Cultura y Deporte) through Jose
+ Castillejo grants CAS15/00336 and CAS18/00170; the European Regional
+ Development Fund (ERDF); the Spanish Government through projects
+ TEC2016-79988-P, PID2019-106808RA-I00, AEI/FEDER, and UE; and the
+ Generalitat de Catalunya Grant 2017 SGR 376. Part of his
+ contribution to this work has been carried out during his stays as a
+ visiting scholar at the Computer Laboratory of the University of
+ Cambridge.
+
+ The authors appreciate the feedback received for this document. The
+ following folks provided comments that helped improve the document:
+ Carsten Bormann, Zhen Cao, Wei Genyu, Ari Keränen, Abhijan
+ Bhattacharyya, Andres Arcia-Moret, Yoshifumi Nishida, Joe Touch, Fred
+ Baker, Nik Sultana, Kerry Lynn, Erik Nordmark, Markku Kojo, Hannes
+ Tschofenig, David Black, Ilpo Jarvinen, Emmanuel Baccelli, Stuart
+ Cheshire, Gorry Fairhurst, Ingemar Johansson, Ted Lemon, and Michael
+ Tüxen. Simon Brummer provided details and kindly performed Random
+ Access Memory (RAM) and Read-Only Memory (ROM) usage measurements on
+ the RIOT TCP implementation. Xavi Vilajosana provided details on the
+ OpenWSN TCP implementation. Rahul Jadhav kindly performed code size
+ measurements on the Contiki-NG and lwIP 2.1.2 TCP implementations.
+ He also provided details on the uIP TCP implementation.
+
+Authors' Addresses
+
+ Carles Gomez
+ UPC
+ C/Esteve Terradas, 7
+ 08860 Castelldefels
+ Spain
+
+ Email: carlesgo@entel.upc.edu
+
+
+ Jon Crowcroft
+ University of Cambridge
+ JJ Thomson Avenue
+ Cambridge
+ CB3 0FD
+ United Kingdom
+
+ Email: jon.crowcroft@cl.cam.ac.uk
+
+
+ Michael Scharf
+ Hochschule Esslingen
+ University of Applied Sciences
+ Flandernstr. 101
+ 73732 Esslingen am Neckar
+ Germany
+
+ Email: michael.scharf@hs-esslingen.de