RFC 7837

IPv6 Destination Option for Congestion Exposure (ConEx)

๐Ÿ“… published May 2016, from ietf

RFC 7837: IPv6 Destination Option for Congestion Exposure (ConEx) ๐ŸŽ€

Okay bestie, this one is from the IETF, published in May 2016 ๐ŸŒธ. The authors are S. Krishnan (Ericsson), M. Kuehlewind (ETH Zurich), B. Briscoe (Simula Research Laboratory), and C. Ralli (Telefonica). It's an Experimental doc (ISSN 2070-1721) ๐Ÿงช, and the title block doesn't list anything it obsoletes or updates.

Abstract โœจ

Okay so, Congestion Exposure (ConEx) is a mechanism where senders tell the network about the congestion their packets ran into earlier in the same flow ๐Ÿ“ก. This doc specifies an IPv6 destination option that can carry ConEx markings in IPv6 datagrams ๐Ÿ’–.

Status of This Memo ๐Ÿ“œ

This document is not an Internet Standards Track specification ๐Ÿ™…โ€โ™€๏ธ. It's published so people can examine it, implement it experimentally, and evaluate it ๐Ÿ”ฌ.

It defines an Experimental Protocol for the Internet community. It's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community ๐Ÿซถ. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved document is a candidate for any level of Internet Standard, so check Section 2 of RFC 5741 for the details ๐Ÿค“.

For info on the current status, any errata, and how to give feedback, go to http://www.rfc-editor.org/info/rfc7837 ๐Ÿ”—.

Copyright (c) 2016 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 (http://trustee.ietf.org/license-info) as in effect on the date of publication. Please actually read these, because they spell out your rights and restrictions for 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 they come without warranty as described in the Simplified BSD License โš–๏ธ.

Table of Contents ๐Ÿ—‚๏ธ

1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
2.  Conventions Used in This Document . . . . . . . . . . . . . .   3
3.  Requirements for the Coding of ConEx in IPv6  . . . . . . . .   4
4.  ConEx Destination Option (CDO)  . . . . . . . . . . . . . . .   5
5.  Implementation in the Fast Path of ConEx-Aware Routers  . . .   8
6.  Tunnel Processing . . . . . . . . . . . . . . . . . . . . . .   8
7.  Compatibility with Use of IPsec . . . . . . . . . . . . . . .   9
8.  Mitigating Flooding Attacks by Using Preferential Drop  . . .   9
9.  Security Considerations . . . . . . . . . . . . . . . . . . .  11
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . .  11
11. References  . . . . . . . . . . . . . . . . . . . . . . . . .  11
  11.1.  Normative References . . . . . . . . . . . . . . . . . .  11
  11.2.  Informative References . . . . . . . . . . . . . . . . .  12
Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  13
Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  13

1. Introduction ๐Ÿฆ‹

So ConEx is defined in [RFC7713]. It's the mechanism where senders tell the network about congestion their packets hit earlier in the same flow ๐Ÿ“ก. This doc specifies an IPv6 destination option [RFC2460] that can be used to do ConEx markings in IPv6 datagrams ๐ŸŽ€.

This doc is where the ConEx wire protocol in IPv6 gets specified ๐Ÿ”ง. The ConEx info can be used by any network element on the path for stuff like traffic management or egress policing ๐Ÿšฆ. This info might also get used by an audit function that checks whether the sender's signaling is legit ๐Ÿ•ต๏ธโ€โ™€๏ธ. And each transport protocol that supports ConEx signaling will need to precisely specify when it sets ConEx markings. For example, the TCP behavior is specified in [RFC7786] ๐Ÿ’œ.

This doc is ConEx for IPv6 only ๐Ÿ™…โ€โ™€๏ธ. IPv4 headers have space limits, and there's a risk that a middlebox strips options in IPv4. So the main goal of the working group was to specify ConEx in IPv6, for experimentation ๐Ÿงช.

This spec is experimental so the IETF can figure out whether making the ConEx Signal a destination option meets the requirements in this doc. It also lets them evaluate the proposed encoding of the ConEx Signals described in [RFC7713] ๐Ÿ”ฌ.

The experiment is expected to last no less than two years from publication of this doc, because infrastructure has to be set up before anyone can determine the outcome ๐Ÿ—“๏ธ. Experimenting with ConEx needs IPv6 traffic. Even though IPv6 traffic is growing, the traffic mix on IPv6 is still very different from IPv4 ๐ŸŒ. So it might take longer to find a good test scenario where only IPv6 traffic is managed with ConEx ๐Ÿฅฒ.

2. Conventions Used in This Document ๐Ÿ“

Okay the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this doc are to be read as described in [RFC2119] ๐Ÿซถ.

3. Requirements for the Coding of ConEx in IPv6 ๐Ÿ’…

A set of requirements for an ideal concrete ConEx wire protocol is in [RFC7713] ๐Ÿ“‹. The ConEx working group knew it would be hard to find an IPv6 encoding that satisfies all of them ๐Ÿ˜ญ. So the choice in this doc to put ConEx info in a destination option aims at the requirements that constrain where ConEx info can go ๐ŸŽฏ:

  • R-1: The marking mechanism needs to be visible to all ConEx-capable nodes on the path.
  • R-2: The mechanism needs to be able to traverse nodes that do not understand the markings. This is required to ensure that ConEx can be incrementally deployed over the Internet.
  • R-3: The presence of the marking mechanism should not significantly alter the processing of the packet. This is required to ensure that ConEx-Marked packets do not face any undue delays or drops due to a badly chosen mechanism.
  • R-4: The markings should be immutable once set by the sender. At the very least, any tampering should be detectable.

Based on these requirements, four solutions for putting ConEx info in the IPv6 header were looked at: hop-by-hop options, destination options, using IPv6 header bits (from the flow label), and new extension headers ๐Ÿค”. After weighing them, the ConEx working group decided a destination option would best address these requirements ๐Ÿ†.

Hop-by-hop options would have been the best solution for carrying ConEx markings if they had met R-3 โณ. The 6MAN working group has work ongoing to address exactly this issue [HBH-HEADER] ๐Ÿ› ๏ธ. If that new behavior lands, it would address R-3 and make hop-by-hop options the preferred solution for carrying ConEx markings ๐ŸŒŸ.

Choosing a destination option doesn't necessarily satisfy the on-path visibility requirement, because it can be encapsulated by additional IP header(s) ๐Ÿซฃ. So ConEx-aware network devices, including policy or audit devices, might have to follow the chaining (extension-) headers into the inner IP headers to find the ConEx info ๐Ÿ”. This choice was a compromise between fast-path performance of ConEx-aware network nodes and visibility, as discussed in Section 5 โš–๏ธ.

Heads up: the IPv6 specification [RFC2460] does not require or expect intermediate nodes to inspect destination options such as the ConEx Destination Option (CDO). So ConEx-aware intermediate nodes following this spec need updated extension header processing code to be able to read the destination options ๐Ÿšจ.

4. ConEx Destination Option (CDO) โœจ

okay bestie, the CDO is a destination option that ConEx-aware senders can pop into their IPv6 datagrams ๐Ÿ’Œ its whole job is to tell ConEx-aware nodes on the path about the congestion that earlier packets in the same flow ran into, or how risky things look for congestion coming up ๐Ÿ”ฎ and it has no alignment requirements, so it can sit wherever it fits ๐Ÿฆ‹

    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Option Type  | Option Length |X|L|E|C|  res  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                 Figure 1: ConEx Destination Option Layout

Option Type

8-bit identifier of the type of option ๐ŸŽ€ it's set to 30 (0x1E), which is allocated for experimental work ๐Ÿงช

Option Length

8-bit unsigned integer ๐Ÿ”ข it's the length of the option in octets, not counting the Option Type and Option Length fields. It's set to 1 ๐Ÿ’…

X Bit

okay so when this bit is set, the transport sender is using ConEx with this packet โœจ if it isn't set, the sender is not using ConEx with this packet ๐Ÿ™ˆ

L Bit

when this bit is set, the transport sender has experienced a loss ๐Ÿ’€

E Bit

when this bit is set, the transport sender has experienced congestion signaled using Explicit Congestion Notification (ECN) [RFC3168] ๐ŸŒธ

C Bit

when this bit is set, the transport sender is building up congestion credit in the audit function ๐Ÿ’ฐ

Reserved (res)

these four bits aren't used in the current specification ๐Ÿซถ the sender sets them to zero, and the receiver just ignores them ๐Ÿงš

All packets sent over a ConEx-capable TCP connection, or belonging to the same ConEx-capable flow, MUST carry the CDO ๐Ÿ”ฅ the chg bit (the third-highest-order bit) in the CDO Option Type field is set to zero, which means the CDO option is immutable ๐Ÿ”’ ConEx-aware network devices read the flags, but ALL network devices MUST forward the CDO unaltered ๐Ÿ’–

The CDO SHOULD be placed as the first option in the Destination Option header, before the AH [RFC4302] and/or Encapsulating Security Payload (ESP) [RFC4303] (if present) โœจ the IPsec Authentication Header (AH) MAY be used to verify that the CDO has not been modified ๐Ÿ›ก๏ธ

If the X bit is zero, the other three bits are undefined, so they MUST be ignored and forwarded unchanged by network nodes ๐Ÿซ  an X bit of zero means the connection is ConEx-capable but this packet MUST NOT be counted when working out ConEx information in an audit function ๐Ÿ™…โ€โ™€๏ธ this can happen when no congestion feedback is (currently) available, e.g., in TCP when one endpoint has been receiving data but has only been sending pure ACKs (no user data) for a while ๐Ÿ“ pure ACKs don't advance the sequence number, so the TCP endpoint receiving them can't reliably tell whether any were lost due to congestion ๐Ÿ˜ญ and pure TCP ACKs can't be ECN-marked either [RFC3168] ๐Ÿšซ

If the X bit is set, any of the other three bits (L, E, or C) might be set too ๐Ÿ‘€ whenever one of those bits is set, the number of bytes carried by this IP packet (including the IP header that directly encapsulates the CDO and everything that IP header encapsulates) SHOULD be counted to determine congestion or credit information ๐Ÿ“Š in IPv6, it's easy: add the number 40 (the length of the IPv6 header in bytes) to the value in the Payload Length field of the IPv6 header โœจ

The credit signal represents the potential for congestion โšก if a congestion event happens, a matching amount of credit gets consumed, as outlined in [RFC7713] ๐Ÿ’ธ so a ConEx-enabled sender SHOULD, therefore, signal enough credit in advance of any congestion event to cover the (estimated maximum) number of lost or CE-marked bytes that could happen in that event ๐ŸŒˆ how big that estimate is depends on the heuristics and the aggressiveness the sender uses when choosing its sending rate (congestion control) ๐Ÿง  the absolute worst case is that every packet in flight gets lost or CE-marked, so that's the most conservative estimate of congestion risk ๐Ÿ˜ฑ after a congestion event, if the sender wants to take the same risk again, it just needs to replace the consumed credit, because non-consumed credit doesn't expire โณ for TCP, this is described in detail in [RFC7786] ๐Ÿฆ‹

If the L or E bit is set, a congestion signal (a loss or an ECN mark, respectively) was previously experienced by the same connection ๐Ÿซง

In principle, all three bits (L, E, or C) might be set in the same packet ๐Ÿคฏ in that case, the packet size MUST be counted once for each respective ConEx information counter ๐Ÿ”ข

If a network node extracts ConEx information from a connection, it's expected to hold that information in bytes ๐Ÿซถ for example, it can compare the total number of bytes sent with the number of bytes sent with ConEx congestion marks (L or E) to figure out the current whole-path congestion level ๐Ÿ›ฃ๏ธ so a ConEx-aware node that processes the CDO MUST use the Payload Length field of the preceding IPv6 header for byte-based counting ๐Ÿ“ when a ratio is measured and equally sized packets can be assumed, counting packets (instead of bytes) should give the same result ๐Ÿค but an audit function needs to know this estimate can be quite wrong if, say, differently sized packets are sent, so it isn't reliable ๐Ÿ™ƒ

All remaining bits in the CDO are reserved for future use (they're currently the last four bits of the eight-bit option space) ๐ŸŽ a ConEx sender SHOULD set the reserved bits in the CDO to zero ๐Ÿงธ other nodes MUST ignore these bits, and ConEx-aware intermediate nodes MUST forward them unchanged, whatever their values are ๐Ÿ’œ they MAY log the presence of a non-zero Reserved field ๐Ÿ“

The CDO only applies to unicast or anycast packets (for the reasoning, see the note about item J on multicast at the end of Section 3.3 of [RFC7713]) ๐Ÿ“ฎ a ConEx sender MUST NOT send a packet with the CDO to a multicast address ๐Ÿšท ConEx-capable network nodes MUST treat a multicast packet with the X flag set the same as an equivalent packet without the CDO, and they SHOULD forward it unchanged ๐ŸŒŠ

As stated in [RFC7713] (see Section 3.3, item N on network-layer requirements), protocol specs should describe any warning or error messages relevant to the encoding ๐Ÿ“ฃ and there are no warning or error messages associated with the CDO ๐Ÿ™Œ

5. Implementation in the Fast Path of ConEx-Aware Routers ๐ŸŽ๏ธ

the ConEx information is encoded into a destination option so it doesn't hurt forwarding performance on non-ConEx-aware nodes along the path ๐Ÿ’จ destination options usually aren't processed by routers, so the CDO doesn't change fast-path processing of the datagram on non-ConEx-aware routers ๐Ÿ™Œ they aren't pushed into the slow path toward the control plane for exception processing ๐ŸขโŒ

ConEx-aware nodes still need to process the CDO without seriously hurting forwarding ๐Ÿ’… to make that possible, ConEx-aware routers need to quickly check whether the CDO is present and process it if so ๐Ÿ” that works best when the CDO sits in a pretty predictable spot ๐Ÿ“ so to help forwarding on ConEx-aware routers, ConEx-aware senders that send IPv6 datagrams with the CDO SHOULD place the CDO as the first destination option in the Destination Option header ๐Ÿฅ‡

6. Tunnel Processing ๐Ÿš‡

as with any destination option, an ingress tunnel endpoint normally won't copy the CDO when it adds an encapsulating outer IP header ๐Ÿ™…โ€โ™€๏ธ in general, an ingress tunnel SHOULD NOT copy the CDO to the outer header, because that would change the number of bytes that get counted ๐Ÿงฎ however, it MAY copy the CDO to the outer header to help subsequent on-path ConEx functions see it, if the tunnel ingress and the ConEx nodes are coordinated ๐Ÿค this trades off ConEx performance against tunnel processing performance โš–๏ธ

an egress tunnel endpoint SHOULD ignore any CDO in the outer header when it decapsulates an outer IP header ๐ŸŽ€ the information in an inner CDO is always considered correct, even if it differs from the outer CDO ๐Ÿ‘‘ so the decapsulator can strip the outer CDO without comparing it to the inner one ๐Ÿงน a decapsulator MAY compare the two and MAY log any case where they differ ๐Ÿ”Ž but the packet MUST be forwarded no matter what anomaly shows up, since an outer CDO is only a performance optimization ๐Ÿš€

a network node that assesses ConEx information SHOULD search through encapsulated IP headers until it finds a CDO ๐Ÿ•ต๏ธโ€โ™€๏ธ at any specific network location, the maximum search depth needed is likely to be the same for all packets between a given set of tunnel endpoints ๐Ÿ“

7. Compatibility with Use of IPsec ๐Ÿ”

a network-based attacker could change ConEx information to trick an audit function in a downstream network into discarding packets ๐Ÿ˜ค if the endpoints use the IPsec Authentication Header (AH) [RFC2460] to detect changes to IP headers along the path, AH will also detect changes to the CDO header ๐Ÿ›ก๏ธ still, AH protection will rarely need to be added for ConEx, because attacks by one network on another are rare when they're traceable ๐Ÿ•ต๏ธ other known network-on-network attacks, like TTL expiry attacks, are more damaging to the innocent network (because the ConEx audit discards silently) and harder to trace (because TTL is meant to change, whereas the CDO is not) ๐Ÿ’€

Section 4 specifies that the CDO is placed in the Destination Option header before the AH and/or ESP headers, so ConEx information stays in the clear if ESP is being used to encrypt other transmitted information in transport mode [RFC4301] ๐Ÿ™ˆ in general, a Destination Option header inside an IPv6 packet can be placed in one of two positions: either before the Routing header, or after the ESP/AH headers, as described in Section 4.1 of [RFC2460] ๐Ÿงฉ if the CDO were placed in the latter position and an ESP header was used with encryption, ConEx-aware intermediate nodes wouldn't be able to view and interpret the CDO, which would make it useless ๐Ÿ˜ญ

the IPv6 protocol architecture currently doesn't provide a way for new headers to be copied to the outer IP header ๐Ÿ™ƒ so if IPsec encryption is used in tunnel mode, ConEx information can't be accessed across the extent of the ESP tunnel ๐Ÿšซ

the destination IP stack usually won't process the CDO, so the sender can send a CDO without checking whether the receiver will understand it ๐Ÿซถ the CDO MUST still be forwarded to the destination IP stack, because the destination might check the integrity of the whole packet, whether or not it understands ConEx ๐Ÿ”๐Ÿ’–

8. Mitigating Flooding Attacks by Using Preferential Drop โœจ

The ideas in this section are aspirational, not essential to using ConEx for more general traffic management ๐Ÿ’…. Still, once CDO information is present, the CDO header could optionally also be used in the data plane of any IP-aware forwarding node to help mitigate flooding attacks ๐Ÿ›ก๏ธ.

Heads up, bestie: ConEx is an experimental protocol ๐Ÿงช. Any mechanism that reacts to information from ConEx needs to be tested in experiments too. That's especially true (or extra true ๐Ÿ˜ญ) for the preferential drop mechanism below.

Dropping packets preferentially is a good move against flooding attacks, because ConEx-Marked packets can be assumed to already be restricted by a ConEx ingress policer, as described in [RFC7713] ๐ŸŒธ. So the following ConEx-based preferential dropping scheme is proposed ๐ŸŽ€:

If a router queue is under a very high load and has to drop arriving packets, it MAY preferentially drop packets within the same DiffServ Per-Hop Behavior (PHB), using the preference order in Table 1 (1 means drop first) ๐Ÿ“. If a router does preferential drop based on ConEx, it SHOULD also support ECN marking ๐ŸŒˆ. Preferential dropping can be tricky to implement on some hardware, but routers at the egress of a network SHOULD implement preferential drop based on ConEx markings, if nowhere else ๐Ÿ‘‘. That one is stronger than the MAY above, so pay attention ๐Ÿซถ.

                 +----------------------+----------------+
                 |                      |   Preference   |
                 +----------------------+----------------+
                 | Not-ConEx or no CDO  | 1 (drop first) |
                 | X (but not L,E or C) |       2        |
                 | X and L,E or C       |       3        |
                 +----------------------+----------------+

                Table 1: Drop Preference for ConEx Packets

A flooding attack is basically about congestion of a resource ๐ŸŒŠ. As load piles up on a victim, upstream queues grow, and honest sources have to pre-load packets with a higher fraction of ConEx marks ๐Ÿ’œ.

If downstream queues support ECN marking, preferential dropping gives the most benefit ๐Ÿ”ฅ. The reason is that if a queue is so congested that it drops traffic, it will be CE-marking 100% of the traffic it forwards. So honest sources will be sending 100% ConEx E-marked packets, and they'll be subject to rate-limiting at an ingress policer ๐ŸŽ€.

Senders under malicious control have two options ๐Ÿ˜ˆ. They can do the same as honest sources and get rate-limited at ingress, or they can understate congestion and not set the E bit ๐Ÿ™ˆ.

If the preferential drop ranking is implemented on queues, those queues will hold E/L-marked traffic until last ๐Ÿงš. So traffic from malicious sources will all be dropped first, automatically โœจ. Either way, malicious sources cannot send more than honest sources ๐Ÿ’–.

So ConEx-based preferential dropping, as described above, discriminates against attack traffic when it's part of the overall policing framework described in [RFC7713] ๐Ÿฆ‹.

9. Security Considerations ๐Ÿ”

[RFC7713] describes the overall audit framework for making sure ConEx markings truly reflect actual path congestion ๐Ÿ•ต๏ธโ€โ™€๏ธ. [CONEX-AUDIT] gives further details on handling audit signals ๐Ÿ“‹. This section focuses purely on the security of the encoding chosen for ConEx markings ๐Ÿงฉ.

The CDO Option Type is defined with a chg bit set to zero, as described in Section 4 ๐ŸŽ€. If IPsec AH is used, a zero chg bit causes AH to cover the CDO option, so its end-to-end integrity can be verified, as explained in Section 4 ๐Ÿ”’.

This document specifies that the Reserved field in the CDO MUST be ignored and forwarded unchanged, even if it does not contain all zeroes ๐Ÿ˜ฑ. The Reserved field also has to sit outside the Encapsulating Security Payload (ESP), at least in transport mode (see Section 7) ๐Ÿ’€. That means the sender could use the Reserved field as a 4-bit-per-packet covert channel to send information to an on-path node outside the control of IPsec ๐Ÿ‘€. But a covert channel is only a concern if it can get around IPsec in tunnel mode. In tunnel mode, ESP closes the covert channel, as outlined in Section 7 ๐Ÿซถโœจ.

10. IANA Considerations ๐ŸŒธ

The IPv6 ConEx destination option is used for carrying ConEx markings ๐Ÿ’–. This document uses the experimental option type 0x1E (as assigned in IANA's "Destination Options and Hop-by-Hop Options" registry), with the act bits set to 00 and the chg bit set to 0, to realize this option ๐Ÿงš. No further allocation action is required from IANA at this time ๐Ÿ“.

11. References ๐Ÿ“š

11.1. Normative References

11.2. Informative References

  • [CONEX-AUDIT] Wagner, D. and M. Kuehlewind, "Auditing of Congestion Exposure (ConEx) signals", Work in Progress, draft-wagner-conex-audit-02, April 2016.
  • [HBH-HEADER] Baker, F., "IPv6 Hop-by-Hop Options Extension Header", Work in Progress, draft-ietf-6man-hbh-header-handling-03, Marcy 2016.
  • [RFC7786] Kuehlewind, M., Ed. and R. Scheffenegger, "TCP Modifications for Congestion Exposure (ConEx)", RFC 7786, DOI 10.17487/RFC7786, May 2016, <http://www.rfc-editor.org/info/rfc7786>.

Acknowledgements ๐Ÿ™Œ

The authors would like to thank David Wagner, Marcelo Bagnulo, Ingemar Johansson, Joel Halpern, John Leslie, Martin Stiemerling, Robert Sparks, Ron Bonica, Brian Haberman, Kathleen Moriarty, Bob Hinden, Ole Troan, and Brian Carpenter for the discussions that made this document better ๐Ÿฅฐ.

Authors' Addresses ๐Ÿ’Œ

Suresh Krishnan Ericsson 8400 Blvd Decarie Town of Mount Royal, Quebec Canada

Email: suresh.krishnan@ericsson.com

Mirja Kuehlewind ETH Zurich

Email: mirja.kuehlewind@tik.ee.ethz.ch

Bob Briscoe Simula Research Laboratory

Email: ietf@bobbriscoe.net URI: http://bobbriscoe.net/

Carlos Ralli Ucendo Telefonica

Email: ralli@tid.es

๐Ÿ“ฆ where this page comes from