RFC 8261
Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets
RFC 8261: Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets ๐
Stream: Internet Engineering Task Force (IETF) ๐ธ Authors: M. Tuexen (Muenster Univ. of Appl. Sciences), R. Stewart (Netflix, Inc.), R. Jesup (WorldGate Communications), S. Loreto (Ericsson) ๐ฏ Category: Standards Track ๐ Date: November 2017 ๐ ISSN: 2070-1721 Obsoletes / Updates: nothing is listed in the title block ๐ โโ๏ธ
Abstract โจ
okay so SCTP (the Stream Control Transmission Protocol) was originally built to sit on top of IPv4 or IPv6. This doc explains how SCTP can run on top of DTLS (Datagram Transport Layer Security) instead ๐. The big twist is that SCTP has no idea what's happening below DTLS, so it can't put explicit IP addresses in its control chunks ๐. That means any SCTP associations carried over DTLS can only be single-homed (one address, no backup route) ๐ .
Status of This Memo ๐
this is an Internet Standards Track document ๐
this doc is a product of the Internet Engineering Task Force (IETF) ๐. It represents the consensus of the IETF community ๐ซถ, got public review, and was approved for publication by the Internet Engineering Steering Group (IESG) โ . If you want more info about Internet Standards, check out Section 2 of RFC 7841 ๐.
for the current status of this document, any errata, and how to send feedback, go to https://www.rfc-editor.org/info/rfc8261 ๐.
Copyright Notice ๐
Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved ๐.
this doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info), which apply on the date this doc was published. Please read these carefully, because they spell out your rights and restrictions for this doc ๐งพ. Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License โ๏ธ.
Table of Contents ๐๏ธ
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Encapsulation and Decapsulation Procedure . . . . . . . . . . 3
4. General Considerations . . . . . . . . . . . . . . . . . . . 4
5. DTLS Considerations . . . . . . . . . . . . . . . . . . . . . 4
6. SCTP Considerations . . . . . . . . . . . . . . . . . . . . . 5
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
8. Security Considerations . . . . . . . . . . . . . . . . . . . 7
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 7
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 10
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10
1. Overview ๐ฆ
okay bestie, so SCTP as defined in [RFC4960] is a transport protocol that runs on top of the network protocols IPv4 [RFC0791] or IPv6 [RFC8200] โจ. This doc is all about how SCTP gets used on top of Datagram Transport Layer Security (DTLS) ๐. DTLS 1.0 is defined in [RFC4347], and the latest version when this RFC was published, DTLS 1.2, is defined in [RFC6347] ๐ง . This encapsulation shows up in the WebRTC protocol suite (see [RTC-OVERVIEW] for an overview) for moving non-SRTP data between browsers ๐. The architecture of this whole stack is covered in [DATA-CHAN] ๐ .
+----------+
| SCTP |
+----------+
| DTLS |
+----------+
| ICE/UDP |
+----------+
Figure 1: Basic Stack Diagram
this is giving layers ๐ฐ. SCTP over DTLS over UDP (or ICE/UDP, see [RFC5245]) can work as a NAT traversal solution, and on top of that you get confidentiality, source authentication, and integrity-protected transfers ๐ก๏ธ. Heads up, though: using ICE doesn't automatically mean the packet format on the wire is different ๐.
also, the procedures in [RFC6951] for handling UDP port numbers do not apply here ๐ โโ๏ธ. With this encapsulation, SCTP is unaware of which protocols are used below DTLS ๐ซ .
2. Conventions ๐
the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document get interpreted as described in BCP 14 [RFC2119] [RFC8174], but only when they show up in all capitals, just like here ๐.
3. Encapsulation and Decapsulation Procedure ๐
okay so when an SCTP packet gets handed to the DTLS layer ๐ฆ, the whole thing (the SCTP common header plus all of its SCTP chunks) gets treated as the payload of DTLS's application-layer protocol ๐. Once DTLS has processed a DTLS record carrying a message of that application-layer protocol, it passes the payload up to the SCTP layer ๐. The SCTP layer expects to see an SCTP common header followed by a bunch of SCTP chunks ๐งฉ.
4. General Considerations ๐ท
this part is so important ๐ญ. An implementation of SCTP over DTLS MUST implement and use a path maximum transmission unit (MTU) discovery method that works without ICMP, so SCTP/DTLS can get an MTU estimate ๐. Implementing "Packetization Layer Path MTU Discovery" [RFC4821], either in SCTP or in DTLS, is RECOMMENDED ๐.
when SCTP over DTLS is used for data channels, SCTP does the path MTU discovery (see Section 5 of [DATA-CHAN]) ๐ง.
5. DTLS Considerations ๐
the DTLS implementation MUST support DTLS 1.0 [RFC4347] and SHOULD support the most recently published version of DTLS, which was DTLS 1.2 [RFC6347] when this RFC came out ๐ซถ. If there's no revision to this doc, that second requirement covers all future versions of DTLS once they're published as RFCs ๐ฎ. This doc only gets revised if a change to DTLS or SCTP makes the encapsulation need a change ๐.
SCTP does segmentation and reassembly based on the path MTU ๐งฉ. Because of that, the DTLS layer MUST NOT use any compression algorithm ๐ โโ๏ธ.
The DTLS MUST support sending messages larger than the current path MTU ๐ฌ. This might end up sending IP-level fragmented messages ๐งท.
if path MTU discovery is done by the DTLS layer, the method described in [RFC4821] MUST be used ๐ฏ. For probe packets, the extension defined in [RFC6520] MUST be used ๐ซ.
if path MTU discovery is done by the SCTP layer and IPv4 is the network-layer protocol, the DTLS implementation SHOULD let the DTLS user force the corresponding IPv4 packet to go out with the Don't Fragment (DF) bit set ๐ฉ. If controlling the DF bit isn't possible (say, because of implementation restrictions), the SCTP stack has to use a safe value for the path MTU ๐. It is RECOMMENDED that this safe value not exceed 1200 bytes ๐. Please note that [RFC1122] only requires end hosts to be able to reassemble fragmented IP packets up to 576 bytes in length ๐ง.
the DTLS implementation SHOULD let the DTLS user set the Differentiated Services Code Point (DSCP) used for outgoing IP packets (see [RFC2474]) ๐ท๏ธ. This needs the DTLS implementation to pass the value through, and the lower layer has to allow setting it ๐ง. If the lower layer can't set the DSCP, the DTLS user just ends up with the default value from the protocol stack ๐คทโโ๏ธ. Please note that a single DSCP value is used for all packets belonging to the same SCTP association ๐ .
Using Explicit Congestion Notification (ECN) in SCTP requires the DTLS layer to pass the ECN bits through, and its lower layer has to expose access to them for sent and received packets (see [RFC3168]) ๐. The DTLS and lower-layer implementations have to provide this support ๐ซก. If that isn't possible (for example, due to implementation restrictions), ECN can't be used by SCTP ๐.
6. SCTP Considerations ๐ง
this section covers how the base protocol gets used and how well various SCTP extensions fit ๐.
6.1. Base Protocol ๐
this doc uses SCTP [RFC4960] with the following restrictions ๐ . They're needed because the lower layer is DTLS instead of IPv4 and IPv6, and because SCTP doesn't deal with the IP addresses or the transport protocol used below DTLS ๐ซ :
- A DTLS connection MUST be established before an SCTP association can be set up ๐.
- Multiple SCTP associations MAY be multiplexed over a single DTLS connection ๐. The SCTP port numbers are used for multiplexing and demultiplexing the SCTP associations carried over a single DTLS connection ๐.
- All SCTP associations are single-homed, because DTLS doesn't expose any address management to its upper layer ๐ . So, it is RECOMMENDED to set the SCTP parameter path.max.retrans to association.max.retrans ๐ฏ.
- The INIT and INIT-ACK chunk MUST NOT contain any IPv4 Address or IPv6 Address parameters ๐ โโ๏ธ. The INIT chunk MUST NOT contain the Supported Address Types parameter ๐ซ.
- The implementation MUST NOT rely on processing ICMP or ICMPv6 packets ๐. The SCTP layer most likely can't access the SCTP common header in the plain text of the packet that triggered the ICMP or ICMPv6 packet ๐ฅฒ. This applies in particular to path MTU discovery when SCTP does it ๐.
- If the SCTP layer gets notified about a path change by its lower layers, SCTP SHOULD retest the path MTU and reset the congestion state to the initial state ๐. The window-based congestion control method in [RFC4960] resets the congestion window and slow-start threshold to their initial values ๐ช.
6.2. Padding Extension ๐งธ
when the SCTP layer does path MTU discovery as specified in [RFC4821], the padding extension defined in [RFC4820] MUST be supported and used for probe packets (HEARTBEAT chunks bundled with PADDING chunks [RFC4820]) ๐.
6.3. Dynamic Address Reconfiguration Extension ๐ก
if the dynamic address reconfiguration extension defined in [RFC5061] is used, ASCONF chunks MUST use wildcard addresses only ๐.
6.4. SCTP Authentication Extension ๐
the SCTP authentication extension defined in [RFC4895] can be used with DTLS encapsulation, but it doesn't add any extra benefit ๐คทโโ๏ธ.
6.5. Partial Reliability Extension ๐ค๏ธ
Partial reliability as defined in [RFC3758] can be used together with DTLS encapsulation ๐ง. You can also use additional Partially Reliable Stream Control Transmission Protocol (PR-SCTP) policies, like the ones defined in [RFC7496] ๐.
6.6. Stream Reset Extension ๐
the SCTP stream reset extension defined in [RFC6525] can be used with DTLS encapsulation ๐ซ. It's used to reset SCTP streams and add SCTP streams during the lifetime of the SCTP association ๐ธ.
6.7. Interleaving of Large User Messages
SCTP as defined in [RFC4960] does not support the interleaving of large user messages that need to be fragmented and reassembled by the SCTP layer. The protocol extension defined in [RFC8260] overcomes this limitation and can be used with DTLS encapsulation. ๐ โจ
7. IANA Considerations ๐
This document does not require any IANA actions. ๐ธ
8. Security Considerations ๐
Okay bestie, this part is SUPER important so pay attention ๐ Security considerations for DTLS are specified in [RFC4347] and for SCTP in [RFC4960], [RFC3758], and [RFC6525]. The combination of SCTP and DTLS introduces no new security considerations. Lowkey iconic, no new drama ๐
SCTP should not process the IP addresses used for the underlying communication since DTLS provides no guarantees about them. ๐ Don't go poking at those addresses, they're not protected by DTLS, so it's a no-go zone ๐ซ
It should be noted that the inability to process ICMP or ICMPv6 messages does not add any security issue. When SCTP is carried over a connection-less lower layer like IPv4, IPv6, or UDP, processing of these messages is required to protect other nodes not supporting SCTP. Since DTLS provides a connection-oriented lower layer, this kind of protection is not necessary. ๐ฆ So ICMP handling is a must on connectionless layers to protect other nodes, but DTLS is connection-oriented so we don't need that protection. Not me being like "wait, that's a whole thing" ๐ญ
9. References ๐
9.1. Normative References
- [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>.
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC4347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer Security", RFC 4347, DOI 10.17487/RFC4347, April 2006, <https://www.rfc-editor.org/info/rfc4347>.
- [RFC4820] Tuexen, M., Stewart, R., and P. Lei, "Padding Chunk and Parameter for the Stream Control Transmission Protocol (SCTP)", RFC 4820, DOI 10.17487/RFC4820, March 2007, <https://www.rfc-editor.org/info/rfc4820>.
- [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU Discovery", RFC 4821, DOI 10.17487/RFC4821, March 2007, <https://www.rfc-editor.org/info/rfc4821>.
- [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol", RFC 4960, DOI 10.17487/RFC4960, September 2007, <https://www.rfc-editor.org/info/rfc4960>.
- [RFC6347] Rescorla, E. and N. Modadugu, "Datagram Transport Layer Security Version 1.2", RFC 6347, DOI 10.17487/RFC6347, January 2012, <https://www.rfc-editor.org/info/rfc6347>.
- [RFC6520] Seggelmann, R., Tuexen, M., and M. Williams, "Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension", RFC 6520, DOI 10.17487/RFC6520, February 2012, <https://www.rfc-editor.org/info/rfc6520>.
- [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
9.2. Informative References
- [DATA-CHAN] Jesup, R., Loreto, S., and M. Tuexen, "WebRTC Data Channels", Work in Progress, draft-ietf-rtcweb-data-channel-13, January 2015.
- [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, DOI 10.17487/RFC0791, September 1981, <https://www.rfc-editor.org/info/rfc791>.
- [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, "Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers", RFC 2474, DOI 10.17487/RFC2474, December 1998, <https://www.rfc-editor.org/info/rfc2474>.
- [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>.
- [RFC3758] Stewart, R., Ramalho, M., Xie, Q., Tuexen, M., and P. Conrad, "Stream Control Transmission Protocol (SCTP) Partial Reliability Extension", RFC 3758, DOI 10.17487/RFC3758, May 2004, <https://www.rfc-editor.org/info/rfc3758>.
- [RFC4895] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla, "Authenticated Chunks for the Stream Control Transmission Protocol (SCTP)", RFC 4895, DOI 10.17487/RFC4895, August 2007, <https://www.rfc-editor.org/info/rfc4895>.
- [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. Kozuka, "Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration", RFC 5061, DOI 10.17487/RFC5061, September 2007, <https://www.rfc-editor.org/info/rfc5061>.
- [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols", RFC 5245, DOI 10.17487/RFC5245, April 2010, <https://www.rfc-editor.org/info/rfc5245>.
- [RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control Transmission Protocol (SCTP) Stream Reconfiguration", RFC 6525, DOI 10.17487/RFC6525, February 2012, <https://www.rfc-editor.org/info/rfc6525>.
- [RFC6951] Tuexen, M. and R. Stewart, "UDP Encapsulation of Stream Control Transmission Protocol (SCTP) Packets for End-Host to End-Host Communication", RFC 6951, DOI 10.17487/RFC6951, May 2013, <https://www.rfc-editor.org/info/rfc6951>.
- [RFC7496] Tuexen, M., Seggelmann, R., Stewart, R., and S. Loreto, "Additional Policies for the Partially Reliable Stream Control Transmission Protocol Extension", RFC 7496, DOI 10.17487/RFC7496, April 2015, <https://www.rfc-editor.org/info/rfc7496>.
- [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>.
- [RFC8260] Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, "Stream Schedulers and User Message Interleaving for the Stream Control Transmission Protocol", RFC 8260, November 2017.
- [RTC-OVERVIEW] Alvestrand, H., "Overview: Real Time Protocols for Browser-based Applications", Work in Progress, draft-ietf-rtcweb-overview-18, March 2017.
Acknowledgments ๐ซถ
The authors wish to thank David Black, Benoit Claise, Spencer Dawkins, Francis Dupont, Gorry Fairhurst, Stephen Farrell, Christer Holmberg, Barry Leiba, Eric Rescorla, Tom Taylor, Joe Touch, and Magnus Westerlund for their invaluable comments. Literal legends, the whole list ๐
Authors' Addresses ๐
Michael Tuexen Muenster University of Applied Sciences Stegerwaldstrasse 39 48565 Steinfurt Germany
Email: tuexen@fh-muenster.de
Randall R. Stewart Netflix, Inc. Chapin, SC 29036 United States of America
Email: randall@lakerest.net
Randell Jesup WorldGate Communications 3800 Horizon Blvd, Suite #103 Trevose, PA 19053-4947 United States of America
Phone: +1-215-354-5166 Email: randell-ietf@jesup.org
Salvatore Loreto Ericsson Hirsalantie 11 Jorvas 02420 Finland
Email: Salvatore.Loreto@ericsson.com
๐ฆ where this page comes from
- ietf: rfc8261 2017-11
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms