draft-ietf-tsvwg-sctp-udp-encaps-14.txt   rfc6951.txt 
Network Working Group M. Tuexen Internet Engineering Task Force (IETF) M. Tuexen
Internet-Draft Muenster Univ. of Appl. Sciences Request for Comments: 6951 Muenster Univ. of Appl. Sciences
Intended status: Standards Track R. R. Stewart Category: Standards Track R. Stewart
Expires: September 20, 2013 Adara Networks ISSN: 2070-1721 Adara Networks
March 19, 2013 May 2013
UDP Encapsulation of SCTP Packets for End-Host to End-Host Communication UDP Encapsulation of Stream Control Transmission Protocol (SCTP) Packets
draft-ietf-tsvwg-sctp-udp-encaps-14.txt for End-Host to End-Host Communication
Abstract Abstract
This document describes a simple method of encapsulating SCTP Packets This document describes a simple method of encapsulating Stream
into UDP packets and its limitations. This allows the usage of SCTP Control Transmission Protocol (SCTP) packets into UDP packets and its
in networks with legacy NAT not supporting SCTP. It can also be used limitations. This allows the usage of SCTP in networks with legacy
to implement SCTP on hosts without directly accessing the IP-layer, NATs that do not support SCTP. It can also be used to implement SCTP
for example implementing it as part of the application without on hosts without directly accessing the IP layer, for example,
requiring special privileges. implementing it as part of the application without requiring special
privileges.
Please note that this document only describes the functionality Please note that this document only describes the functionality
required within an SCTP stack to add on UDP encapsulation, providing required within an SCTP stack to add on UDP encapsulation, providing
only those mechanisms for two end-hosts to communicate with each only those mechanisms for two end-hosts to communicate with each
other over UDP ports. In particular, it does not provide mechanisms other over UDP ports. In particular, it does not provide mechanisms
to determine whether UDP encapsulation is being used by the peer, nor to determine whether UDP encapsulation is being used by the peer, nor
the mechanisms for determining which remote UDP port number can be the mechanisms for determining which remote UDP port number can be
used. These functions are are out of scope for this document. used. These functions are out of scope for this document.
This document covers only end-hosts and not tunneling (egress or This document covers only end-hosts and not tunneling (egress or
ingress) end-points. ingress) endpoints.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 5741.
This Internet-Draft will expire on September 20, 2013. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc6951.
Copyright Notice Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 34 skipping to change at page 2, line 34
3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Portable SCTP Implementations . . . . . . . . . . . . . . 3 3.1. Portable SCTP Implementations . . . . . . . . . . . . . . 3
3.2. Legacy NAT Traversal . . . . . . . . . . . . . . . . . . 4 3.2. Legacy NAT Traversal . . . . . . . . . . . . . . . . . . 4
4. Unilateral Self-Address Fixing (UNSAF) Considerations . . . . 4 4. Unilateral Self-Address Fixing (UNSAF) Considerations . . . . 4
5. SCTP over UDP . . . . . . . . . . . . . . . . . . . . . . . . 4 5. SCTP over UDP . . . . . . . . . . . . . . . . . . . . . . . . 4
5.1. Architectural Considerations . . . . . . . . . . . . . . 4 5.1. Architectural Considerations . . . . . . . . . . . . . . 4
5.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 5 5.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 5
5.3. Encapsulation Procedure . . . . . . . . . . . . . . . . . 6 5.3. Encapsulation Procedure . . . . . . . . . . . . . . . . . 6
5.4. Decapsulation Procedure . . . . . . . . . . . . . . . . . 7 5.4. Decapsulation Procedure . . . . . . . . . . . . . . . . . 7
5.5. ICMP Considerations . . . . . . . . . . . . . . . . . . . 7 5.5. ICMP Considerations . . . . . . . . . . . . . . . . . . . 7
5.6. Path MTU Considerations . . . . . . . . . . . . . . . . . 8 5.6. Path MTU Considerations . . . . . . . . . . . . . . . . . 7
5.7. Handling of Embedded IP-addresses . . . . . . . . . . . . 8 5.7. Handling of Embedded IP Addresses . . . . . . . . . . . . 8
5.8. ECN Considerations . . . . . . . . . . . . . . . . . . . 8 5.8. Explicit Congestion Notification (ECN) Considerations . . 8
6. Socket API Considerations . . . . . . . . . . . . . . . . . . 8 6. Socket API Considerations . . . . . . . . . . . . . . . . . . 8
6.1. Get or Set the Remote UDP Encapsulation Port Number 6.1. Get or Set the Remote UDP Encapsulation Port Number
(SCTP_REMOTE_UDP_ENCAPS_PORT) . . . . . . . . . . . . . . 9 (SCTP_REMOTE_UDP_ENCAPS_PORT) . . . . . . . . . . . . . . 9
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
8. Security Considerations . . . . . . . . . . . . . . . . . . . 9 8. Security Considerations . . . . . . . . . . . . . . . . . . . 9
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 10
10.1. Normative References . . . . . . . . . . . . . . . . . . 10 10.1. Normative References . . . . . . . . . . . . . . . . . . 10
10.2. Informative References . . . . . . . . . . . . . . . . . 11 10.2. Informative References . . . . . . . . . . . . . . . . . 11
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11
1. Introduction 1. Introduction
This document describes a simple method of encapsulating SCTP packets This document describes a simple method of encapsulating SCTP packets
into UDP packets. SCTP as defined in [RFC4960] runs directly over into UDP packets. SCTP, as defined in [RFC4960], runs directly over
IPv4 or IPv6. There are two main reasons for encapsulating SCTP IPv4 or IPv6. There are two main reasons for encapsulating SCTP
packets: packets:
o Allow SCTP traffic to pass through legacy NATs, which do not o To allow SCTP traffic to pass through legacy NATs, which do not
provide native SCTP support as specified in provide native SCTP support as specified in [BEHAVE] and
[I-D.ietf-behave-sctpnat] and [I-D.ietf-tsvwg-natsupp]. [NATSUPP].
o Allow SCTP to be implemented on hosts which do not provide direct o To allow SCTP to be implemented on hosts that do not provide
access to the IP-layer. In particular, applications can use their direct access to the IP layer. In particular, applications can
own SCTP implementation if the operating system does not provide use their own SCTP implementation if the operating system does not
one. provide one.
SCTP provides the necessary congestion control and reliability SCTP provides the necessary congestion control and reliability
service that UDP does not perform. service that UDP does not perform.
2. Conventions 2. Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
3. Use Cases 3. Use Cases
This section discusses two important use cases for encapsulating SCTP This section discusses two important use cases for encapsulating SCTP
into UDP. into UDP.
3.1. Portable SCTP Implementations 3.1. Portable SCTP Implementations
Some operating systems support SCTP natively. For other operating Some operating systems support SCTP natively. For other operating
systems implementations are available, but require special privileges systems, implementations are available but require special privileges
to install and/or use them. In some cases no kernel implementation to install and/or use them. In some cases, a kernel implementation
might be available at all. When providing an SCTP implementation as might not be available at all. When providing an SCTP implementation
part of a user process, most operating systems require special as part of a user process, most operating systems require special
privileges to access the IP layer directly. privileges to access the IP layer directly.
Using UDP encapsulation makes it possible to provide an SCTP Using UDP encapsulation makes it possible to provide an SCTP
implementation as part of a user process which does not require any implementation as part of a user process that does not require any
special privileges. special privileges.
A crucial point for implementing SCTP in user space is that the A crucial point for implementing SCTP in user space is that the
source address of outgoing packets needs to be controlled. This is source address of outgoing packets needs to be controlled. This is
not an issue if the SCTP stack can use all addresses configured at not an issue if the SCTP stack can use all addresses configured at
the IP-layer as source addresses. However, it is an issue when also the IP layer as source addresses. However, it is an issue when also
using the address management required for NAT traversal, described in using the address management required for NAT traversal, described in
Section 5.7. Section 5.7.
3.2. Legacy NAT Traversal 3.2. Legacy NAT Traversal
Using UDP encapsulation allows SCTP communication when traversing Using UDP encapsulation allows SCTP communication when traversing
legacy NATs (i.e those NATs not supporting SCTP as described in legacy NATs (i.e, those NATs not supporting SCTP as described in
[I-D.ietf-behave-sctpnat] and [I-D.ietf-tsvwg-natsupp]). For single- [BEHAVE] and [NATSUPP]). For single-homed associations, IP addresses
homed associations IP addresses MUST NOT be listed in the INIT and MUST NOT be listed in the INIT and INIT-ACK chunks. To use multiple
INIT-ACK chunks. To use multiple addresses, the dynamic address addresses, the dynamic address reconfiguration extension described in
reconfiguration extension described in [RFC5061] MUST be used only [RFC5061] MUST be used only with wildcard addresses in the ASCONF
with wildcard addresses in the ASCONF chunks in combination with chunks (Address Configuration Change Chunks) in combination with
[RFC4895]. [RFC4895].
For multi-homed SCTP association the address management as described For multihomed SCTP associations, the address management as described
in Section 5.7 MUST be performed. in Section 5.7 MUST be performed.
SCTP sends periodic HEARTBEAT chunks on all idle paths. These can SCTP sends periodic HEARTBEAT chunks on all idle paths. These can
keep the NAT state alive. keep the NAT state alive.
4. Unilateral Self-Address Fixing (UNSAF) Considerations 4. Unilateral Self-Address Fixing (UNSAF) Considerations
As [RFC3424] requires a limited scope, this document only covers SCTP As [RFC3424] requires a limited scope, this document only covers SCTP
end-points dealing with legacy constraints as described in Section 3. endpoints dealing with legacy constraints as described in Section 3.
It doesn't cover generic tunneling end-points. It doesn't cover generic tunneling endpoints.
Obviously, the exit strategy is to use hosts supporting SCTP natively Obviously, the exit strategy is to use hosts supporting SCTP natively
and middleboxes supporting SCTP as specified in and middleboxes supporting SCTP as specified in [BEHAVE] and
[I-D.ietf-behave-sctpnat] and [I-D.ietf-tsvwg-natsupp]). [NATSUPP].
5. SCTP over UDP 5. SCTP over UDP
5.1. Architectural Considerations 5.1. Architectural Considerations
UDP encapsulated SCTP is normally communicated between SCTP stacks UDP-encapsulated SCTP is normally communicated between SCTP stacks
using the IANA-assigned UDP port number 9899 (sctp-tunneling) on both using the IANA-assigned UDP port number 9899 (sctp-tunneling) on both
ends. There are circumstances where other ports may be used on ends. There are circumstances where other ports may be used on
either end: As stated earlier, implementations in the application either end: As stated earlier, implementations in the application
space might be required to use other than the registered port. Since space might be required to use ports other than the registered port.
NAT boxes might change UDP port numbers, the receiver might observe Since NAT boxes might change UDP port numbers, the receiver might
other UDP port numbers than were used by the sender. Discovery of observe other UDP port numbers than were used by the sender.
alternate ports is outside of the scope of this document, but this Discovery of alternate ports is outside of the scope of this
section describes considerations for SCTP stack design in light of document, but this section describes considerations for SCTP stack
their potential use. design in light of their potential use.
Each SCTP stack uses a single local UDP encapsulation port number as Each SCTP stack uses a single local UDP encapsulation port number as
the destination port for all its incoming SCTP packets. While the the destination port for all its incoming SCTP packets. While the
uniqueness of the local UDP encapsulation port number is not uniqueness of the local UDP encapsulation port number is not
necessarily required for the protocol, this greatly simplifies necessarily required for the protocol, this greatly simplifies
implementation design, since different ports for each address would implementation design, since different ports for each address would
require a sender implementation to choose the appropriate port while require a sender implementation to choose the appropriate port while
doing source address selection. Using a single local UDP doing source address selection. Using a single local UDP
encapsulation port number per host is not possible if the SCTP stack encapsulation port number per host is not possible if the SCTP stack
is implemented as part of each application, there are multiple is implemented as part of each application, there are multiple
applications, and some of the applications want to use the same IP- applications, and some of the applications want to use the same IP
address. address.
An SCTP implementation supporting UDP encapsulation MUST maintain a An SCTP implementation supporting UDP encapsulation MUST maintain a
remote UDP encapsulation port number per destination address for each remote UDP encapsulation port number per destination address for each
SCTP association. Again, because the remote stack may be using other SCTP association. Again, because the remote stack may be using ports
than the well-known port, each port may be different from each stack, other than the well-known port, each port may be different from each
but because of remapping of ports by NATs, the remote ports stack. However, because of remapping of ports by NATs, the remote
associated with different remote IP addresses may not be identical, ports associated with different remote IP addresses may not be
even if they are associated with the same stack. identical, even if they are associated with the same stack.
Implementation note: Because the well-known port might not be used, Implementation note: Because the well-known port might not be used,
implementations need allow other port numbers to be specified as a implementations need to allow other port numbers to be specified as a
local or remote UDP encapsulation port number through APIs. local or remote UDP encapsulation port number through APIs.
5.2. Packet Format 5.2. Packet Format
To encapsulate an SCTP packet, a UDP header as defined in [RFC0768] To encapsulate an SCTP packet, a UDP header as defined in [RFC0768]
is inserted between the IP header as defined in [RFC0791] and the is inserted between the IP header as defined in [RFC0791] and the
SCTP common header as defined in [RFC4960]. SCTP common header as defined in [RFC4960].
Figure 1 shows the packet format of an encapsulated SCTP packet when Figure 1 shows the packet format of an encapsulated SCTP packet when
IPv4 is used. IPv4 is used.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Header | | IPv4 Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP Header | | UDP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Common Header | | SCTP Common Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #1 | | SCTP Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | | ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #n | | SCTP Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: An SCTP/UDP/IPv4 packet
Figure 1: An SCTP/UDP/IPv4 Packet
The packet format for an encapsulated SCTP packet when using IPv6 as The packet format for an encapsulated SCTP packet when using IPv6 as
defined in [RFC2460] is shown in Figure 2. Please note the the defined in [RFC2460] is shown in Figure 2. Please note that the
number m of IPv6 extension headers can be 0. number m of IPv6 extension headers can be 0.
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Base Header | | IPv6 Base Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Extension Header #1 | | IPv6 Extension Header #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | | ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Extension Header #m | | IPv6 Extension Header #m |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP Header | | UDP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Common Header | | SCTP Common Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #1 | | SCTP Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | | ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #n | | SCTP Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: An SCTP/UDP/IPv6 packet Figure 2: An SCTP/UDP/IPv6 Packet
5.3. Encapsulation Procedure 5.3. Encapsulation Procedure
Within the UDP header, the source port MUST be the local UDP Within the UDP header, the source port MUST be the local UDP
encapsulation port number of the SCTP stack, the destination port encapsulation port number of the SCTP stack, and the destination port
MUST be the remote UDP encapsulation port number maintained for the MUST be the remote UDP encapsulation port number maintained for the
association and the destination address to which the packet is sent association and the destination address to which the packet is sent
(see Section 5.1). (see Section 5.1).
Because the SCTP packet is the UDP payload, the length of the UDP Because the SCTP packet is the UDP payload, the length of the UDP
packet MUST be the length of the SCTP packet plus the size of the UDP packet MUST be the length of the SCTP packet plus the size of the UDP
header. header.
The SCTP checksum MUST be computed and the UDP checksum SHOULD be The SCTP checksum MUST be computed for IPv4 and IPv6, and the UDP
computed for IPv4 (see [RFC0768]) and IPv6 (see [RFC2460] and checksum SHOULD be computed for IPv4 and IPv6. (See [RFC0768]
[I-D.ietf-6man-udpzero]). Although UDP with a zero checksum over regarding IPv4; see [RFC2460] and [RFC6936] regarding IPv6.)
IPv6 is allowed under certain constraints [I-D.ietf-6man-udpzero], Although UDP with a zero checksum over IPv6 is allowed under certain
this document does not specify mechanisms for this mode. Deployed constraints [RFC6936], this document does not specify mechanisms for
support may be limited and at the time of writing, the use of a zero this mode. Deployed support may be limited; also, at the time of
UDP checksum would also be counter to the goal of legacy NAT writing, the use of a zero UDP checksum would be counter to the goal
traversal. of legacy NAT traversal.
5.4. Decapsulation Procedure 5.4. Decapsulation Procedure
When an encapsulated packet is received, the UDP header is removed. When an encapsulated packet is received, the UDP header is removed.
Then the generic lookup is performed, as done by an SCTP stack Then, the generic lookup is performed, as done by an SCTP stack
whenever a packet is received, to find the association for the whenever a packet is received, to find the association for the
received SCTP packet. After finding the SCTP association (which received SCTP packet. After finding the SCTP association (which
includes checking the verification tag), the UDP source port MUST be includes checking the verification tag), the UDP source port MUST be
stored as the encapsulation port for the destination address the SCTP stored as the encapsulation port for the destination address the SCTP
packet is received from (see Section 5.1). packet is received from (see Section 5.1).
When a non-encapsulated SCTP packet is received by the SCTP stack, When a non-encapsulated SCTP packet is received by the SCTP stack,
the encapsulation of outgoing packets belonging to the same the encapsulation of outgoing packets belonging to the same
association and the corresponding destination address MUST be association and the corresponding destination address MUST be
disabled. disabled.
5.5. ICMP Considerations 5.5. ICMP Considerations
When receiving ICMP or ICMPv6 response packets, there might not be When receiving ICMP or ICMPv6 response packets, there might not be
enough bytes in the payload to identify the SCTP association which enough bytes in the payload to identify the SCTP association that the
the SCTP packet triggering the ICMP or ICMPv6 packet belongs to. If SCTP packet triggering the ICMP or ICMPv6 packet belongs to. If a
a received ICMP or ICMPv6 packet can not be related to a specific received ICMP or ICMPv6 packet cannot be related to a specific SCTP
SCTP association or the verification tag can't be verified, it MUST association or the verification tag cannot be verified, it MUST be
be discarded silently. This means in particular that the SCTP stack discarded silently. In particular, this means that the SCTP stack
MUST NOT rely on receiving ICMP or ICMPv6 messages. Implementation MUST NOT rely on receiving ICMP or ICMPv6 messages. Implementation
constraints could prevent processing received ICMP or ICMPv6 constraints could prevent processing received ICMP or ICMPv6
messages. messages.
If received ICMP or ICMPv6 messages are processed, the following If received ICMP or ICMPv6 messages are processed, the following
mapping SHOULD apply: mapping SHOULD apply:
1. ICMP messages with type 'Destination Unreachable' and code 'Port 1. ICMP messages with type 'Destination Unreachable' and code 'Port
Unreachable' SHOULD be treated as ICMP messages with type Unreachable' SHOULD be treated as ICMP messages with type
'Protocol Unreachable' and code 'Destination Port unreachable. 'Destination Unreachable' and code 'Protocol Unreachable'. See
See [RFC0792] for more details. [RFC0792] for more details.
2. ICMPv6 messages with type 'Destination Unreachable' and code 2. ICMPv6 messages with type 'Destination Unreachable' and code
'Port unreachable' SHOULD be treated as ICMPv6 messages with type 'Port Unreachable' SHOULD be treated as ICMPv6 messages with type
'Parameter Problem' and code 'Unrecognized Next Header type 'Parameter Problem' and code 'unrecognized Next Header type
encountered'. See [RFC4443] for more details. encountered'. See [RFC4443] for more details.
5.6. Path MTU Considerations 5.6. Path MTU Considerations
If an SCTP endpoint starts to encapsulate the packets of a path, it If an SCTP endpoint starts to encapsulate the packets of a path, it
MUST decrease the Path MTU of that path by the size of the UDP MUST decrease the Path MTU of that path by the size of the UDP
header. If it stops encapsulating them, the Path MTU SHOULD be header. If it stops encapsulating them, the Path MTU SHOULD be
increased by the size of the UDP header. increased by the size of the UDP header.
When performing Path MTU discovery as described in [RFC4820] and When performing Path MTU discovery as described in [RFC4820] and
[RFC4821] it MUST be taken into account that one cannot rely on the [RFC4821], it MUST be taken into account that one cannot rely on the
feedback provided by ICMP or ICMPv6 due to the limitation laid out in feedback provided by ICMP or ICMPv6 due to the limitation laid out in
Section 5.5. Section 5.5.
If the implementation does not allow control of the don't fragment If the implementation does not allow control of the Don't Fragment
(DF)-bit contained in the IPv4 header, then Path MTU discovery can't (DF) bit contained in the IPv4 header, then Path MTU discovery can't
be used. In this case, an implementation specific value should be be used. In this case, an implementation-specific value should be
used instead. used instead.
5.7. Handling of Embedded IP-addresses 5.7. Handling of Embedded IP Addresses
When using UDP encapsulation for legacy NAT traversal, IP addresses When using UDP encapsulation for legacy NAT traversal, IP addresses
that might require translation MUST NOT be put into any SCTP packet. that might require translation MUST NOT be put into any SCTP packet.
This means that a multi homed SCTP association is setup initially as This means that a multihomed SCTP association is set up initially as
a singled homed one and the protocol extension [RFC5061] in a single-homed one, and the protocol extension [RFC5061] in
combination with [RFC4895] is used to add the other addresses. Only combination with [RFC4895] is used to add the other addresses. Only
wildcard addresses are put into the SCTP packet. wildcard addresses are put into the SCTP packet.
When addresses are changed during the lifetime of an association When addresses are changed during the lifetime of an association, the
[RFC5061] MUST be used with wildcard addresses only. If an SCTP end- protocol extension [RFC5061] MUST be used with wildcard addresses
point receives an ABORT with the T-bit set, it MAY use this as an only. If an SCTP endpoint receives an ABORT with the T-bit set, it
indication that the addresses seen by the peer might have changed. MAY use this as an indication that the addresses seen by the peer
might have changed.
5.8. ECN Considerations 5.8. Explicit Congestion Notification (ECN) Considerations
If the implementation supports the sending and receiving of the ECN If the implementation supports the sending and receiving of the ECN
bits for the IP protocols being used by an SCTP association, the ECN bits for the IP protocols being used by an SCTP association, the ECN
bits MUST NOT be changed during sending and receiving. bits MUST NOT be changed during sending and receiving.
6. Socket API Considerations 6. Socket API Considerations
This section describes how the socket API defined in [RFC6458] needs This section describes how the socket API defined in [RFC6458] needs
to be extended to provide a way for the application to control the to be extended to provide a way for the application to control the
UDP encapsulation. UDP encapsulation.
skipping to change at page 9, line 19 skipping to change at page 9, line 19
encapsulation port number. This allows an endpoint to encapsulate encapsulation port number. This allows an endpoint to encapsulate
initial packets. initial packets.
struct sctp_udpencaps { struct sctp_udpencaps {
sctp_assoc_t sue_assoc_id; sctp_assoc_t sue_assoc_id;
struct sockaddr_storage sue_address; struct sockaddr_storage sue_address;
uint16_t sue_port; uint16_t sue_port;
}; };
sue_assoc_id: This parameter is ignored for one-to-one style sue_assoc_id: This parameter is ignored for one-to-one style
sockets. For one-to-many style sockets the application may fill sockets. For one-to-many style sockets, the application may fill
in an association identifier or SCTP_FUTURE_ASSOC for this query. in an association identifier or SCTP_FUTURE_ASSOC for this query.
It is an error to use SCTP_{CURRENT|ALL}_ASSOC in sue_assoc_id. It is an error to use SCTP_{CURRENT|ALL}_ASSOC in sue_assoc_id.
sue_address: This specifies which address is of interest. If a sue_address: This specifies which address is of interest. If a
wildcard address is provided it applies only to future paths. wildcard address is provided, it applies only to future paths.
sue_port: The UDP port number in network byte order used as the sue_port: The UDP port number in network byte order; used as the
destination port number for UDP encapsulation. Providing a value destination port number for UDP encapsulation. Providing a value
of 0 disables UDP encapsulation. of 0 disables UDP encapsulation.
7. IANA Considerations 7. IANA Considerations
This document refers to the already assigned UDP port 9899 (sctp- This document refers to the already assigned UDP port 9899 (sctp-
tunneling). IANA is requested to update this assignment to refer to tunneling). IANA has updated this assignment to refer to this
this document. As per [RFC6335] the Assignee should be [IESG] and document. As per [RFC6335], the Assignee is [IESG] and the Contact
the Contact should be [IETF_Chair]. is [IETF_Chair].
Please note that the TCP port 9899 (sctp-tunneling) assignment is not Please note that the TCP port 9899 (sctp-tunneling) assignment is not
needed anymore and IANA is asked to remove this TCP port number needed anymore, and IANA has removed this TCP port number assignment
assignment. and marked TCP port 9899 as "Reserved".
8. Security Considerations 8. Security Considerations
Encapsulating SCTP into UDP does not add any additional security Encapsulating SCTP into UDP does not add any additional security
considerations to the ones given in [RFC4960] and [RFC5061]. considerations to the ones given in [RFC4960] and [RFC5061].
Firewalls inspecting SCTP packets must also be aware of the Firewalls inspecting SCTP packets must also be aware of the
encapsulation and apply corresponding rules to the encapsulated encapsulation and apply corresponding rules to the encapsulated
packets. packets.
An attacker might send a malicious UDP packet towards an SCTP end- An attacker might send a malicious UDP packet towards an SCTP
point to change the encapsulation port for a single remote address of endpoint to change the encapsulation port for a single remote address
a particular SCTP association. However, as specified in Section 5.4, of a particular SCTP association. However, as specified in
this requires the usage of one the two negotiated verification tags. Section 5.4, this requires the usage of one of the two negotiated
This protects against blind attackers the same way as described in verification tags. This protects against blind attackers the same
[RFC4960] for SCTP over IPv4 or IPv6. Non-blind attackers can affect way as described in [RFC4960] for SCTP over IPv4 or IPv6. Non-blind
SCTP association using the UDP encapsulation described in this attackers can affect SCTP association using the UDP encapsulation
document in the same way as SCTP associations not using the UDP described in this document in the same way as SCTP associations not
encapsulation of SCTP described here. using the UDP encapsulation of SCTP described here.
9. Acknowledgments 9. Acknowledgments
The authors wish to thank Stewart Bryant, Dave Crocker, Gorry The authors wish to thank Stewart Bryant, Dave Crocker, Gorry
Fairhurst, Tero Kivinen, Barry Leiba, Pete Resnick, Martin Fairhurst, Tero Kivinen, Barry Leiba, Pete Resnick, Martin
Stiemerling, Irene Ruengeler, and Dan Wing for their invaluable Stiemerling, Irene Ruengeler, and Dan Wing for their invaluable
comments. comments.
10. References 10. References
skipping to change at page 11, line 15 skipping to change at page 11, line 15
[RFC4960] Stewart, R., "Stream Control Transmission Protocol", RFC [RFC4960] Stewart, R., "Stream Control Transmission Protocol", RFC
4960, September 2007. 4960, September 2007.
[RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M. [RFC5061] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M.
Kozuka, "Stream Control Transmission Protocol (SCTP) Kozuka, "Stream Control Transmission Protocol (SCTP)
Dynamic Address Reconfiguration", RFC 5061, September Dynamic Address Reconfiguration", RFC 5061, September
2007. 2007.
10.2. Informative References 10.2. Informative References
[BEHAVE] Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation",
Work in Progress, February 2013.
[NATSUPP] Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation
Support", Work in Progress, February 2013.
[RFC3424] Daigle, L. IAB, "IAB Considerations for UNilateral Self- [RFC3424] Daigle, L. IAB, "IAB Considerations for UNilateral Self-
Address Fixing (UNSAF) Across Network Address Address Fixing (UNSAF) Across Network Address
Translation", RFC 3424, November 2002. Translation", RFC 3424, November 2002.
[RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S. [RFC6335] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
Cheshire, "Internet Assigned Numbers Authority (IANA) Cheshire, "Internet Assigned Numbers Authority (IANA)
Procedures for the Management of the Service Name and Procedures for the Management of the Service Name and
Transport Protocol Port Number Registry", BCP 165, RFC Transport Protocol Port Number Registry", BCP 165, RFC
6335, August 2011. 6335, August 2011.
[RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V. [RFC6458] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V.
Yasevich, "Sockets API Extensions for the Stream Control Yasevich, "Sockets API Extensions for the Stream Control
Transmission Protocol (SCTP)", RFC 6458, December 2011. Transmission Protocol (SCTP)", RFC 6458, December 2011.
[I-D.ietf-6man-udpzero] [RFC6936] Fairhurst, G. and M. Westerlund, "Applicability Statement
Fairhurst, G. and M. Westerlund, "Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums",
for the use of IPv6 UDP Datagrams with Zero Checksums", RFC 6936, April 2013.
draft-ietf-6man-udpzero-12 (work in progress), February
2013.
[I-D.ietf-behave-sctpnat]
Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation",
draft-ietf-behave-sctpnat-08 (work in progress), February
2013.
[I-D.ietf-tsvwg-natsupp]
Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation
Support", draft-ietf-tsvwg-natsupp-05 (work in progress),
February 2013.
Authors' Addresses Authors' Addresses
Michael Tuexen Michael Tuexen
Muenster University of Applied Sciences Muenster University of Applied Sciences
Stegerwaldstrasse 39 Stegerwaldstrasse 39
48565 Steinfurt 48565 Steinfurt
DE DE
Email: tuexen@fh-muenster.de EMail: tuexen@fh-muenster.de
Randall R. Stewart Randall R. Stewart
Adara Networks Adara Networks
Chapin, SC 29036 Chapin, SC 29036
US US
Email: randall@lakerest.net EMail: randall@lakerest.net
 End of changes. 52 change blocks. 
175 lines changed or deleted 169 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/