1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669
|
<pre>Internet Engineering Task Force (IETF) M. Tuexen
Request for Comments: 6951 Muenster Univ. of Appl. Sciences
Category: Standards Track R. Stewart
ISSN: 2070-1721 Adara Networks
May 2013
UDP Encapsulation of Stream Control Transmission Protocol (SCTP) Packets
for End-Host to End-Host Communication
Abstract
This document describes a simple method of encapsulating Stream
Control Transmission Protocol (SCTP) packets into UDP packets and its
limitations. This allows the usage of SCTP in networks with legacy
NATs that do not support SCTP. It can also be used to implement SCTP
on hosts without directly accessing the IP layer, for example,
implementing it as part of the application without requiring special
privileges.
Please note that this document only describes the functionality
required within an SCTP stack to add on UDP encapsulation, providing
only those mechanisms for two end-hosts to communicate with each
other over UDP ports. In particular, it does not provide mechanisms
to determine whether UDP encapsulation is being used by the peer, nor
the mechanisms for determining which remote UDP port number can be
used. These functions are out of scope for this document.
This document covers only end-hosts and not tunneling (egress or
ingress) endpoints.
Status of This Memo
This is an Internet Standards Track document.
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). Further information on
Internet Standards is available in <a href="./rfc5741#section-2">Section 2 of RFC 5741</a>.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
<a href="http://www.rfc-editor.org/info/rfc6951">http://www.rfc-editor.org/info/rfc6951</a>.
<span class="grey">Tuexen & Stewart Standards Track [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
Copyright Notice
Copyright (c) 2013 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to <a href="https://www.rfc-editor.org/bcp/bcp78">BCP 78</a> and the IETF Trust's Legal
Provisions Relating to IETF Documents
(<a href="http://trustee.ietf.org/license-info">http://trustee.ietf.org/license-info</a>) 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
<a href="#section-1">1</a>. Introduction . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-2">2</a>. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-3">3</a>. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-3.1">3.1</a>. Portable SCTP Implementations . . . . . . . . . . . . . . <a href="#page-3">3</a>
<a href="#section-3.2">3.2</a>. Legacy NAT Traversal . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
<a href="#section-4">4</a>. Unilateral Self-Address Fixing (UNSAF) Considerations . . . . <a href="#page-4">4</a>
<a href="#section-5">5</a>. SCTP over UDP . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-4">4</a>
<a href="#section-5.1">5.1</a>. Architectural Considerations . . . . . . . . . . . . . . <a href="#page-4">4</a>
<a href="#section-5.2">5.2</a>. Packet Format . . . . . . . . . . . . . . . . . . . . . . <a href="#page-5">5</a>
<a href="#section-5.3">5.3</a>. Encapsulation Procedure . . . . . . . . . . . . . . . . . <a href="#page-6">6</a>
<a href="#section-5.4">5.4</a>. Decapsulation Procedure . . . . . . . . . . . . . . . . . <a href="#page-7">7</a>
<a href="#section-5.5">5.5</a>. ICMP Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-7">7</a>
<a href="#section-5.6">5.6</a>. Path MTU Considerations . . . . . . . . . . . . . . . . . <a href="#page-7">7</a>
<a href="#section-5.7">5.7</a>. Handling of Embedded IP Addresses . . . . . . . . . . . . <a href="#page-8">8</a>
<a href="#section-5.8">5.8</a>. Explicit Congestion Notification (ECN) Considerations . . <a href="#page-8">8</a>
<a href="#section-6">6</a>. Socket API Considerations . . . . . . . . . . . . . . . . . . <a href="#page-8">8</a>
6.1. Get or Set the Remote UDP Encapsulation Port Number
(SCTP_REMOTE_UDP_ENCAPS_PORT) . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-7">7</a>. IANA Considerations . . . . . . . . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-8">8</a>. Security Considerations . . . . . . . . . . . . . . . . . . . <a href="#page-9">9</a>
<a href="#section-9">9</a>. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-10">10</a>. References . . . . . . . . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-10.1">10.1</a>. Normative References . . . . . . . . . . . . . . . . . . <a href="#page-10">10</a>
<a href="#section-10.2">10.2</a>. Informative References . . . . . . . . . . . . . . . . . <a href="#page-11">11</a>
<span class="grey">Tuexen & Stewart Standards Track [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
This document describes a simple method of encapsulating SCTP packets
into UDP packets. SCTP, as defined in [<a href="./rfc4960" title=""Stream Control Transmission Protocol"">RFC4960</a>], runs directly over
IPv4 or IPv6. There are two main reasons for encapsulating SCTP
packets:
o To allow SCTP traffic to pass through legacy NATs, which do not
provide native SCTP support as specified in [<a href="#ref-BEHAVE" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation"">BEHAVE</a>] and
[<a href="#ref-NATSUPP" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation Support"">NATSUPP</a>].
o To allow SCTP to be implemented on hosts that do not provide
direct access to the IP layer. In particular, applications can
use their own SCTP implementation if the operating system does not
provide one.
SCTP provides the necessary congestion control and reliability
service that UDP does not perform.
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Conventions</span>
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [<a href="./rfc2119" title=""Key words for use in RFCs to Indicate Requirement Levels"">RFC2119</a>].
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Use Cases</span>
This section discusses two important use cases for encapsulating SCTP
into UDP.
<span class="h3"><a class="selflink" id="section-3.1" href="#section-3.1">3.1</a>. Portable SCTP Implementations</span>
Some operating systems support SCTP natively. For other operating
systems, implementations are available but require special privileges
to install and/or use them. In some cases, a kernel implementation
might not be available at all. When providing an SCTP implementation
as part of a user process, most operating systems require special
privileges to access the IP layer directly.
Using UDP encapsulation makes it possible to provide an SCTP
implementation as part of a user process that does not require any
special privileges.
A crucial point for implementing SCTP in user space is that the
source address of outgoing packets needs to be controlled. This is
not an issue if the SCTP stack can use all addresses configured at
<span class="grey">Tuexen & Stewart Standards Track [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
the IP layer as source addresses. However, it is an issue when also
using the address management required for NAT traversal, described in
<a href="#section-5.7">Section 5.7</a>.
<span class="h3"><a class="selflink" id="section-3.2" href="#section-3.2">3.2</a>. Legacy NAT Traversal</span>
Using UDP encapsulation allows SCTP communication when traversing
legacy NATs (i.e, those NATs not supporting SCTP as described in
[<a href="#ref-BEHAVE" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation"">BEHAVE</a>] and [<a href="#ref-NATSUPP" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation Support"">NATSUPP</a>]). For single-homed associations, IP addresses
MUST NOT be listed in the INIT and INIT-ACK chunks. To use multiple
addresses, the dynamic address reconfiguration extension described in
[<a href="./rfc5061" title=""Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration"">RFC5061</a>] MUST be used only with wildcard addresses in the ASCONF
chunks (Address Configuration Change Chunks) in combination with
[<a href="./rfc4895" title=""Authenticated Chunks for the Stream Control Transmission Protocol (SCTP)"">RFC4895</a>].
For multihomed SCTP associations, the address management as described
in <a href="#section-5.7">Section 5.7</a> MUST be performed.
SCTP sends periodic HEARTBEAT chunks on all idle paths. These can
keep the NAT state alive.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Unilateral Self-Address Fixing (UNSAF) Considerations</span>
As [<a href="./rfc3424" title=""IAB Considerations for UNilateral Self- Address Fixing (UNSAF) Across Network Address Translation"">RFC3424</a>] requires a limited scope, this document only covers SCTP
endpoints dealing with legacy constraints as described in <a href="#section-3">Section 3</a>.
It doesn't cover generic tunneling endpoints.
Obviously, the exit strategy is to use hosts supporting SCTP natively
and middleboxes supporting SCTP as specified in [<a href="#ref-BEHAVE" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation"">BEHAVE</a>] and
[<a href="#ref-NATSUPP" title=""Stream Control Transmission Protocol (SCTP) Network Address Translation Support"">NATSUPP</a>].
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. SCTP over UDP</span>
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a>. Architectural Considerations</span>
UDP-encapsulated SCTP is normally communicated between SCTP stacks
using the IANA-assigned UDP port number 9899 (sctp-tunneling) on both
ends. There are circumstances where other ports may be used on
either end: As stated earlier, implementations in the application
space might be required to use ports other than the registered port.
Since NAT boxes might change UDP port numbers, the receiver might
observe other UDP port numbers than were used by the sender.
Discovery of alternate ports is outside of the scope of this
document, but this section describes considerations for SCTP stack
design in light of their potential use.
Each SCTP stack uses a single local UDP encapsulation port number as
the destination port for all its incoming SCTP packets. While the
<span class="grey">Tuexen & Stewart Standards Track [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
uniqueness of the local UDP encapsulation port number is not
necessarily required for the protocol, this greatly simplifies
implementation design, since different ports for each address would
require a sender implementation to choose the appropriate port while
doing source address selection. Using a single local UDP
encapsulation port number per host is not possible if the SCTP stack
is implemented as part of each application, there are multiple
applications, and some of the applications want to use the same IP
address.
An SCTP implementation supporting UDP encapsulation MUST maintain a
remote UDP encapsulation port number per destination address for each
SCTP association. Again, because the remote stack may be using ports
other than the well-known port, each port may be different from each
stack. However, because of remapping of ports by NATs, the remote
ports associated with different remote IP addresses may not be
identical, even if they are associated with the same stack.
Implementation note: Because the well-known port might not be used,
implementations need to allow other port numbers to be specified as a
local or remote UDP encapsulation port number through APIs.
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a>. Packet Format</span>
To encapsulate an SCTP packet, a UDP header as defined in [<a href="./rfc0768" title=""User Datagram Protocol"">RFC0768</a>]
is inserted between the IP header as defined in [<a href="./rfc0791" title=""Internet Protocol"">RFC0791</a>] and the
SCTP common header as defined in [<a href="./rfc4960" title=""Stream Control Transmission Protocol"">RFC4960</a>].
Figure 1 shows the packet format of an encapsulated SCTP packet when
IPv4 is used.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv4 Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Common Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1: An SCTP/UDP/IPv4 Packet
<span class="grey">Tuexen & Stewart Standards Track [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
The packet format for an encapsulated SCTP packet when using IPv6 as
defined in [<a href="./rfc2460" title=""Internet Protocol, Version 6 (IPv6) Specification"">RFC2460</a>] is shown in Figure 2. Please note that the
number m of IPv6 extension headers can be 0.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Base Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Extension Header #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IPv6 Extension Header #m |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Common Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SCTP Chunk #n |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: An SCTP/UDP/IPv6 Packet
<span class="h3"><a class="selflink" id="section-5.3" href="#section-5.3">5.3</a>. Encapsulation Procedure</span>
Within the UDP header, the source port MUST be the local UDP
encapsulation port number of the SCTP stack, and the destination port
MUST be the remote UDP encapsulation port number maintained for the
association and the destination address to which the packet is sent
(see <a href="#section-5.1">Section 5.1</a>).
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
header.
The SCTP checksum MUST be computed for IPv4 and IPv6, and the UDP
checksum SHOULD be computed for IPv4 and IPv6. (See [<a href="./rfc0768" title=""User Datagram Protocol"">RFC0768</a>]
regarding IPv4; see [<a href="./rfc2460" title=""Internet Protocol, Version 6 (IPv6) Specification"">RFC2460</a>] and [<a href="./rfc6936" title=""Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums"">RFC6936</a>] regarding IPv6.)
Although UDP with a zero checksum over IPv6 is allowed under certain
constraints [<a href="./rfc6936" title=""Applicability Statement for the Use of IPv6 UDP Datagrams with Zero Checksums"">RFC6936</a>], this document does not specify mechanisms for
this mode. Deployed support may be limited; also, at the time of
writing, the use of a zero UDP checksum would be counter to the goal
of legacy NAT traversal.
<span class="grey">Tuexen & Stewart Standards Track [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
<span class="h3"><a class="selflink" id="section-5.4" href="#section-5.4">5.4</a>. Decapsulation Procedure</span>
When an encapsulated packet is received, the UDP header is removed.
Then, the generic lookup is performed, as done by an SCTP stack
whenever a packet is received, to find the association for the
received SCTP packet. After finding the SCTP association (which
includes checking the verification tag), the UDP source port MUST be
stored as the encapsulation port for the destination address the SCTP
packet is received from (see <a href="#section-5.1">Section 5.1</a>).
When a non-encapsulated SCTP packet is received by the SCTP stack,
the encapsulation of outgoing packets belonging to the same
association and the corresponding destination address MUST be
disabled.
<span class="h3"><a class="selflink" id="section-5.5" href="#section-5.5">5.5</a>. ICMP Considerations</span>
When receiving ICMP or ICMPv6 response packets, there might not be
enough bytes in the payload to identify the SCTP association that the
SCTP packet triggering the ICMP or ICMPv6 packet belongs to. If a
received ICMP or ICMPv6 packet cannot be related to a specific SCTP
association or the verification tag cannot be verified, it MUST be
discarded silently. In particular, this means that the SCTP stack
MUST NOT rely on receiving ICMP or ICMPv6 messages. Implementation
constraints could prevent processing received ICMP or ICMPv6
messages.
If received ICMP or ICMPv6 messages are processed, the following
mapping SHOULD apply:
1. ICMP messages with type 'Destination Unreachable' and code 'Port
Unreachable' SHOULD be treated as ICMP messages with type
'Destination Unreachable' and code 'Protocol Unreachable'. See
[<a href="./rfc0792" title=""Internet Control Message Protocol"">RFC0792</a>] for more details.
2. ICMPv6 messages with type 'Destination Unreachable' and code
'Port Unreachable' SHOULD be treated as ICMPv6 messages with type
'Parameter Problem' and code 'unrecognized Next Header type
encountered'. See [<a href="./rfc4443" title=""Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification"">RFC4443</a>] for more details.
<span class="h3"><a class="selflink" id="section-5.6" href="#section-5.6">5.6</a>. Path MTU Considerations</span>
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
header. If it stops encapsulating them, the Path MTU SHOULD be
increased by the size of the UDP header.
<span class="grey">Tuexen & Stewart Standards Track [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
When performing Path MTU discovery as described in [<a href="./rfc4820" title=""Padding Chunk and Parameter for the Stream Control Transmission Protocol (SCTP)"">RFC4820</a>] and
[<a href="./rfc4821" title=""Packetization Layer Path MTU Discovery"">RFC4821</a>], 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
<a href="#section-5.5">Section 5.5</a>.
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
be used. In this case, an implementation-specific value should be
used instead.
<span class="h3"><a class="selflink" id="section-5.7" href="#section-5.7">5.7</a>. Handling of Embedded IP Addresses</span>
When using UDP encapsulation for legacy NAT traversal, IP addresses
that might require translation MUST NOT be put into any SCTP packet.
This means that a multihomed SCTP association is set up initially as
a single-homed one, and the protocol extension [<a href="./rfc5061" title=""Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration"">RFC5061</a>] in
combination with [<a href="./rfc4895" title=""Authenticated Chunks for the Stream Control Transmission Protocol (SCTP)"">RFC4895</a>] is used to add the other addresses. Only
wildcard addresses are put into the SCTP packet.
When addresses are changed during the lifetime of an association, the
protocol extension [<a href="./rfc5061" title=""Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration"">RFC5061</a>] MUST be used with wildcard addresses
only. If an SCTP endpoint receives an ABORT with the T-bit set, it
MAY use this as an indication that the addresses seen by the peer
might have changed.
<span class="h3"><a class="selflink" id="section-5.8" href="#section-5.8">5.8</a>. Explicit Congestion Notification (ECN) Considerations</span>
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 MUST NOT be changed during sending and receiving.
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Socket API Considerations</span>
This section describes how the socket API defined in [<a href="./rfc6458" title=""Sockets API Extensions for the Stream Control Transmission Protocol (SCTP)"">RFC6458</a>] needs
to be extended to provide a way for the application to control the
UDP encapsulation.
Please note that this section is informational only.
A socket API implementation based on [<a href="./rfc6458" title=""Sockets API Extensions for the Stream Control Transmission Protocol (SCTP)"">RFC6458</a>] is extended by
supporting one new read/write socket option.
<span class="grey">Tuexen & Stewart Standards Track [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
<span class="h3"><a class="selflink" id="section-6.1" href="#section-6.1">6.1</a>. Get or Set the Remote UDP Encapsulation Port Number</span>
(SCTP_REMOTE_UDP_ENCAPS_PORT)
This socket option can be used to set and retrieve the UDP
encapsulation port number. This allows an endpoint to encapsulate
initial packets.
struct sctp_udpencaps {
sctp_assoc_t sue_assoc_id;
struct sockaddr_storage sue_address;
uint16_t sue_port;
};
sue_assoc_id: This parameter is ignored for one-to-one style
sockets. For one-to-many style sockets, the application may fill
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.
sue_address: This specifies which address is of interest. If a
wildcard address is provided, it applies only to future paths.
sue_port: The UDP port number in network byte order; used as the
destination port number for UDP encapsulation. Providing a value
of 0 disables UDP encapsulation.
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>. IANA Considerations</span>
This document refers to the already assigned UDP port 9899 (sctp-
tunneling). IANA has updated this assignment to refer to this
document. As per [<a href="./rfc6335" title=""Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry"">RFC6335</a>], the Assignee is [IESG] and the Contact
is [IETF_Chair].
Please note that the TCP port 9899 (sctp-tunneling) assignment is not
needed anymore, and IANA has removed this TCP port number assignment
and marked TCP port 9899 as "Reserved".
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. Security Considerations</span>
Encapsulating SCTP into UDP does not add any additional security
considerations to the ones given in [<a href="./rfc4960" title=""Stream Control Transmission Protocol"">RFC4960</a>] and [<a href="./rfc5061" title=""Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration"">RFC5061</a>].
Firewalls inspecting SCTP packets must also be aware of the
encapsulation and apply corresponding rules to the encapsulated
packets.
An attacker might send a malicious UDP packet towards an SCTP
endpoint to change the encapsulation port for a single remote address
of a particular SCTP association. However, as specified in
<span class="grey">Tuexen & Stewart Standards Track [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
<a href="#section-5.4">Section 5.4</a>, this requires the usage of one of the two negotiated
verification tags. This protects against blind attackers the same
way as described in [<a href="./rfc4960" title=""Stream Control Transmission Protocol"">RFC4960</a>] for SCTP over IPv4 or IPv6. Non-blind
attackers can affect SCTP association using the UDP encapsulation
described in this document in the same way as SCTP associations not
using the UDP encapsulation of SCTP described here.
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>. Acknowledgments</span>
The authors wish to thank Stewart Bryant, Dave Crocker, Gorry
Fairhurst, Tero Kivinen, Barry Leiba, Pete Resnick, Martin
Stiemerling, Irene Ruengeler, and Dan Wing for their invaluable
comments.
<span class="h2"><a class="selflink" id="section-10" href="#section-10">10</a>. References</span>
<span class="h3"><a class="selflink" id="section-10.1" href="#section-10.1">10.1</a>. Normative References</span>
[<a id="ref-RFC0768">RFC0768</a>] Postel, J., "User Datagram Protocol", STD 6, <a href="./rfc768">RFC 768</a>,
August 1980.
[<a id="ref-RFC0791">RFC0791</a>] Postel, J., "Internet Protocol", STD 5, <a href="./rfc791">RFC 791</a>, September
1981.
[<a id="ref-RFC0792">RFC0792</a>] Postel, J., "Internet Control Message Protocol", STD 5,
<a href="./rfc792">RFC 792</a>, September 1981.
[<a id="ref-RFC2119">RFC2119</a>] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", <a href="https://www.rfc-editor.org/bcp/bcp14">BCP 14</a>, <a href="./rfc2119">RFC 2119</a>, March 1997.
[<a id="ref-RFC2460">RFC2460</a>] Deering, S.E. and R.M. Hinden, "Internet Protocol, Version
6 (IPv6) Specification", <a href="./rfc2460">RFC 2460</a>, December 1998.
[<a id="ref-RFC4443">RFC4443</a>] Conta, A., Deering, S., and M. Gupta, "Internet Control
Message Protocol (ICMPv6) for the Internet Protocol
Version 6 (IPv6) Specification", <a href="./rfc4443">RFC 4443</a>, March 2006.
[<a id="ref-RFC4820">RFC4820</a>] Tuexen, M., Stewart, R., and P. Lei, "Padding Chunk and
Parameter for the Stream Control Transmission Protocol
(SCTP)", <a href="./rfc4820">RFC 4820</a>, March 2007.
[<a id="ref-RFC4821">RFC4821</a>] Mathis, M. and J. Heffner, "Packetization Layer Path MTU
Discovery", <a href="./rfc4821">RFC 4821</a>, March 2007.
[<a id="ref-RFC4895">RFC4895</a>] Tuexen, M., Stewart, R., Lei, P., and E. Rescorla,
"Authenticated Chunks for the Stream Control Transmission
Protocol (SCTP)", <a href="./rfc4895">RFC 4895</a>, August 2007.
<span class="grey">Tuexen & Stewart Standards Track [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
[<a id="ref-RFC4960">RFC4960</a>] Stewart, R., "Stream Control Transmission Protocol", <a href="./rfc4960">RFC</a>
<a href="./rfc4960">4960</a>, September 2007.
[<a id="ref-RFC5061">RFC5061</a>] Stewart, R., Xie, Q., Tuexen, M., Maruyama, S., and M.
Kozuka, "Stream Control Transmission Protocol (SCTP)
Dynamic Address Reconfiguration", <a href="./rfc5061">RFC 5061</a>, September
2007.
<span class="h3"><a class="selflink" id="section-10.2" href="#section-10.2">10.2</a>. Informative References</span>
[<a id="ref-BEHAVE">BEHAVE</a>] Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation",
Work in Progress, February 2013.
[<a id="ref-NATSUPP">NATSUPP</a>] Stewart, R., Tuexen, M., and I. Ruengeler, "Stream Control
Transmission Protocol (SCTP) Network Address Translation
Support", Work in Progress, February 2013.
[<a id="ref-RFC3424">RFC3424</a>] Daigle, L. IAB, "IAB Considerations for UNilateral Self-
Address Fixing (UNSAF) Across Network Address
Translation", <a href="./rfc3424">RFC 3424</a>, November 2002.
[<a id="ref-RFC6335">RFC6335</a>] Cotton, M., Eggert, L., Touch, J., Westerlund, M., and S.
Cheshire, "Internet Assigned Numbers Authority (IANA)
Procedures for the Management of the Service Name and
Transport Protocol Port Number Registry", <a href="https://www.rfc-editor.org/bcp/bcp165">BCP 165</a>, <a href="./rfc6335">RFC</a>
<a href="./rfc6335">6335</a>, August 2011.
[<a id="ref-RFC6458">RFC6458</a>] Stewart, R., Tuexen, M., Poon, K., Lei, P., and V.
Yasevich, "Sockets API Extensions for the Stream Control
Transmission Protocol (SCTP)", <a href="./rfc6458">RFC 6458</a>, December 2011.
[<a id="ref-RFC6936">RFC6936</a>] Fairhurst, G. and M. Westerlund, "Applicability Statement
for the Use of IPv6 UDP Datagrams with Zero Checksums",
<a href="./rfc6936">RFC 6936</a>, April 2013.
<span class="grey">Tuexen & Stewart Standards Track [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc6951">RFC 6951</a> UDP Encapsulation of SCTP Packets May 2013</span>
Authors' Addresses
Michael Tuexen
Muenster University of Applied Sciences
Stegerwaldstrasse 39
48565 Steinfurt
DE
EMail: tuexen@fh-muenster.de
Randall R. Stewart
Adara Networks
Chapin, SC 29036
US
EMail: randall@lakerest.net
Tuexen & Stewart Standards Track [Page 12]
</pre>
|