RFC 5320

The Subnetwork Encapsulation and Adaptation Layer (SEAL)

๐Ÿ“… published February 2010, from ietf

RFC 5320: The Subnetwork Encapsulation and Adaptation Layer (SEAL) โœจ

Part 1 of 6 ๐ŸŽ€

  • RFC number: 5320 ๐Ÿฆ‹
  • Title: The Subnetwork Encapsulation and Adaptation Layer (SEAL)
  • Author: F. Templin, Ed., from Boeing Research & Technology ๐Ÿงš
  • Stream: Independent Submission
  • Category: Experimental ๐Ÿ”ฅ
  • Date: February 2010
  • ISSN: 2070-1721
  • Obsoletes / Updates: the title block doesn't list anything this RFC obsoletes or updates ๐Ÿซถ

Abstract

okay so for this doc, a subnetwork is basically a virtual topology ๐ŸŒˆ that stretches across connected network regions with encapsulating border nodes at the edges. These virtual topologies can cover multiple IP and/or sub-IP layer forwarding hops, and that is where the drama starts ๐Ÿ’€. You can get failure modes from packet duplication, and from links with different Maximum Transmission Units (MTUs) ๐Ÿ˜ญ. This document specifies the Subnetwork Encapsulation and Adaptation Layer (SEAL), which is the thing that lets these virtual topologies work over all kinds of different underlying link technologies. iconic, honestly ๐Ÿ’…

Status of This Memo

this doc is not an Internet Standards Track specification ๐Ÿ™ˆ. It's being published so people can examine it, try out experimental implementations, and evaluate it.

This document defines an Experimental Protocol for the Internet community. It is a contribution to the RFC Series, and it's independent of any other RFC stream ๐ŸŒธ. The RFC Editor chose to publish it at their discretion and makes no statement about whether it's worth implementing or deploying. Documents the RFC Editor approves for publication are not a candidate for any level of Internet Standard, see Section 2 of RFC 5741 โœจ.

For info on the current status of this document, any errata, and how to send feedback, check http://www.rfc-editor.org/info/rfc5320 ๐Ÿ“

IESG Note

This RFC is not a candidate for any level of Internet Standard. ๐Ÿšซ

ok so the IETF is basically saying it doesn't know whether this RFC is fit for any purpose ๐Ÿ™ˆ. It especially wants you to know that the decision to publish was not based on IETF review of things like security, congestion control, or inappropriate interaction with deployed protocols ๐Ÿ’€. The RFC Editor chose to publish it at their discretion, so readers should be careful when judging whether it's worth implementing or deploying. For more info, see RFC 3932 ๐Ÿ“š.

Copyright (c) 2010 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) in effect on the date of publication of this document. Please review these documents carefully, because they describe your rights and restrictions with respect to this document ๐ŸŽ€.

Table of Contents ๐Ÿ“‘

   1. Introduction ....................................................4
      1.1. Motivation .................................................4
      1.2. Approach ...................................................6
   2. Terminology and Requirements ....................................6
   3. Applicability Statement .........................................7
   4. SEAL Protocol Specification - Tunnel Mode .......................8
      4.1. Model of Operation .........................................8
      4.2. ITE Specification .........................................10
           4.2.1. Tunnel Interface MTU ...............................10
           4.2.2. Accounting for Headers .............................11
           4.2.3. Segmentation and Encapsulation .....................12
           4.2.4. Sending Probes .....................................14
           4.2.5. Packet Identification ..............................15
           4.2.6. Sending SEAL Protocol Packets ......................15
           4.2.7. Processing Raw ICMPv4 Messages .....................15
           4.2.8. Processing SEAL-Encapsulated ICMPv4 Messages .......16
      4.3. ETE Specification .........................................17
           4.3.1. Reassembly Buffer Requirements .....................17
           4.3.2. IPv4-Layer Reassembly ..............................17
           4.3.3. Generating SEAL-Encapsulated ICMPv4
                  Fragmentation Needed Messages ......................18
           4.3.4. SEAL-Layer Reassembly ..............................19
           4.3.5. Delivering Packets to Upper Layers .................20
   5. SEAL Protocol Specification - Transport Mode ...................20
   6. Link Requirements ..............................................21
   7. End System Requirements ........................................21
   8. Router Requirements ............................................21
   9. IANA Considerations ............................................21
   10. Security Considerations .......................................21
   11. Related Work ..................................................22
   12. SEAL Advantages over Classical Methods ........................22
   13. Acknowledgments ...............................................24
   14. References ....................................................24
      14.1. Normative References .....................................24
      14.2. Informative References ...................................24
   Appendix A. Historic Evolution of PMTUD ...........................27
   Appendix B. Reliability Extensions ................................29

1. Introduction ๐Ÿฆ‹

okay so the Internet has been getting more and more mature, and people keep coming up with techniques that use virtual topologies (tunnels of one form or another, mostly) on top of a real network that runs the Internet Protocol (IP) [RFC0791][RFC2460] ๐ŸŒธ. These virtual topologies have elements that look like one hop in the virtual topology, but they're actually multiple IP or sub-IP layer hops under the hood ๐Ÿ™ˆ. Those hops often have really different properties, and the endpoints of the virtual hop usually can't even see them. This creates failure modes that current approaches don't handle well ๐Ÿ˜ญ.

IP encapsulation has long been considered the go-to way to build these virtual topologies ๐Ÿ’–. The catch is that adding an outer IP header shrinks the effective path MTU as seen by the IP layer ๐Ÿ’€. With IPv4, this smaller MTU can be dealt with using IPv4 fragmentation. But unmitigated in-the-network fragmentation has been found to be harmful, based on operational experience and studies run over many years [FRAG][FOLK][RFC4963] ๐Ÿฅ€. On top of that, classical path MTU discovery [RFC1191] has known operational issues, and in-the-network tunnels make those issues even worse [RFC2923][RFC4459] ๐Ÿ˜ฉ. The next subsections go into more detail on the motivation and the approach for fixing all this โœจ.

1.1. Motivation ๐Ÿ”

before we get to the approach, we need to understand the problems ๐Ÿง . In both the Internet and private-use networks today, IPv4 is everywhere as the Layer 3 protocol ๐ŸŒ. IPv4 basically has two main jobs: 1) addressing, and 2) a fragmentation and reassembly capability that's used to deal with links that have diverse MTUs. It's well known that IPv4 addressing is limited (which is why we have the bigger address space of IPv6), but there's also a lesser-known, growing consensus that other limitations might not be able to keep up with continued growth ๐Ÿ‘€.

First, the IPv4 header Identification field is only 16 bits long. That means at most 2^16 packets with the same (source, destination, protocol, Identification)-tuple can be active in the Internet at any given time ๐Ÿ˜ณ. Because high-speed links (like 1Gbps Ethernet) keep getting deployed, this number could soon be too small by several orders of magnitude ๐Ÿ“‰. There are also tons of known limitations with IPv4 fragmentation and reassembly, to the point that it's been called "harmful" in both classic and modern studies (cited above) ๐Ÿšซ. Specifically, IPv4 fragmentation can cause everything from minor annoyances (like slow-path processing in routers) to major integrity issues (like mis-association of fragments from multiple IP packets during reassembly) ๐Ÿ˜ฑ.

because of these perceived limitations, a fragmentation-avoiding technique for discovering the MTU of the forward path from a source to a destination node was devised by the Path MTU Discovery Working Group (PMTUDWG) during the late 1980's through early 1990's (see Appendix A) ๐Ÿ•ฐ๏ธ. In this method, the source node gives explicit instructions to routers along the path: if there's an MTU restriction, discard the packet and return an ICMP error message. The problem is that this approach has several serious shortcomings, which lead to an overall "brittleness" ๐Ÿฅบ.

Specifically, site border routers on the Internet are being configured more and more to discard ICMP error messages coming from the outside world ๐Ÿ›ก๏ธ. This mostly happens because it's super easy to spoof error messages on the Internet, since there's no way to authenticate where the messages came from ๐Ÿ•ต๏ธ. Now, if a source node needs ICMP error message feedback when a packet gets dropped due to an MTU restriction and it never receives those messages, a path MTU-related black hole happens ๐Ÿ•ณ๏ธ. This means the source will keep sending packets that are too large and never get any indication from the network that they're being thrown away ๐Ÿ˜ญ.

The issues with both IPv4 fragmentation and this "classical" path MTU discovery get worse when IP-in-IP tunneling is used ๐Ÿ“ฆ. For example, site border routers that are configured as ingress tunnel endpoints might have to forward packets into the subnetwork on behalf of hundreds, thousands, or even more original sources inside the site ๐Ÿข. If IPv4 fragmentation were used here, it would quickly wrap the 16-bit Identification field and could lead to undetected data corruption ๐Ÿ’ฅ. If classical IPv4 path MTU discovery were used instead, the site border router could get bombarded with ICMP error messages from the subnetwork. Those messages might be untrustworthy, or the subnetwork might not be provisioned well enough to translate them into error messages for the original sources ๐Ÿคฏ.

It gets even worse with IPsec tunnels ๐Ÿ”. Only the first IPv4 fragment of a fragmented packet contains the transport protocol selectors (like the source and destination ports) needed to identify the correct security association. So fragmentation ends up being useless in some circumstances ๐Ÿ˜ต. Even worse, a site border router that configures an IPsec tunnel may have no way to transcribe the encrypted packet fragment inside an ICMP error message into a suitable ICMP error message to send back to the original source ๐Ÿ’”. Because of all these limitations, we need a new approach to handle links with diverse MTUs ๐Ÿ’œ.

1.2. Approach โœจ

okay so bestie, for this doc a subnetwork is a virtual topology that stretches across connected network regions, with encapsulating border nodes marking where it starts and ends ๐Ÿฆ‹ Examples are the global Internet interdomain routing core, Mobile Ad hoc Networks (MANETs), and enterprise networks. Subnetwork border nodes forward unicast and multicast IP packets over that virtual topology across multiple IP and/or sub-IP layer forwarding hops. Those hops can cause packet duplication and can cross links with different Maximum Transmission Units (MTUs), so it's a whole thing ๐Ÿ’€

This document introduces the Subnetwork Encapsulation and Adaptation Layer (SEAL) ๐Ÿ’– It's for tunnel-mode operation of IP over subnetworks that connect Ingress and Egress Tunnel Endpoints (ITEs/ETEs) of border nodes. Transport mode is supported too, but only when the subnetwork border node upper-layer protocols negotiate SEAL during connection establishment. SEAL handles links with different MTUs and makes duplicate packet detection efficient by adding a minimal mid-layer encapsulation. Iconic ๐Ÿ‘‘

The SEAL encapsulation adds an extended Identification field for packet identification, plus a mid-layer segmentation and reassembly capability that makes cutting and pasting packets simpler ๐ŸŽ€ SEAL also treats in-the-network IPv4 fragmentation as a "noise" signal that the packet sizing parameters are "out of tune" with the network path. So it can naturally tune those sizing parameters to get rid of the in-the-network fragmentation. Main character energy ๐ŸŒˆ

The SEAL encapsulation layer and protocol are specified in the following sections โœจ

2. Terminology and Requirements ๐ŸŒธ

The terms "inner", "mid-layer", and "outer" refer, in order, to the innermost IP (layer, protocol, header, packet, etc.) before any encapsulation, the mid-layer IP (protocol, header, packet, etc.) after any mid-layer '' encapsulation, and the outermost IP (layer, protocol, header, packet etc.) after SEAL//IPv4 encapsulation ๐Ÿงš

The term "IP" used throughout the document means either Internet Protocol version (IPv4 or IPv6) ๐Ÿ’… The notation IPvX/*/SEAL/*/IPvY describes an inner IPvX packet wrapped in any mid-layer '' encapsulations, then the SEAL header, then any outer '' encapsulations, then an outer IPvY header. The notation "IPvX" means either IP protocol version (IPv4 or IPv6) ๐Ÿซถ

The following abbreviations match terms used in this document and elsewhere in common Internetworking nomenclature ๐Ÿ“

      ITE - Ingress Tunnel Endpoint

      ETE - Egress Tunnel Endpoint

      PTB - an ICMPv6 "Packet Too Big" or an ICMPv4 "Fragmentation
            Needed" message

      DF - the IPv4 header "Don't Fragment" flag

      MHLEN - the length of any mid-layer '*' headers and trailers

      OHLEN - the length of the outer encapsulating SEAL/*/IPv4 headers

      HLEN - the sum of MHLEN and OHLEN

      S_MRU - the per-ETE SEAL Maximum Reassembly Unit

      S_MSS - the SEAL Maximum Segment Size

      SEAL_ID - a 32-bit Identification value, randomly initialized and
                monotonically incremented for each SEAL protocol packet

      SEAL_PROTO - an IPv4 protocol number used for SEAL

      SEAL_PORT - a TCP/UDP service port number used for SEAL

      SEAL_OPTION - a TCP option number used for (transport-mode) SEAL

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this document, are to be interpreted as described in [RFC2119] ๐Ÿ“š These are the rules-lawyer words, so when you see them in caps, pay attention ๐Ÿ‘€

3. Applicability Statement ๐Ÿฆ‹

SEAL was motivated by the specific case of subnetwork abstraction for Mobile Ad hoc Networks (MANETs) ๐Ÿ’œ But its domain of applicability also reaches subnetwork abstractions of enterprise networks, the interdomain routing core, and so on. So the domain of application also includes the map-and-encaps architecture proposals in the IRTF Routing Research Group (RRG), which you can look up at http://www3.tools.ietf.org/group/irtf/trac/wiki/RoutingResearchGroup ๐ŸŒ

SEAL adds a minimal new sublayer for IPvX in IPvY encapsulation (for example, IPv6/SEAL/IPv4). To the inner IP layer, it looks like a subnetwork encapsulation โœจ SEAL can also be a sublayer for putting inner IP packets inside outer UDP/IPv4 headers (for example, IPv6/SEAL/UDP/IPv4), such as for the Teredo domain of applicability [RFC4380] ๐ŸŽ€ When the SEAL header sits right after the outer IPv4 header, it's processed exactly like IPv6 extension headers. Iykyk ๐Ÿ˜ญ

SEAL can also be used in "transport-mode", for example when the inner layer carries upper-layer protocol data instead of an encapsulated IP packet ๐Ÿ’… For instance, TCP peers can negotiate SEAL to carry protocol data encapsulated as TCP/SEAL/IPv4. In this sense the "subnetwork" becomes the entire end-to-end path between the TCP peers, and it could potentially span the whole Internet ๐ŸŒˆ

The current document version is specific to using IPv4 as the outer encapsulation layer. The same principles apply when IPv6 is the outer layer ๐Ÿงš

4. SEAL Protocol Specification - Tunnel Mode ๐Ÿ‘‘

4.1. Model of Operation ๐ŸŒธ

SEAL supports encapsulating inner IP packets in mid-layer and outer encapsulating headers/trailers ๐Ÿ’– For example, an inner IPv6 packet would look like IPv6//SEAL//IPv4 after mid-layer and outer encapsulations, where '*' stands for zero or more additional encapsulation sublayers. Ingres Tunnel Endpoints (ITEs) add mid-layer inject into a subnetwork, where the outermost IPv4 header holds the source and destination addresses of the subnetwork entry/exit points (that is, the ITE/ETE), respectively. SEAL uses a new Internet Protocol type and a new encapsulation sublayer for both unicast and multicast ๐Ÿฆ‹ The ITE encapsulates an inner IP packet in mid-layer and outer encapsulations, as shown in Figure 1:

                                            +-------------------------+
                                            |                         |
                                            ~   Outer */IPv4 headers  ~
                                            |                         |
   I                                        +-------------------------+
   n                                        |       SEAL Header       |
   n      +-------------------------+       +-------------------------+
   e      ~ Any mid-layer * headers ~       ~ Any mid-layer * headers ~
   r      +-------------------------+       +-------------------------+
          |                         |       |                         |
   I -->  ~         Inner IP        ~  -->  ~         Inner IP        ~
   P -->  ~         Packet          ~  -->  ~         Packet          ~
          |                         |       |                         |
   P      +-------------------------+       +-------------------------+
   a      ~  Any mid-layer trailers ~       ~  Any mid-layer trailers ~
   c      +-------------------------+       +-------------------------+
   k                                        ~    Any outer trailers   ~
   e                                        +-------------------------+
   t
           (After mid-layer encaps.)        (After SEAL/*/IPv4 encaps.)

                       Figure 1: SEAL Encapsulation

The SEAL header is inserted as follows ๐ŸŽ€

  • For simple IPvX/IPv4 encapsulations (for example, [RFC2003][RFC2004][RFC4213]), the SEAL header goes between the inner IP and outer IPv4 headers, as: IPvX/SEAL/IPv4.
  • For tunnel-mode IPsec encapsulations over IPv4 [RFC4301], the SEAL header goes between the {AH,ESP} header and outer IPv4 headers, as: IPvX/*/{AH,ESP}/SEAL/IPv4.
  • For IP encapsulations over transports such as UDP, the SEAL header goes immediately after the outer transport layer header, for example as IPvX/*/SEAL/UDP/IPv4.

SEAL-encapsulated packets include a 32-bit SEAL_ID ๐Ÿ”ฅ It's formed by concatenating the 16-bit ID Extension field in the SEAL header as the most-significant bits, with the 16-bit Identification value in the outer IPv4 header as the least-significant bits. For tunnels that go through IPv4 Network Address Translators, the SEAL_ID is instead kept only within the 16-bit ID Extension field in the SEAL header. Routers inside the subnetwork use the SEAL_ID for duplicate packet detection, and ITEs/ETEs use it for SEAL segmentation and reassembly ๐Ÿ’œ

SEAL enables a multi-level segmentation and reassembly capability, and it's honestly so clever ๐Ÿ˜ญ

First, the ITE can use IPv4 fragmentation to fragment inner IPv4 packets with DF=0 before SEAL encapsulation, so it avoids lower-layer segmentation and reassembly. Secondly, the SEAL layer itself gives a simple cutting-and-pasting capability for mid-layer packets, which avoids IPv4 fragmentation on the outer packet. Finally, ordinary IPv4 fragmentation is permitted on the outer packet after SEAL encapsulation, and it's used to detect and dampen any in-the-network fragmentation as quickly as possible ๐Ÿซถ

The following sections specify the SEAL-related operations of the ITE and ETE, respectively: โœจ

4.2. ITE Specification ๐Ÿงš

4.2.1. Tunnel Interface MTU ๐Ÿฆ‹

okay so the ITE sets up a tunnel virtual interface over one or more underlying links that connect the border node to the subnetwork ๐ŸŽ€ the tunnel interface must present a fixed MTU to the inner IP layer (aka Layer 3) as the size for admitting inner IP packets into the tunnel. but bestie, the tunnel interface might support a potentially huge set of ETEs, so you have to be careful picking a greatest-common-denominator MTU that works for all of them while still keeping end systems happy ๐Ÿ’…

so Ethernet and similar gear are everywhere, which means the nominal Internet cell size is now 1500 bytes. that's the de facto size end systems expect will either get delivered without loss (because of an MTU restriction on the path) or get a suitable PTB message back ๐Ÿซถ the problem is the network doesn't always send those PTBs, and that causes MTU-related black holes [RFC2923] ๐Ÿ˜ญ so the ITE needs a way to get 1500 byte (or smaller) packets to the ETE without losing them to MTU restrictions AND without depending on PTB messages from inside the subnetwork. no cap, that's a whole main character requirement ๐Ÿ‘‘

in common deployments there are tons of forwarding hops between the original source and the ITE ๐ŸŒˆ along the way there can be extra encapsulations (IPSec, L2TP, etc.), so a 1500 byte packet from the source might be bigger by the time it reaches the ITE for encapsulation as an inner IP packet. and then more encapsulations on the path from the ITE to the ETE could make it even bigger and trigger in-the-network fragmentation ๐Ÿ™ˆ to keep end system expectations intact, the ITE needs a way to convey these larger packets to the ETE too, even if some links inside the subnetwork are configured with a smaller MTU โœจ

so the ITE should set a tunnel virtual interface MTU of 1500 bytes plus extra room for any additional encapsulations that might happen on the path from the original source (even if the path to the ETE doesn't support an MTU that big) ๐Ÿงš the ITE can set larger MTU values still, but it should pick one that isn't so large it causes excessive PTBs coming from within the tunnel interface (see Sections 4.2.2 and 4.2.6) ๐Ÿ’œ the ITE can also set smaller MTU values, but be careful not to go so small that original sources experience an MTU underflow ๐Ÿฅบ specifically, IPv6 sources must see a minimum path MTU of 1280 bytes, and IPv4 sources should see a minimum path MTU of 576 bytes ๐Ÿ“

the inner IP layer checks the tunnel interface MTU when it's admitting a packet into the interface ๐Ÿ”ฅ for inner IPv4 packets that are larger than the tunnel interface MTU AND have the IPv4 Don't Fragment (DF) bit set to 0, the inner IPv4 layer uses IPv4 fragmentation to break the packet into fragments no larger than the tunnel interface MTU (but also see Section 4.2.3), and then admits each fragment into the tunnel as an independent packet ๐Ÿฆ‹ for all other inner packets (IPv4 or IPv6), the ITE admits the packet only if it's no larger than the tunnel interface MTU. otherwise it drops the packet and sends an ICMP PTB message with an MTU value of the tunnel interface MTU back to the source ๐Ÿ’€

4.2.2. Accounting for Headers ๐ŸŒธ

as with any transport layer protocol, ITEs use the MTU of the underlying IPv4 interface, the length of any mid-layer * headers and trailers, and the length of the outer SEAL/*/IPv4 headers to figure out the maximum size for a SEAL segment (see Section 4.2.3) ๐ŸŽ€ for example, when the underlying IPv4 interface advertises an MTU of 1500 bytes and the ITE inserts a minimum-length (i.e., 20-byte) IPv4 header, the ITE sees a maximum segment size of 1480 bytes โœจ when the ITE inserts IPv4 header options, the size shrinks by as many as 40 additional bytes (the maximum length for IPv4 options), so as few as 1440 bytes might be left for the upper-layer payload ๐Ÿ˜ญ and when the ITE inserts additional * encapsulations, the maximum segment size gets reduced even further ๐Ÿงš

the ITE must also account for the length of the SEAL header itself as an extra encapsulation that reduces the maximum segment size ๐Ÿซถ the length of the SEAL header isn't included in the IPv4 header length, so the network doesn't see the SEAL header as an IPv4 option. it's giving "inserted after the IPv4 options but before the upper-layer payload, in exactly the same way as IPv6 extension headers" ๐Ÿ’…

4.2.3. Segmentation and Encapsulation ๐ŸŒˆ

okay bestie, for each ETE the ITE keeps track of the length of any mid-layer * encapsulation headers and trailers (for example, when * = AH, ESP, NULL, etc.) in a variable called MHLEN, and the length of the outer SEAL/*/IPv4 encapsulation headers in a variable called OHLEN ๐Ÿฆ‹ it also keeps a variable called HLEN, which is MHLEN plus OHLEN ๐Ÿ‘‘ the ITE maintains a SEAL Maximum Reassembly Unit (S_MRU) value for each ETE as soft state within the tunnel interface (e.g., in the IPv4 destination cache) ๐Ÿ’œ it starts S_MRU at a value no larger than 2KB, and uses that to decide the maximum-sized packet it'll require the ETE to reassemble ๐Ÿ“ the ITE additionally maintains a SEAL Maximum Segment Size (S_MSS) value for each ETE. it sets S_MSS to the maximum of (the underlying IPv4 interface MTU minus OHLEN) and S_MRU/8 bytes, and then decreases or increases S_MSS based on any ICMPv4 Fragmentation Needed messages it receives (see Section 4.2.6) โœจ

the ITE performs segmentation and encapsulation on inner packets that have been admitted into the tunnel interface ๐Ÿ”ฅ for inner IPv4 packets with the DF bit set to 0, if the inner packet is larger than (S_MRU - HLEN), the ITE uses IPv4 fragmentation to break the packet into IPv4 fragments no larger than (S_MRU - HLEN) ๐ŸŒธ for unfragmentable inner packets (e.g., IPv6 packets, IPv4 packets with DF=1, etc.), if the inner packet is larger than (MAX(S_MRU, S_MSS) - HLEN), the ITE drops the packet and sends an ICMP PTB message with an MTU value of (MAX(S_MRU, S_MSS) - HLEN) back to the original source ๐Ÿ’€

the ITE then encapsulates each inner packet/fragment in the MHLEN bytes of mid-layer * headers and trailers ๐ŸŽ€ for each resulting mid-layer packet of length M, if (S_MRU >= (M + OHLEN) > S_MSS), the ITE must perform SEAL segmentation ๐Ÿงš to do that, it breaks the mid-layer packet into N segments (N <= 8) that are no larger than (MIN(1KB, S_MSS) - OHLEN) bytes each ๐Ÿซถ every segment except the final one MUST be of equal length, and the final segment MUST be no larger than the initial segment ๐Ÿฆ‹ the first byte of each segment MUST begin right after the final byte of the previous segment, i.e., the segments MUST NOT overlap ๐Ÿ’… the ITE should generate the smallest number of segments possible. for example, it shouldn't generate 6 smaller segments when the packet could fit in 4 larger segments ๐Ÿ™ˆ

note that this SEAL segmentation ignores the fact that the mid-layer packet might be unfragmentable ๐ŸŒˆ this segmentation process is a mid-layer (not an IP layer) operation the ITE uses to fit the mid-layer packet to the subnetwork path characteristics, and the ETE will restore the packet to its original form during reassembly โœจ

so, the fact that the packet may have been segmented inside the subnetwork isn't observable outside of the subnetwork ๐Ÿ’–

the ITE next encapsulates each segment in a SEAL header formatted like this:

    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          ID Extension         |A|R|M|RSV| SEG |  Next Header  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: SEAL Header Format

and here's what each header field means ๐ŸŽ€

  • ID Extension (16): a 16-bit extension of the Identification field in the outer IPv4 header. it encodes the most-significant 16 bits of a 32 bit SEAL_ID value ๐Ÿฆ‹
  • A (1): the "Acknowledgement Requested" bit. set to 1 if the ITE wants to receive an explicit acknowledgement from the ETE ๐Ÿ’œ
  • R (1): the "Report Fragmentation" bit. set to 1 if the ITE wants to receive a report from the ETE if any IPv4 fragmentation occurs ๐ŸŒธ
  • M (1): the "More Segments" bit. set to 1 if this SEAL protocol packet contains a non-final segment of a multi-segment mid-layer packet โœจ
  • RSV (2): a 2-bit field reserved for future use. Must be set to 0 for the purpose of this specification ๐Ÿฅบ
  • SEG (3): a 3-bit segment number. encodes a segment number between 0 - 7 ๐Ÿ“
  • Next Header (8): an 8-bit field that encodes an Internet Protocol number the same as for the IPv4 protocol and IPv6 next header fields ๐Ÿ‘‘

for single-segment mid-layer packets, the ITE encapsulates the segment in a SEAL header with (M=0; SEG=0) ๐Ÿงš for N-segment mid-layer packets (N <= 8), the ITE encapsulates each segment in a SEAL header with (M=1; SEG=0) for the first segment, (M=1; SEG=1) for the second segment, and so on, with the final segment setting (M=0; SEG=N-1) ๐Ÿ’…

the ITE next sets RSV='00' and sets the A and R bits in the SEAL header of the first segment depending on whether the packet is going to be used as an explicit/implicit probe, as specified in Section 4.2.4 ๐ŸŒˆ the ITE then writes the Internet Protocol number that matches the mid-layer packet into the SEAL Next Header field, and encapsulates each segment in the requisite */IPv4 outer headers according to the specific encapsulation format (e.g., [RFC2003], [RFC4213], [RFC4380], etc.) ๐Ÿซถ the one exception is that it writes SEAL_PROTO in the protocol field of the outer IPv4 header (when simple IPv4 encapsulation is used), or writes SEAL_PORT in the outer destination service port field (e.g., when UDP/IPv4 encapsulation is used) ๐Ÿ”ฅ the ITE finally sets packet identification values as specified in Section 4.2.5 and sends the packets as specified in Section 4.2.6 ๐Ÿฆ‹

4.2.4. Sending Probes ๐Ÿ”

Okay so, when S_MSS is bigger than S_MRU/8 bytes, the ITE sends regular encapsulated data packets as implicit probes ๐Ÿ•ต๏ธโ€โ™€๏ธ to sniff out in-the-network IPv4 fragmentation and figure out new values for S_MSS. Bestie, the ITE sets R=1 in the SEAL header of a packet with SEG=0 to be used as an implicit probe, and it will receive ICMPv4 Fragmentation Needed messages from the ETE if any IPv4 fragmentation happens. But once the ITE has already dropped S_MSS to the minimum value, it sets R=0 in the SEAL header instead, so it doesn't generate fragmentation reports for fragmentation that's unavoidable anyway. Literally so smart ๐Ÿ’…

The ITE should send explicit probes periodically to manage a window of SEAL_IDs of outstanding probes. That's how it validates any ICMPv4 messages it receives ๐Ÿงš The ITE sets A=1 in the SEAL header of a packet with SEG=0 to be used as an explicit probe. The probe can be either an ordinary data packet or a NULL packet, created by setting the 'Next Header' field in the SEAL header to a value of "No Next Header" (see Section 4.7 of [RFC2460]).

The ITE should also send explicit probes, periodically, to detect increases in S_MSS. It can do this by resetting S_MSS to the maximum of (the underlying IPv4 interface MTU minus OHLEN) and S_MRU/8 bytes, and/or by sending explicit probes that are larger than the current S_MSS. Main character energy ๐ŸŽ€

Finally, the ITE MAY send "expendable" probe packets with DF=1 (see Section 4.2.6) in order to generate ICMPv4 Fragmentation Needed messages from routers on the path to the ETE. ๐Ÿฆ‹

4.2.5. Packet Identification ๐Ÿชช

For packet identification, the ITE keeps a 32-bit SEAL_ID value as per-ETE soft state, e.g., in the IPv4 destination cache ๐Ÿ—‚๏ธ The ITE randomly initializes SEAL_ID when the soft state is created, then monotonically increments it (modulo 2^32) for each successive SEAL protocol packet it sends to the ETE. For each packet, the ITE writes the least-significant 16 bits of the SEAL_ID value in the Identification field in the outer IPv4 header, and writes the most-significant 16 bits in the ID Extension field in the SEAL header. โœจ

Now for SEAL encapsulations specifically designed for traversing IPv4 Network Address Translators (NATs), e.g., encapsulations that insert a UDP header between the SEAL header and the outer IPv4 header, such as IPv6/SEAL/UDP/IPv4, it's a little different ๐Ÿ™ˆ The ITE instead keeps SEAL_ID as a 16-bit value that it randomly initializes when the soft state is created, and monotonically increments (modulo 2^16) for each successive packet. For each packet, the ITE writes SEAL_ID in the ID extension field of the SEAL header, and writes a random 16-bit value in the Identification field in the outer IPv4 header. Why the random value? Because the ITE has no way to control IPv4 NATs in the path that could rewrite the Identification value in the outer IPv4 header. Iconic problem, iconic workaround ๐ŸŒธ

4.2.6. Sending SEAL Protocol Packets ๐Ÿ“ฎ

Following SEAL segmentation and encapsulation, the ITE sets DF=0 in the outer IPv4 header of every outer packet it sends. For "expendable" packets (e.g., NULL packets used as probes -- see Section 4.2.4), the ITE may instead set DF=1. ๐Ÿ’…

Then the ITE sends each outer packet that encapsulates a segment of the same mid-layer packet into the tunnel in canonical order. That means segment 0 goes first, followed by segment 1, and so on, finally ending with segment N-1. Orderly and slay ๐Ÿซถ

4.2.7. Processing Raw ICMPv4 Messages ๐Ÿ“จ

The ITE may receive "raw" ICMPv4 error messages from either the ETE or routers within the subnetwork. These consist of an outer IPv4 header, followed by an ICMPv4 header, followed by a portion of the SEAL packet that generated the error (also known as the "packet-in-error") ๐Ÿ•ต๏ธโ€โ™€๏ธ For such messages, the ITE can use the 32-bit SEAL ID encoded in the packet-in-error as a nonce to confirm that the ICMP message came from either the ETE or an on-path router. The ITE MAY process raw ICMPv4 messages as soft errors indicating that the path to the ETE may be failing. ๐Ÿšจ

The ITE should specifically process raw ICMPv4 Protocol Unreachable messages as a hint that the ETE does not implement the SEAL protocol. Big clue, bestie ๐Ÿ”

4.2.8. Processing SEAL-Encapsulated ICMPv4 Messages ๐ŸŽ

In addition to any raw ICMPv4 messages, the ITE may receive SEAL-encapsulated ICMPv4 messages from the ETE. These comprise outer ICMPv4/*/SEAL/*/IPv4 headers, followed by a portion of the SEAL-encapsulated packet-in-error. The ITE can use the 32-bit SEAL ID encoded in the packet-in-error, as well as information in the outer IPv4 and SEAL headers, as nonces to confirm that the ICMP message came from a legitimate ETE ๐Ÿซถ The ITE then verifies that the SEAL_ID encoded in the packet-in-error is within the current window of transmitted SEAL_IDs for this ETE. If the SEAL_ID is outside of the window, the ITE discards the message. Otherwise, it advances the window and processes the message. ๐Ÿงš

The ITE processes SEAL-encapsulated ICMPv4 messages other than ICMPv4 Fragmentation Needed exactly as specified in [RFC0792]. Lowkey the most straightforward part ๐Ÿ’–

For SEAL-encapsulated ICMPv4 Fragmentation Needed messages, the ITE sets a variable 'L' to the IPv4 length of the packet-in-error minus OHLEN. If (L > S_MSS), or if the packet-in-error is an IPv4 first fragment (i.e., with MF=1; Offset=0) and (L >= (576 - OHLEN)), the ITE sets (S_MSS = L). ๐Ÿ”ฅ

Note that 576 in the above corresponds to the nominal minimum MTU for IPv4 links. When an ITE instead receives an IPv4 first fragment packet-in-error with (L < (576 - OHLEN)), it discovers that IPv4 fragmentation is occurring in the network, but it cannot determine the true MTU of the restricting link. That's because a router on the path is generating runt first fragments ๐Ÿ˜ญ The ITE should therefore search for a reduced S_MSS value (to a minimum of S_MRU/8) through an iterative searching strategy that parallels (Section 5 of [RFC1191]).

This searching strategy may require multiple iterations of sending SEAL packets with DF=0 using a reduced S_MSS, and receiving additional Fragmentation Needed messages. It will soon converge to a stable value, though ๐ŸŒˆ During this process, it is essential that the ITE reduce S_MSS based on the first Fragmentation Needed message received. After that, it should refrain from further reducing S_MSS until ICMPv4 Fragmentation Needed messages pertaining to packets sent under the new S_MSS are received. Patience is a whole vibe ๐Ÿ“

As an optimization only, the ITE MAY transcribe SEAL-encapsulated Fragmentation Needed messages that contain sufficient information into corresponding PTB messages to return to the original source. โœจ


4.3. ETE Specification ๐ŸŒท

4.3.1. Reassembly Buffer Requirements ๐Ÿงฉ

ETEs MUST be capable of using IPv4-layer reassembly to reassemble SEAL protocol outer IPv4 packets up to 2KB in length. They MUST also be capable of using SEAL-layer reassembly to reassemble mid-layer packets up to (2KB - OHLEN). Note that the ITE must retain the SEAL/*/IPv4 header during both IPv4-layer and SEAL-layer reassembly, so it can associate the fragments/segments of the same packet. Keeping track is everything ๐Ÿ’œ

4.3.2. IPv4-Layer Reassembly ๐Ÿงต

The ETE performs IPv4 reassembly as normal, and should keep a conservative high- and low-water mark for the number of outstanding reassemblies pending for each ITE. When the size of the reassembly buffer exceeds the high-water mark, the ETE actively discards incomplete reassemblies (e.g., using an Active Queue Management (AQM) strategy) until the size falls below the low-water mark. The ETE should also use a reduced IPv4 maximum segment lifetime value (e.g., 15 seconds). That's the time after which it will discard an incomplete IPv4 reassembly for a SEAL protocol packet โณ Finally, the ETE should also actively discard any pending reassemblies that clearly have no chance of completing, e.g., when a considerable number of new IPv4 fragments have arrived before a fragment that completes a pending reassembly. Cutting the dead weight ๐Ÿ’€

After reassembly, the ETE either accepts or discards the reassembled packet, based on the current status of the IPv4 reassembly cache (congested versus uncongested). The SEAL_ID included in the IPv4 first fragment gives an extra layer of reassembly assurance, since it can record a distinct arrival timestamp. That timestamp is useful for associating the first fragment with its corresponding non-initial fragments ๐ŸŽ€ The choice to accept or discard a reassembly may also depend on the strength of the upper-layer integrity check, if known (e.g., IPSec/ESP provides a strong upper-layer integrity check). It may also depend on the corruption tolerance of the data (e.g., multicast streaming audio/video may be more corruption-tolerant than file transfer, etc.). In the limiting case, the ETE may choose to discard all IPv4 reassemblies, and process only the IPv4 first fragment for SEAL-encapsulated error generation purposes (see the following sections). Last resort, but still valid ๐Ÿฆ‹

4.3.3. Generating SEAL-Encapsulated ICMPv4 Fragmentation Needed Messages โœจ

Okay so during IPv4-layer reassembly, the ETE figures out whether a packet is SEAL by checking for SEAL_PROTO in the outer IPv4 header (that's the simple IPv4 encapsulation case) or for SEAL_PORT in the outer */IPv4 header (like '*'=UDP ๐Ÿ’…). When the ETE processes the IPv4 first fragment (the one with DF=1 and Offset=0 in the IPv4 header) of a SEAL protocol IPv4 packet with (R=1; SEG=0) in the SEAL header, it sends a SEAL-encapsulated ICMPv4 Fragmentation Needed message back to the ITE with the MTU field set to 0. ๐Ÿ™ˆ The reason is kind of sneaky: a non-zero MTU value would be redundant with the length value in the IPv4 header of the first fragment, since that length is already set to the correct path MTU through in-the-network fragmentation. Zeroing the MTU field avoids the ambiguous case where the MTU field and the IPv4 length field of the first fragment record different non-zero values. ๐Ÿงš

When the ETE processes a SEAL protocol IPv4 packet with (A=1; SEG=0) for which no IPv4 reassembly was needed, or for which IPv4 reassembly succeeded and the R bit wasn't set, it sends a SEAL-encapsulated ICMPv4 Fragmentation Needed message back to the ITE with the MTU value set to 0. So if both the A and R bits are set and fragmentation happens, the ETE only sends a single ICMPv4 Fragmentation Needed message. It does not send two separate ones (one for the first fragment and a second for the reassembled whole SEAL packet). ๐Ÿ’–

The ETE prepares the ICMPv4 Fragmentation Needed message by encapsulating as much of the first fragment (or the non-fragmented packet) as possible in outer */SEAL/*/IPv4 headers, without the length of the message going over 576 bytes, as shown in Figure 3:

      +-------------------------+ -
      |                         |   ~ Outer */SEAL/*/IPv4 hdrs~   |
      |                         |   |
      +-------------------------+   |
      |      ICMPv4 Header      |   |
      |(Dest Unreach; Frag Need)|   |
      +-------------------------+   |
      |                         |    > Up to 576 bytes
      ~    IP/*/SEAL/*/IPv4     ~   |
      ~ hdrs of packet/fragment ~   |
      |                         |   |
      +-------------------------+   |
      |                         |   |
      ~ Data of packet/fragment ~   |
      |                         |   /
      +-------------------------+ -

       Figure 3: SEAL-Encapsulated ICMPv4 Fragmentation Needed Message

The ETE then sets A=0, R=0, and SEG=0 in the outer SEAL header, and sets the SEAL_ID the same way as for any SEAL packet. After that it sets the SEAL Next Header field and the fields of the outer */IPv4 headers, the same as for ordinary SEAL encapsulation. ๐ŸŽ€

Next, the ETE sets the outer IPv4 destination and source addresses to the source and destination addresses (respectively) of the packet/fragment. If the destination address in the packet/fragment was multicast, the ETE instead sets the outer IPv4 source address to an address assigned to the underlying IPv4 interface. Finally, the ETE sends the SEAL-encapsulated ICMPv4 message to the ITE the same as specified in Section 4.2.5. The one exception is that when the A bit in the packet/fragment is not set, the ETE sends these messages subject to rate limiting, since it's not entirely critical that all fragmentation gets reported to the ITE. Chill, not everything needs a megaphone ๐ŸŒธ


4.3.4. SEAL-Layer Reassembly ๐Ÿงฉ

Following IPv4 reassembly of a SEAL packet with (RSV!=0; SEG=0), if the packet isn't a SEAL-encapsulated ICMPv4 message, the ETE generates a SEAL-encapsulated ICMPv4 Parameter Problem message with the pointer set to the flags field in the SEAL header. It sends that message back to the ITE in the same manner as Section 4.3.3, then drops the packet. ๐Ÿ™…โ€โ™€๏ธ For all other SEAL packets, the ETE adds the packet to a SEAL-Layer pending-reassembly queue if either the M bit or the SEG field in the SEAL header is non-zero.

The ETE does SEAL-layer reassembly through simple in-order concatenation of the encapsulated segments from N consecutive SEAL protocol packets from the same mid-layer packet. For this to work, SEAL-layer reassembly requires the ETE to keep a cache of recently received segments for a hold time that allows for reasonable inter-segment delays. The ETE uses a SEAL maximum segment lifetime of 15 seconds for this purpose. That's the time after which it discards an incomplete reassembly. However, the ETE should also actively discard any pending reassemblies that clearly have no chance of completing. For example, that happens when a lot of new SEAL packets have shown up before the packet that would complete a pending reassembly arrives. ๐Ÿ—‘๏ธ

The ETE reassembles the mid-layer packet segments in SEAL protocol packets that contain segment numbers 0 through N-1, with M=1/0 in non-final/final segments respectively, and with consecutive SEAL_ID values. So for an N-segment mid-layer packet, reassembly means concatenating the SEAL-encapsulated segments in this order: (segment 0, SEAL_ID i), then (segment 1, SEAL_ID ((i + 1) mod 2^32)), and so on, up to (segment N-1, SEAL_ID ((i + N-1) mod 2^32)). (For SEAL encapsulations specifically designed for traversal of IPv4 NATs, the ETE instead uses only a 16-bit SEAL_ID value, and uses mod 2^16 arithmetic to associate the segments of the same packet. ๐Ÿฆ‹)


4.3.5. Delivering Packets to Upper Layers ๐Ÿš€

Following SEAL-layer reassembly, the ETE silently discards the reassembled packet if it was a NULL packet (see Section 4.2.4). In the same manner, the ETE silently discards any reassembled mid-layer packet larger than (2KB - OHLEN) that either experienced IPv4 fragmentation or didn't arrive as a single SEAL segment. ๐Ÿซถ

Next, if the ETE determines that the inner packet would cause an ICMPv4 error message to be generated, it generates a SEAL-encapsulated ICMPv4 error message. It sends that message back to the ITE in the same manner as Section 4.3.3, then either accepts or drops the packet, depending on the type of error. Otherwise, the ETE delivers the inner packet to the upper-layer protocol indicated in the Next Header field. โœ…


5. SEAL Protocol Specification - Transport Mode ๐Ÿฆ‹

Section 4 specifies how SEAL works in "tunnel mode," i.e., when there's both an inner and an outer IP layer with a SEAL encapsulation layer in between. But SEAL can also be used in a "transport mode" of operation within a subnetwork region. In that case, the inner layer is a transport layer protocol (e.g., UDP, TCP, etc.) instead of an inner IP layer. ๐Ÿ’œ

For example, two TCP endpoints connected to the same subnetwork region can negotiate transport-mode SEAL for a connection by inserting a 'SEAL_OPTION' TCP option during connection establishment. If both TCPs agree to use SEAL, their protocol messages are carried as TCP/SEAL/IPv4. The connection is then serviced by the SEAL protocol using TCP as the transport layer protocol, instead of an encapsulating tunnel endpoint. Otherwise, the SEAL protocol for transport mode follows the same specifications as Section 4. ๐ŸŒˆ


Subnetwork designers are expected to follow the recommendations in Section 2 of [RFC3819] when configuring link MTUs. ๐Ÿ“


7. End System Requirements ๐Ÿ’ป

SEAL provides robust mechanisms for returning PTB messages. However, end systems that send unfragmentable IP packets larger than 1500 bytes are strongly encouraged to use Packetization Layer Path MTU Discovery per [RFC4821]. ๐Ÿ™Œ


8. Router Requirements ๐Ÿ›ฃ๏ธ

IPv4 routers within the subnetwork are strongly encouraged to implement IPv4 fragmentation so that the first fragment is the largest and approximately the size of the underlying link MTU. In other words, they should avoid generating runt first fragments. ๐Ÿฃ


9. IANA Considerations ๐Ÿ“‹

SEAL_PROTO, SEAL_PORT, and SEAL_OPTION are taken from their respective range of experimental values documented in [RFC3692] and [RFC4727]. These values are for experimentation purposes only, and are not to be used for any kind of deployments (i.e., they are not to be shipped in any products). ๐Ÿงช


10. Security Considerations ๐Ÿšจ

Unlike IPv4 fragmentation, overlapping fragment attacks are not possible, due to the requirement that SEAL segments be non-overlapping. ๐Ÿ›ก๏ธ

๐Ÿšจ Bestie, this one is serious: an amplification/reflection attack is possible when an attacker sends IPv4 first fragments with spoofed source addresses to an ETE. That results in a stream of ICMPv4 Fragmentation Needed messages being returned to a victim ITE. The good news is that the encapsulated segment of the spoofed IPv4 first fragment gives the ITE a way to detect and discard spurious ICMPv4 Fragmentation Needed messages. ๐Ÿ’€

The SEAL header is sent in-the-clear (outside of any IPsec/ESP encapsulations), the same as for the outer */IPv4 headers. As for IPv6 extension headers, the SEAL header is protected only by L2 integrity checks and is not covered by any L3 integrity checks. ๐Ÿ”


Section 3.1.7 of [RFC2764] provides a high-level sketch for supporting large tunnel MTUs through a tunnel-level segmentation and reassembly capability. That avoids IP-level fragmentation, and it's partly the same approach used by tunnel-mode SEAL. SEAL could therefore be considered a fully functioned manifestation of the method postulated by that informational reference. However, SEAL also supports other modes of operation, including transport-mode and duplicate packet detection. ๐Ÿง 

Section 3 of [RFC4459] describes inner and outer fragmentation at the tunnel endpoints as alternatives for accommodating the tunnel MTU. However, the SEAL protocol specifies a mid-layer segmentation and reassembly capability that is distinct from both inner and outer fragmentation. โœจ

Section 4 of [RFC2460] specifies a method for inserting and processing extension headers between the base IPv6 header and transport layer protocol data. The SEAL header is inserted and processed in exactly the same manner. ๐Ÿงšโ€โ™€๏ธ

The concepts of path MTU determination through the report of fragmentation, and of extending the IP Identification field, were first proposed in deliberations of the TCP-IP mailing list and the Path MTU Discovery Working Group (MTUDWG) during the late 1980's and early 1990's. SEAL supports a report fragmentation capability using bits in an extension header (the original proposal used a spare bit in the IP header). It also supports ID extension through a 16-bit field in an extension header (the original proposal used a new IP option). A historical analysis of the evolution of these concepts, as well as the development of the eventual path MTU discovery mechanism for IP, appears in Appendix A of this document. ๐Ÿ•ฐ๏ธ๐Ÿ‘‘

12. SEAL Advantages over Classical Methods โœจ

okay so SEAL has a bunch of distinct advantages over the classical path MTU discovery methods [RFC1191] [RFC1981] ๐Ÿ’… let's go through them ๐Ÿซถ

  1. Classical path MTU discovery always results in packet loss when an MTU restriction is encountered. With SEAL, IPv4 fragmentation gives you a short-term interim mechanism so packets still get delivered while SEAL adjusts its packet sizing parameters ๐Ÿฆ‹
  2. Classical path MTU discovery makes routers generate an ICMP PTB message for all packets lost due to an MTU restriction ๐Ÿ˜ญ this gets worse at high data rates and becomes severe for in-the-network tunnels that serve lots of communicating end systems. Since SEAL makes sure packets no larger than S_MRU get delivered, the ETE only needs to return ICMPv4 Fragmentation Needed messages subject to rate limiting, not one for every packet-in-error. slay ๐Ÿ’–
  3. Classical path MTU may need several rounds of dropping packets and returning ICMP PTB messages before it finds an acceptable path MTU value. Under normal circumstances, SEAL figures out the correct packet sizing parameters in a single iteration ๐Ÿงš
  4. With SEAL, ordinary packets act as implicit probes without exposing data to unnecessary loss. SEAL also has an explicit probing mode that the classic methods just don't have ๐ŸŒธ
  5. With SEAL, ETEs wrap ICMP error messages in an outer SEAL header, so packet-filtering network middleboxes can tell them apart from "raw" ICMP messages that an attacker might generate ๐Ÿ›ก๏ธ iykyk
  6. Most importantly, every SEAL packet has a 32-bit Identification value. That can be used for duplicate packet detection and for matching ICMP error messages with actual packets sent, all without needing per-packet state ๐Ÿ”ฅ Also, the SEAL ITE can be configured to accept ICMP feedback only from the legitimate ETE, so the packet spoofing-related denial-of-service attack vectors open to the classical methods are eliminated ๐Ÿ‘‘

ngl this is the main character moment of the whole doc. In summary, the SEAL approach is an architecturally superior method for making sure packets of various sizes are either delivered or deterministically dropped ๐Ÿ’… When end systems use their own end-to-end MTU determination mechanisms [RFC4821], the SEAL advantages get even better โœจ


13. Acknowledgments ๐Ÿซถ

okay the people who gave helpful comments and suggestions, thank you bestie ๐Ÿ’–: Jari Arkko, Fred Baker, Iljitsch van Beijnum, Teco Boot, Bob Braden, Brian Carpenter, Steve Casner, Ian Chakeres, Remi Denis-Courmont, Aurnaud Ebalard, Gorry Fairhurst, Joel Halpern, John Heffner, Thomas Henderson, Bob Hinden, Christian Huitema, Joe Macker, Matt Mathis, Erik Nordmark, Dan Romascanu, Dave Thaler, Joe Touch, Magnus Westerlund, Robin Whittle, James Woodyatt, and members of the Boeing PhantomWorks DC&NT group ๐ŸŒˆ

lowkey iconic history fact: path MTU determination through the report of fragmentation was first proposed by Charles Lynn on the TCP-IP mailing list in 1987 ๐Ÿฆ‹ And extending the IP identification field was first proposed by Steve Deering on the MTUDWG mailing list in 1989 ๐Ÿงš


14. References โœจ

14.1. Normative References

  • [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, September 1981.
  • [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, RFC 792, September 1981.
  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.

14.2. Informative References

  • [FOLK] C, C., D, D., and k. k, "Beyond Folklore: Observations on Fragmented Traffic", December 2002.
  • [FRAG] Kent, C. and J. Mogul, "Fragmentation Considered Harmful", October 1987.
  • [MTUDWG] "IETF MTU Discovery Working Group mailing list, gatekeeper.dec.com/pub/DEC/WRL/mogul/mtudwg-log, November 1989 - February 1995.".
  • [RFC1063] Mogul, J., Kent, C., Partridge, C., and K. McCloghrie, "IP MTU discovery options", RFC 1063, July 1988.
  • [RFC1191] Mogul, J. and S. Deering, "Path MTU discovery", RFC 1191, November 1990.
  • [RFC1981] McCann, J., Deering, S., and J. Mogul, "Path MTU Discovery for IP version 6", RFC 1981, August 1996.
  • [RFC2003] Perkins, C., "IP Encapsulation within IP", RFC 2003, October 1996.
  • [RFC2004] Perkins, C., "Minimal Encapsulation within IP", RFC 2004, October 1996.
  • [RFC2764] Gleeson, B., Lin, A., Heinanen, J., Armitage, G., and A. Malis, "A Framework for IP Based Virtual Private Networks", RFC 2764, February 2000.
  • [RFC2923] Lahey, K., "TCP Problems with Path MTU Discovery", RFC 2923, September 2000.
  • [RFC3692] Narten, T., "Assigning Experimental and Testing Numbers Considered Useful", BCP 82, RFC 3692, January 2004.
  • [RFC3819] Karn, P., Ed., Bormann, C., Fairhurst, G., Grossman, D., Ludwig, R., Mahdavi, J., Montenegro, G., Touch, J., and L. Wood, "Advice for Internet Subnetwork Designers", BCP 89, RFC 3819, July 2004.
  • [RFC4213] Nordmark, E. and R. Gilligan, "Basic Transition Mechanisms for IPv6 Hosts and Routers", RFC 4213, October 2005.
  • [RFC4301] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.
  • [RFC4380] Huitema, C., "Teredo: Tunneling IPv6 over UDP through Network Address Translations (NATs)", RFC 4380, February 2006.
  • [RFC4459] Savola, P., "MTU and Fragmentation Issues with In-the-Network Tunneling", RFC 4459, April 2006.
  • [RFC4727] Fenner, B., "Experimental Values In IPv4, IPv6, ICMPv4, ICMPv6, UDP, and TCP Headers", RFC 4727, November 2006.
  • [RFC4821] Mathis, M. and J. Heffner, "Packetization Layer Path MTU Discovery", RFC 4821, March 2007.
  • [RFC4963] Heffner, J., Mathis, M., and B. Chandler, "IPv4 Reassembly Errors at High Data Rates", RFC 4963, July 2007.
  • [TCP-IP] "Archive/Hypermail of Early TCp-IP Mail List", http://www-mice.cs.ucl.ac.uk/multimedia/misc/tcp_ip/, May 1987 - May 1990.

Appendix A. Historic Evolution of PMTUD ๐Ÿฆ‹

(Taken from "Neighbor Affiliation Protocol for IPv6-over-(foo)-over-IPv4"; written 10/30/2002):

the history of Path MTU discovery (PMTUD) is so good ๐Ÿ˜ญ there was a flurry of discussion and loads of proposals in the late 1980's through early 1990. The initial problem was posed by Art Berggreen on May 22, 1987 in a message to the TCP-IP discussion group [TCP-IP]. The discussion that followed gave a ton of reference material for [FRAG]. An IETF Path MTU Discovery Working Group [MTUDWG] was formed in late 1989 with a charter to produce an RFC. Several variations on a very few basic proposals were entertained, including:

  1. Routers record the PMTUD estimate in ICMP-like path probe messages (proposed in [FRAG] and later [RFC1063])
  2. The destination reports any fragmentation that occurs for packets received with the "RF" (Report Fragmentation) bit set (Steve Deering's 1989 adaptation of Charles Lynn's Nov. 1987 proposal)
  3. A hybrid combination of 1) and Charles Lynn's Nov. 1987 (straw RFC draft by McCloughrie, Fox and Mogul on Jan 12, 1990)
  4. Combination of the Lynn proposal with TCP (Fred Bohle, Jan 30, 1990)
  5. Fragmentation avoidance by setting "IP_DF" flag on all packets and retransmitting if ICMPv4 "fragmentation needed" messages occur (Geof Cooper's 1987 proposal; later adapted into [RFC1191] by Mogul and Deering)

Option 1) seemed attractive to the group at the time, since it was believed that routers would migrate more quickly than hosts. Option 2) was a strong contender, but repeated attempts to secure an "RF" bit in the IPv4 header from the IESG failed and the proponents became discouraged. 3) was abandoned because it was perceived as too complicated, and 4) never got any apparent serious consideration. Proposal 5) was a late entry into the discussion from Steve Deering on Feb. 24th, 1990. The discussion group soon after seemingly lost track of all the other proposals and adopted 5), which eventually evolved into [RFC1191] and later [RFC1981].

the plot twist ๐Ÿ™ˆ In retrospect, the "RF" bit postulated in 2) is not needed if a "contract" is first established between the peers, as in proposal 4) and a message to the MTUDWG mailing list from jrd@PTT.LCS.MIT.EDU on Feb 19. 1990. These proposals saw little discussion or rebuttal, and were dismissed based on the following assertions:

  • routers upgrade their software faster than hosts
  • PCs could not reassemble fragmented packets
  • Proteon and Wellfleet routers did not reproduce the "RF" bit properly in fragmented packets
  • Ethernet-FDDI bridges would need to perform fragmentation (i.e., "translucent" not "transparent" bridging)
  • the 16-bit IP_ID field could wrap around and disrupt reassembly at high packet arrival rates

The first four assertions, although maybe valid at the time, have been overcome by historical events, leaving only the final one to consider. But [FOLK] has shown that IP_ID wraparound simply does not occur within several orders of magnitude of the reassembly timeout window on high-bandwidth networks ๐Ÿ”ฅ

(Author's 2/11/08 note: this final point was based on a loose interpretation of [FOLK], and is more accurately addressed in [RFC4963].)


Appendix B. Reliability Extensions ๐ŸŒˆ

the SEAL header includes a Reserved (RSV) field that is set to zero for the purpose of this specification ๐Ÿ“ This field may be used by future updates to this specification for the purpose of improved reliability in the face of loss due to congestion, signal intermittence, etc. Automatic Repeat-ReQuest (ARQ) mechanisms are used to ensure reliable delivery between the endpoints of physical links (e.g., on-link neighbors in an IEEE 802.11 network) as well as between the endpoints of an end-to-end transport (e.g., the endpoints of a TCP connection). However, ARQ mechanisms may be poorly suited to in-the-network elements such as the SEAL ITE and ETE, since retransmission of lost segments would require unacceptable state maintenance at the ITE and would result in packet reordering within the subnetwork.

Instead, alternate reliability mechanisms such as Forward Error Correction (FEC) may be specified in future updates to this specification for the purpose of improved reliability ๐Ÿ’œ Such mechanisms may entail the ITE performing proactive transmissions of redundant data, e.g., by sending multiple copies of the same data. Signaling from the ETE (e.g., by sending SEAL-encapsulated ICMPv4 Source Quench messages) may be specified in a future document as a means for the ETE to dynamically inform the ITE of changing FEC conditions.


Author's Address ๐Ÿ’Œ

Fred L. Templin, Editor
Boeing Research & Technology
P.O. Box 3707
Seattle, WA  98124
USA

EMail: fltemplin@acm.org
๐Ÿ“ฆ where this page comes from