<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-rosomakho-masque-connect-ip-optimizations-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="HTTP Datagram Compression">Extensions to Compress and Derive Fields in HTTP Datagrams</title>
    <seriesInfo name="Internet-Draft" value="draft-rosomakho-masque-connect-ip-optimizations-01"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author fullname="Tommy Pauly">
      <organization>Apple</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="27"/>
    <area>Web and Internet Transport</area>
    <workgroup>Multiplexed Application Substrate over QUIC Encryption</workgroup>
    <keyword>template</keyword>
    <keyword>checksum</keyword>
    <keyword>connect-ip</keyword>
    <abstract>
      <?line 40?>

<t>This document defines extensions for HTTP Datagram-based protocols that improve transmission efficiency by introducing templates for compressing or deriving datagram fields.</t>
      <t>These templates allow endpoints to define parts of datagrams that are static and can be removed, and other parts that can be derived (such as packet lengths and checksum values).</t>
      <t>Additionally, this document defines a checksum offload procedure enabling receivers to complete Internet checksums using sender-provided partial values.</t>
      <t>These optimisations reduce per-packet overhead, processing cost, and increase the effective maximum transmission unit (MTU) when datagrams are encapsulated in QUIC DATAGRAM frames.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://yaroslavros.github.io/connect-ip-optimizations/draft-rosomakho-masque-connect-ip-optimizations.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-rosomakho-masque-connect-ip-optimizations/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Multiplexed Application Substrate over QUIC Encryption Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaroslavros/connect-ip-optimizations"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The CONNECT-IP method <xref target="CONNECT-IP"/> allows an HTTP client to establish an IP tunnel through an HTTP proxy and exchange IP packets using either HTTP/3 Datagrams (<xref section="2.1" sectionFormat="of" target="HTTP-DATAGRAMS"/>) or DATAGRAM capsules (<xref section="3.5" sectionFormat="of" target="HTTP-DATAGRAMS"/>). Similarly, CONNECT-ETHERNET <xref target="CONNECT-ETHERNET"/> allows sending Ethernet frames over HTTP Datagrams. These protocols send complete packets or frames by default, including all transport and network headers. This is a simple approach, but incurs per-packet overhead due to the repeated transmission of largely invariant header fields.</t>
      <t>Other HTTP Datagram-based protocols share similar properties: datagrams often contain structured packets where many header fields remain constant across a flow while only a subset of bytes change between packets. Transmitting complete packets therefore wastes bandwidth and processing resources.</t>
      <t>This document introduces a set of optional extensions that define Processing Contexts for HTTP Datagram payloads. A Processing Context describes transformations applied to a received datagram payload prior to delivery to the target protocol and may reference a parent context, forming a processing chain.</t>
      <t>Reusable templates allow endpoints to associate a Context Identifier with a reusable packet layout consisting of static and variable byte regions. Once a template has been installed using reliable Capsules, datagrams referencing the same Context Identifier carry only the variable portions of the packet. This reduces the size of transmitted datagrams and processing overhead, while remaining compatibile with intermediaries that are unaware of these optimisations.</t>
      <t>Derived field processing allows the receiver to reconstruct certain header fields (for example packet length fields and complete checksums) based on the size and structure of the reconstructed packet. This eliminates the need for the sender to transmit such fields for every packet.</t>
      <t>In addition, this document defines a checksum offload procedure enabling endpoints to cooperatively compute Internet checksums, where the sender provides a partial checksum and the receiver completes the computation after reconstruction. This mirrors hardware checksum-offload behavior used on network interfaces and tunnel devices, reducing per-packet CPU cost for encapsulating or decapsulating CONNECT-IP and CONNECT-ETHERNET traffic.</t>
      <t>When HTTP Datagrams are encapsulated in QUIC DATAGRAM frames, these optimisations also increase the effective maximum transmission unit (MTU) by reducing the number of bytes carried inside each QUIC packet.</t>
      <t>All extensions are negotiated during the HTTP request/response handshake and signalled using Capsules on the reliable control stream. Endpoints can always fall back to transmitting complete datagrams using Context Identifier 0, which represents unoptimised datagrams containing the full payload as defined by the underlying HTTP Datagram protocol.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The following terms are used in this document:</t>
      <dl>
        <dt>Context Identifier (Context ID):</dt>
        <dd>
          <t>A numeric identifier associated with a Processing Context. Context ID encoding and allocation follow the rules defined in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>. Context ID 0 indicates that the datagram payload is delivered without additional processing as defined by the underlying HTTP Datagram protocol.</t>
        </dd>
        <dt>Processing Context:</dt>
        <dd>
          <t>A set of rules describing how an HTTP Datagram payload is transformed before delivery to the target protocol. A Processing Context may reference a parent context, forming a processing chain. Processing Contexts are immutable once created.</t>
        </dd>
        <dt>Template:</dt>
        <dd>
          <t>A reusable packet layout consisting of a sequence of static and variable segments. Static segments contain bytes removed from optimized datagrams, while variable segments correspond to bytes still carried in the datagram payload.</t>
        </dd>
        <dt>Derived Field:</dt>
        <dd>
          <t>A header field whose value is generated by the receiver during reconstruction and written into the reconstructed packet rather than being transmitted in the datagram payload. Derived fields include length fields and complete checksums.</t>
        </dd>
        <dt>Checksum Offload:</dt>
        <dd>
          <t>A capability allowing the receiver to complete the Internet checksum according to <xref target="INCREMENTAL-CHECKSUM"/> using a sender-provided partial checksum after reconstruction of the packet.</t>
        </dd>
        <dt>Capsule:</dt>
        <dd>
          <t>A reliable control-stream message, as defined in <xref section="3" sectionFormat="of" target="HTTP-DATAGRAMS"/>, used in this specification to signal creation, acknowledgement, or deletion of Processing Contexts.</t>
        </dd>
      </dl>
    </section>
    <section anchor="negotiation">
      <name>Negotiation of Capabilities</name>
      <t>Endpoints negotiate support for HTTP Datagram processing contexts during the HTTP request/response handshake by using the <tt>http-datagram-contexts</tt> HTTP header field, whose value is a Structured Field Dictionary as defined in <xref section="3.2" sectionFormat="of" target="STRUCTURED-HTTP"/>.</t>
      <section anchor="header-definition">
        <name>Header Definition</name>
        <figure anchor="fig-http-datagram-contexts-header">
          <name>http-datagram-contexts header field</name>
          <artwork><![CDATA[
http-datagram-contexts = sf-dictionary
]]></artwork>
        </figure>
        <t>This document defines the following optional dictionary keys:</t>
        <dl>
          <dt><tt>max-templates</tt> (Integer):</dt>
          <dd>
            <t>Maximum number of concurrently active template contexts the sender is willing to maintain for templates created by the peer. Absence of this key or value of 0 indicates that the sender does not support reusable templates.</t>
          </dd>
          <dt><tt>max-templates-segments</tt> (Integer):</dt>
          <dd>
            <t>Maximum number of static segments accepted within a single template. Absence of this key or value of 0 indicates that the sender does not impose a limit on number of static segments in a single template.</t>
          </dd>
          <dt><tt>derived</tt> (Inner List):</dt>
          <dd>
            <t>A list of supported Derived Field Types as defined in <xref target="iana-derived-fields"/>.</t>
          </dd>
          <dt><tt>checksum</tt> (Boolean):</dt>
          <dd>
            <t>Indicates support for the checksum offload procedure defined in this document. A value of ?1 means the endpoint is willing to complete checksums using sender-provided partial values. If omitted or set to ?0, checksum offload is not supported.</t>
          </dd>
          <dt><tt>mtu</tt> (Integer):</dt>
          <dd>
            <t>Upper limit on maximum reconstructed packet size the receiver is willing to accept.</t>
          </dd>
        </dl>
        <t>Endpoints <bcp14>MUST</bcp14> ignore unknown dictionary members. The absence of a member implies that the corresponding capability is not supported for contexts created by the peer.</t>
      </section>
      <section anchor="negotiation-behavior">
        <name>Negotiation Behavior</name>
        <t>Capabilities are directional. Each endpoint advertises the processing contexts it is willing to receive and maintain for datagrams sent by the peer. An endpoint <bcp14>MAY</bcp14> create a context only if the peer advertised support for the corresponding capability.</t>
        <section anchor="templates">
          <name>Templates</name>
          <t>If the peer advertises the <tt>max-templates</tt>  value greater than 0, the endpoint <bcp14>MAY</bcp14> create template contexts up to that limit using capsules defined in <xref target="capsules"/>.</t>
          <t>An endpoint <bcp14>MUST NOT</bcp14> create templates exceeding the peer's advertised <tt>max-template-segments</tt> limit when that parameter is present.</t>
          <t>If the peer advertises an <tt>mtu</tt> limit, the sender <bcp14>MUST NOT</bcp14> transmit a datagram that would reconstruct into a packet larger than the advertised limit after all processing contexts have been applied.</t>
        </section>
        <section anchor="derived-fields">
          <name>Derived Fields</name>
          <t>An endpoint <bcp14>MAY</bcp14> create a derived context only if every operation in the capsule appears in the peer's <tt>derived</tt> list.</t>
        </section>
        <section anchor="checksum-offload">
          <name>Checksum Offload</name>
          <t>An endpoint <bcp14>MAY</bcp14> create a checksum offload context only if the peer advertised <tt>checksum=?1</tt>.</t>
        </section>
      </section>
      <section anchor="example">
        <name> Example</name>
        <t>HTTP/3 sample request (client to proxy):</t>
        <figure anchor="fig-connect-ip-http-datagram-contexts-request-example">
          <name>CONNECT-IP with http-datagram-contexts request example</name>
          <artwork><![CDATA[
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /.well-known/masque/ip/*/*/
:authority = proxy.example.net
capsule-protocol = ?1
http-datagram-contexts = max-templates=20000, max-templates-segments=32, derived=(0 2 4), checksum=?1, mtu=1500
]]></artwork>
        </figure>
        <t>HTTP/3 sample response (proxy to client):</t>
        <figure anchor="fig-connect-ip-http-datagram-contexts-response-example">
          <name>CONNECT-IP with http-datagram-contexts response example</name>
          <artwork><![CDATA[
:status = 200
capsule-protocol = ?1
http-datagram-contexts = max-templates=65535, derived=(0 1), checksum=?0, mtu=1500
]]></artwork>
        </figure>
        <t>In this example, both peers support reusable templates. The proxy supports a subset of derived fields (ipv4-total-length, ipv4-udp-length and ipv4-header-checksum) and the checksum offload. The client supports a different subset of derived fields (ipv4-total-length and ipv6-payload-length) without the checksum offload. Both endpoints indicate that the maximum packet size after reconstruction must not exceed 1500 bytes.</t>
      </section>
    </section>
    <section anchor="capsules">
      <name>Processing Context Capsules</name>
      <t>This specification defines multiple capsule types to construct, acknowledge, and delete processing contexts.</t>
      <section anchor="processing-context-overview">
        <name>Processing Context Overview</name>
        <section anchor="assign">
          <name>Processing Context Construction</name>
          <t>Processing contexts are created using capsules that define a new unique non-zero <tt>Context ID</tt> encoded as a variable-length integer. A Context ID <bcp14>MUST NOT</bcp14> be reused. As specified in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>, even-numbered Context IDs are allocated by the client and odd-numbered by the proxy.</t>
          <t>Each processing context <bcp14>MAY</bcp14> reference an already-defined parent context using <tt>Next Context ID</tt> encoded as a variable-length integer. A context <bcp14>MUST</bcp14> reference only a Context ID previously defined by the peer. Forward references are not permitted. Processing context without a parent is identified by <tt>Next Context ID</tt> set to 0. A processing chain <bcp14>MUST NOT</bcp14> contain more than one context of the same type. A receiver that detects such a condition <bcp14>MUST</bcp14> treat the context as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
          <t>A receiver of an *_ASSIGN capsule with an invalid <tt>Context ID</tt> or unknown <tt>Next Context ID</tt> <bcp14>MUST</bcp14> treat it as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
        <section anchor="ack">
          <name>Processing Context Acknowledgement</name>
          <t>For each *_ASSIGN capsule received, the receiver <bcp14>MUST</bcp14> transmit the corresponding *_ACK capsule after successfully installing the context.</t>
          <t>Endpoints <bcp14>MAY</bcp14> transmit datagrams referencing contexts prior to receiving the *_ACK. A receiver <bcp14>MAY</bcp14> buffer datagrams referencing unknown Context IDs but <bcp14>MUST</bcp14> bound buffering by time and memory.</t>
          <t>A receiver of an *_ACK capsule with an unknown Context ID or any data after Context ID <bcp14>MUST</bcp14> treat it as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
        <section anchor="close">
          <name>Processing Context Closure</name>
          <t>Processing Contexts are retired by sending corresponding *_CLOSE capsule. Closing a context implicitly closes all contexts that reference it directly or transitively.</t>
          <t>A receiver of a *_CLOSE capsule <bcp14>SHOULD</bcp14> retain the closed context and its descendants for a short period to allow in-flight datagrams to arrive, but <bcp14>MUST</bcp14> bound the retention time and memory usage.</t>
          <t>*_CLOSE capsules with unknown Context ID or any data after Context ID <bcp14>MUST</bcp14> be treated as malformed. Receiver of such capsules <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
        </section>
      </section>
      <section anchor="template-capsules">
        <name>Template Capsules</name>
        <section anchor="template-assign">
          <name>TEMPLATE_ASSIGN Capsule</name>
          <figure anchor="fig-template-assign-capsule">
            <name>TEMPLATE_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Static Segment (..) ...
}
]]></artwork>
          </figure>
          <t>The TEMPLATE_ASSIGN capsule contains a sequence of one or more Static Segments.</t>
          <figure anchor="fig-static-segment">
            <name>Static Segment Format</name>
            <artwork><![CDATA[
Static Segment {
  Segment Offset (i),
  Segment Length (i),
  Segment Payload (..),
}
]]></artwork>
          </figure>
          <t>Each Static Segment contains following fields:</t>
          <dl>
            <dt>Segment Offset:</dt>
            <dd>
              <t>Byte offset from the start of the reconstructed packet, encoded as a variable-length integer</t>
            </dd>
            <dt>Segment Length:</dt>
            <dd>
              <t>Length of the Segement Payload field, encoded as a variable-length integer</t>
            </dd>
            <dt>Segment Payload:</dt>
            <dd>
              <t>Static bytes to insert at the Segment Offset</t>
            </dd>
          </dl>
          <section anchor="parsing-and-validation">
            <name>Parsing and validation</name>
            <t>The receiver parses a TEMPLATE_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, and one or more static segments whose encodings consume exactly the remaining length of the capsule. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>Each Static Segment consists of a Segment Offset, a Segment Length, and exactly Segment Length octets of Segment Payload. Static segments <bcp14>MUST</bcp14> appear in strictly increasing Segment Offset order and <bcp14>MUST NOT</bcp14> overlap. There <bcp14>MUST</bcp14> be at least 1 byte between consecutive segments.</t>
            <t>A receiver that advertised a <tt>max-templates-segments</tt> limit <bcp14>MUST</bcp14> ensure that the template does not contain more static segments. A receiver that advertised a <tt>mtu</tt> limit in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> ensure that the sum of Segment Offset and Segment Length of the final segment does not exceed the MTU limit. Final reconstructed packet size validation is performed during packet reconstruction (<xref target="reconstruction"/>). The capsule <bcp14>MUST</bcp14> end immediately after the last static segment.</t>
            <t>If any of the capsule fields are malformed upon reception, the receiver of the capsule <bcp14>MUST</bcp14> follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>A receiver that has already accepted the maximum number of templates it advertised via the <tt>max-templates</tt> member in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> treat any additional TEMPLATE_ASSIGN capsule an error and <bcp14>MUST</bcp14> follow the same error-handling procedure.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
          </section>
        </section>
        <section anchor="templateack-capsule">
          <name>TEMPLATE_ACK Capsule</name>
          <figure anchor="fig-template-ack-capsule">
            <name>TEMPLATE_ACK Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_ACK Capsule {
  Type (i) = 0x3ee31440,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the TEMPLATE_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="templateclose-capsule">
          <name>TEMPLATE_CLOSE Capsule</name>
          <figure anchor="fig-template-close-capsule">
            <name>TEMPLATE_CLOSE Capsule Format</name>
            <artwork><![CDATA[
TEMPLATE_CLOSE Capsule {
  Type (i) = 0x3ee31441,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the TEMPLATE_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
      <section anchor="derived-field-capsules">
        <name>Derived Field Capsules</name>
        <section anchor="derivedassign-capsule">
          <name>DERIVED_ASSIGN Capsule</name>
          <figure anchor="fig-derived-assign-capsule">
            <name>DERIVED_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Derived Field Type (i) ...
}
]]></artwork>
          </figure>
          <t>The DERIVED_ASSIGN capsule defines a processing context that generates and inserts one or more derived fields into the reconstructed packet. The sender does not transmit these fields in the datagram payload.</t>
          <section anchor="parsing-and-validation-1">
            <name>Parsing and validation</name>
            <t>The receiver parses a DERIVED_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, and one or more Derived Field Type values encoded as variable-length integers. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>If a Derived Field Type is not present in the receiver's advertised <tt>derived</tt> capability list in <tt>http-datagram-contexts</tt> or if any Derived Field Type appears more than once in the capsule, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
          </section>
        </section>
        <section anchor="derivedack-capsule">
          <name>DERIVED_ACK Capsule</name>
          <figure anchor="fig-derived-ack-capsule">
            <name>DERIVED_ACK Capsule Format</name>
            <artwork><![CDATA[
DERIVED_ACK Capsule {
  Type (i) = 0x3ee31443,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the DERIVED_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="derivedclose-capsule">
          <name>DERIVED_CLOSE Capsule</name>
          <figure anchor="fig-derived-close-capsule">
            <name>DERIVED_CLOSE Capsule Format</name>
            <artwork><![CDATA[
DERIVED_CLOSE Capsule {
  Type (i) = 0x3ee31444,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the DERIVED_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
      <section anchor="checksum-offload-capsules">
        <name>Checksum Offload Capsules</name>
        <section anchor="checksumassign-capsule">
          <name>CHECKSUM_ASSIGN Capsule</name>
          <figure anchor="fig-checksum-assign-capsule">
            <name>CHECKSUM_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_ASSIGN Capsule {
  Type (i) = 0x3ee31445,
  Length (i),
  Context ID (i),
  Next Context ID (i),
  Checksum Field Offset (i),
  Checksum Start Offset (i),
}
]]></artwork>
          </figure>
          <t>The CHECKSUM_ASSIGN capsule defines a processing context that completes an Internet checksum for the reconstructed packet using a sender-provided partial checksum.</t>
          <t>In addition to <tt>Context ID</tt> and <tt>Next Context ID</tt> CHECKSUM_ASSIGN capsule contains following fields encoded as variable-length integers:</t>
          <dl>
            <dt><tt>Checksum Field Offset</tt>:</dt>
            <dd>
              <t>Byte offset of the 16-bit Internet checksum field within the reconstructed packet</t>
            </dd>
            <dt><tt>Checksum Start Offset</tt>:</dt>
            <dd>
              <t>Byte offset where checksum coverage begins.  Coverage runs from this offset to the end of the reconstructed packet.</t>
            </dd>
          </dl>
          <section anchor="parsing-and-validation-2">
            <name>Parsing and validation</name>
            <t>The receiver parses a CHECKSUM_ASSIGN capsule by reading, in order: the Context ID, the Next Context ID, Checksum Field Offset and Checksum Start Offset. Context ID and Next Context ID processing is described in <xref target="assign"/>.</t>
            <t>If the peer did not advertise <tt>checksum=?1</tt> in <tt>http-datagram-contexts</tt>, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the error-handling procedure defined in <xref section="3.3" sectionFormat="of" target="HTTP-DATAGRAMS"/>.</t>
            <t>If <tt>Checksum Start Offset</tt> is 0, the receiver <bcp14>MUST</bcp14> treat the capsule as malformed and follow the same error-handling procedure.</t>
            <t>Per-packet validation uses the reconstruction procedure described in <xref target="reconstruction"/>.</t>
          </section>
        </section>
        <section anchor="checksumack-capsule">
          <name>CHECKSUM_ACK Capsule</name>
          <figure anchor="fig-checksum-ack-capsule">
            <name>CHECKSUM_ACK Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_ACK Capsule {
  Type (i) = 0x3ee31446,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the CHECKSUM_ACK capsule is described in <xref target="ack"/></t>
        </section>
        <section anchor="checksumclose-capsule">
          <name>CHECKSUM_CLOSE Capsule</name>
          <figure anchor="fig-checksum-close-capsule">
            <name>CHECKSUM_CLOSE Capsule Format</name>
            <artwork><![CDATA[
CHECKSUM_CLOSE Capsule {
  Type (i) = 0x3ee31447,
  Length (i),
  Context ID (i),
}
]]></artwork>
          </figure>
          <t>Processing of the CHECKSUM_CLOSE capsule is described in <xref target="close"/></t>
        </section>
      </section>
    </section>
    <section anchor="processing-context-operation">
      <name>Processing Context Operation</name>
      <t>This section defines how endpoints construct and consume HTTP Datagram payloads using Processing Contexts.</t>
      <t>A datagram carries a Context Identifier that selects the initial Processing Context. A context <bcp14>MAY</bcp14> reference a parent context using Next Context ID. The complete behavior is defined by recursively following parent contexts until reaching Context ID 0.</t>
      <t>Context ID 0 indicates that no processing is applied and the payload is delivered unchanged to the underlying HTTP Datagram protocol.</t>
      <section anchor="sender-behavior">
        <name>Sender behavior</name>
        <t>When sending a datagram using a Processing Context, the sender constructs the payload so that the receiver can reconstruct the final packet after applying the processing chain.</t>
        <t>The sender <bcp14>MUST</bcp14> use a Context ID only after the corresponding *_ASSIGN capsule has been transmitted.</t>
        <section anchor="template-contexts">
          <name>Template Contexts</name>
          <t>If the selected context chain contains a Template context, the sender constructs the datagram payload as the concatenation of all variable byte regions not covered by static segments.</t>
          <t>Variable regions are emitted in strictly increasing offset order starting at offset 0.</t>
          <t>If the context chain contains no Template context, the payload <bcp14>MUST</bcp14> be the complete packet.</t>
        </section>
        <section anchor="derived-field-contexts">
          <name>Derived Field Contexts</name>
          <t>Derived fields are not transmitted by the sender. When a derived context is in use, the sender <bcp14>MUST</bcp14> remove the octets corresponding to derived fields from the datagram payload. These octets are supplied by the receiver during reconstruction.</t>
          <t>The sender <bcp14>MUST</bcp14> construct the payload as if the derived field octets were not part of the variable regions. That is, the payload <bcp14>MUST</bcp14> contain only the remaining variable octets in strictly increasing offset order.</t>
        </section>
        <section anchor="checksum-offload-contexts">
          <name>Checksum Offload Contexts</name>
          <t>If the context chain contains a checksum offload context, the sender <bcp14>MUST</bcp14> place a precomputed partial Internet checksum value into the checksum field at Checksum Field Offset in the reconstructed packet image prior to transmission. This value is combined with the receiver computation as described in <xref target="reconstruction"/>.</t>
        </section>
        <section anchor="context-selection">
          <name>Context Selection</name>
          <t>If a packet does not match any available context, the sender <bcp14>MUST</bcp14> use Context ID 0 and transmit the complete packet.</t>
        </section>
      </section>
      <section anchor="reconstruction">
        <name>Receiver behavior</name>
        <t>Upon receiving an HTTP Datagram with a non-zero Context ID, the receiver retrieves the referenced Processing Context and recursively resolves its parent contexts until Context ID 0 is reached.</t>
        <t>If any referenced context is unknown, the receiver <bcp14>MAY</bcp14> buffer the datagram as described in <xref target="ack"/> or drop it.</t>
        <t>If multiple processing contexts are present in a chain, the receiver <bcp14>MUST</bcp14> apply them in the following order:</t>
        <ol spacing="normal" type="1"><li>
            <t>Template reconstruction (if present)</t>
          </li>
          <li>
            <t>Derived field processing (if present)</t>
          </li>
          <li>
            <t>Checksum offload processing (if present)</t>
          </li>
        </ol>
        <section anchor="template-reconstruction">
          <name>Template Reconstruction</name>
          <t>If a Template context is present, the receiver reconstructs the packet as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Allocate a buffer large enough to contain the reconstructed packet.</t>
            </li>
            <li>
              <t>Insert static segment bytes at their specified offsets.</t>
            </li>
            <li>
              <t>Fill all remaining gaps using bytes from the datagram payload in strictly increasing offset order.</t>
            </li>
          </ol>
          <t>If payload bytes are exhausted before all gaps have been filled the datagram <bcp14>MUST</bcp14> be dropped.</t>
          <t>Packets larger than the advertised <tt>mtu</tt> in <tt>http-datagram-contexts</tt> <bcp14>MUST</bcp14> be dropped.</t>
        </section>
        <section anchor="derived-field-processing">
          <name>Derived Field Processing</name>
          <t>For each derived field present in the context chain, the receiver computes the field value and inserts it into the reconstructed packet at the location defined by the derived field type.</t>
          <t>Derived fields are inserted into the packet image and therefore increase the reconstructed packet size. The receiver <bcp14>MUST</bcp14> compute derived field values based on the final reconstructed packet size and structure.</t>
          <t>Initial field definitions are specified in <xref target="iana-derived-fields"/>.</t>
          <t>If the required header cannot be located, the packet <bcp14>MUST</bcp14> be dropped.</t>
        </section>
        <section anchor="checksum-offload-processing">
          <name>Checksum Offload Processing</name>
          <t>If a checksum offload context is present, the receiver completes the Internet checksum after all derived fields have been inserted.</t>
          <t>The receiver completes the checksum as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Treat the checksum field as zero.</t>
            </li>
            <li>
              <t>Compute the one's-complement sum from Checksum Start Offset to L.</t>
            </li>
            <li>
              <t>Add (fold) the 16-bit value currently present at the checksum field.</t>
            </li>
            <li>
              <t>Write the final one's-complement result to the checksum field.</t>
            </li>
          </ol>
          <t>If any offset exceeds the reconstructed packet length, the packet <bcp14>MUST</bcp14> be dropped.</t>
        </section>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section illustrates how contexts are created and how senders form compact payloads. All offsets and lengths are in bits in the packet diagrams and field tables. All offsets and lengths are in bytes in segment tables and sample capsules.</t>
      <section anchor="connect-ip-tcp-over-ipv6-with-template-derived-fields-and-checksum-offload">
        <name>CONNECT-IP: TCP over IPv6 with template, derived fields and checksum offload</name>
        <t>Original sample <xref target="TCP"/> over <xref target="IPv6"/> packet layout is illustrated below. In addition to basic IPv6 and TCP headers it contains Timestamp option as defined in <xref section="3" sectionFormat="of" target="TCP-PERF"/>.</t>
        <t>This packet is to be transmitted from the client to the proxy over CONNECT-IP.</t>
        <figure anchor="original-tcp-ipv6">
          <name>Example TCP over IPv6 packet before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="704" width="576" viewBox="0 0 576 704" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,688" fill="none" stroke="black"/>
                <path d="M 80,48 L 80,96" fill="none" stroke="black"/>
                <path d="M 80,448 L 80,496" fill="none" stroke="black"/>
                <path d="M 144,32 L 144,48" fill="none" stroke="black"/>
                <path d="M 144,544 L 144,592" fill="none" stroke="black"/>
                <path d="M 208,48 L 208,96" fill="none" stroke="black"/>
                <path d="M 280,32 L 280,48" fill="none" stroke="black"/>
                <path d="M 280,96 L 280,144" fill="none" stroke="black"/>
                <path d="M 280,304 L 280,352" fill="none" stroke="black"/>
                <path d="M 280,448 L 280,592" fill="none" stroke="black"/>
                <path d="M 416,32 L 416,48" fill="none" stroke="black"/>
                <path d="M 416,96 L 416,144" fill="none" stroke="black"/>
                <path d="M 416,544 L 416,592" fill="none" stroke="black"/>
                <path d="M 552,32 L 552,688" fill="none" stroke="black"/>
                <path d="M 568,64 L 568,96" fill="none" stroke="black"/>
                <path d="M 568,256 L 568,288" fill="none" stroke="black"/>
                <path d="M 568,320 L 568,400" fill="none" stroke="black"/>
                <path d="M 568,576 L 568,672" fill="none" stroke="black"/>
                <path d="M 8,48 L 552,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 552,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 8,224 L 552,224" fill="none" stroke="black"/>
                <path d="M 8,304 L 552,304" fill="none" stroke="black"/>
                <path d="M 8,352 L 552,352" fill="none" stroke="black"/>
                <path d="M 8,400 L 552,400" fill="none" stroke="black"/>
                <path d="M 8,448 L 552,448" fill="none" stroke="black"/>
                <path d="M 8,496 L 552,496" fill="none" stroke="black"/>
                <path d="M 8,544 L 552,544" fill="none" stroke="black"/>
                <path d="M 8,592 L 552,592" fill="none" stroke="black"/>
                <path d="M 8,640 L 552,640" fill="none" stroke="black"/>
                <path d="M 8,688 L 552,688" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,672 564,666.4 564,677.6" fill="black" transform="rotate(90,568,672)"/>
                <polygon class="arrowhead" points="576,320 564,314.4 564,325.6" fill="black" transform="rotate(270,568,320)"/>
                <polygon class="arrowhead" points="576,288 564,282.4 564,293.6" fill="black" transform="rotate(90,568,288)"/>
                <polygon class="arrowhead" points="576,64 564,58.4 564,69.6" fill="black" transform="rotate(270,568,64)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="136" y="36">7</text>
                  <text x="152" y="36">8</text>
                  <text x="268" y="36">15</text>
                  <text x="292" y="36">16</text>
                  <text x="404" y="36">23</text>
                  <text x="428" y="36">16</text>
                  <text x="540" y="36">31</text>
                  <text x="16" y="68">0</text>
                  <text x="32" y="68">1</text>
                  <text x="48" y="68">1</text>
                  <text x="64" y="68">0</text>
                  <text x="140" y="68">0x00</text>
                  <text x="376" y="68">0x4bcde</text>
                  <text x="40" y="84">Version</text>
                  <text x="120" y="84">Traffic</text>
                  <text x="176" y="84">Class</text>
                  <text x="348" y="84">Flow</text>
                  <text x="392" y="84">Label</text>
                  <text x="140" y="116">0x0020</text>
                  <text x="348" y="116">0x06</text>
                  <text x="484" y="116">0x79</text>
                  <text x="568" y="116">I</text>
                  <text x="112" y="132">Payload</text>
                  <text x="172" y="132">length</text>
                  <text x="316" y="132">Next</text>
                  <text x="364" y="132">header</text>
                  <text x="456" y="132">Hop</text>
                  <text x="496" y="132">limit</text>
                  <text x="568" y="132">P</text>
                  <text x="568" y="164">H</text>
                  <text x="280" y="180">2001:0db8:85a3:0000:0000:8a2e:0370:7334</text>
                  <text x="568" y="180">E</text>
                  <text x="244" y="196">Source</text>
                  <text x="304" y="196">Address</text>
                  <text x="568" y="196">A</text>
                  <text x="568" y="212">D</text>
                  <text x="568" y="228">E</text>
                  <text x="568" y="244">R</text>
                  <text x="280" y="260">2001:0db8:a42b:0000:0000:7c3a:143a:1529</text>
                  <text x="240" y="276">Destination</text>
                  <text x="320" y="276">Address</text>
                  <text x="140" y="324">0x0050</text>
                  <text x="412" y="324">0xd475</text>
                  <text x="124" y="340">Source</text>
                  <text x="172" y="340">port</text>
                  <text x="392" y="340">Destination</text>
                  <text x="460" y="340">port</text>
                  <text x="276" y="372">0x6caa4bd7</text>
                  <text x="252" y="388">Sequence</text>
                  <text x="316" y="388">number</text>
                  <text x="276" y="420">0x9b16794e</text>
                  <text x="568" y="420">T</text>
                  <text x="252" y="436">Acknowledgment</text>
                  <text x="340" y="436">number</text>
                  <text x="568" y="436">C</text>
                  <text x="568" y="452">P</text>
                  <text x="16" y="468">1</text>
                  <text x="32" y="468">0</text>
                  <text x="48" y="468">0</text>
                  <text x="64" y="468">0</text>
                  <text x="88" y="468">0</text>
                  <text x="104" y="468">0</text>
                  <text x="120" y="468">0</text>
                  <text x="136" y="468">0</text>
                  <text x="152" y="468">0</text>
                  <text x="168" y="468">0</text>
                  <text x="184" y="468">0</text>
                  <text x="200" y="468">1</text>
                  <text x="216" y="468">0</text>
                  <text x="232" y="468">0</text>
                  <text x="248" y="468">0</text>
                  <text x="264" y="468">0</text>
                  <text x="412" y="468">0x041e</text>
                  <text x="24" y="484">Hdr</text>
                  <text x="56" y="484">Len</text>
                  <text x="152" y="484">TCP</text>
                  <text x="192" y="484">Flags</text>
                  <text x="412" y="484">Window</text>
                  <text x="568" y="484">H</text>
                  <text x="568" y="500">E</text>
                  <text x="140" y="516">0x8f6b</text>
                  <text x="412" y="516">0x0000</text>
                  <text x="568" y="516">A</text>
                  <text x="140" y="532">Checksum</text>
                  <text x="380" y="532">Urgent</text>
                  <text x="440" y="532">Pointer</text>
                  <text x="568" y="532">D</text>
                  <text x="568" y="548">E</text>
                  <text x="76" y="564">0x01</text>
                  <text x="212" y="564">0x01</text>
                  <text x="348" y="564">0x08</text>
                  <text x="484" y="564">0x0a</text>
                  <text x="568" y="564">R</text>
                  <text x="48" y="580">No-Op</text>
                  <text x="100" y="580">Option</text>
                  <text x="184" y="580">No-Op</text>
                  <text x="236" y="580">Option</text>
                  <text x="320" y="580">TimeStamp</text>
                  <text x="388" y="580">Option</text>
                  <text x="484" y="580">Length</text>
                  <text x="276" y="612">0x119a5db3</text>
                  <text x="256" y="628">Timestamp</text>
                  <text x="320" y="628">value</text>
                  <text x="276" y="660">0xd9b4d48d</text>
                  <text x="232" y="676">Timestamp</text>
                  <text x="292" y="676">echo</text>
                  <text x="336" y="676">reply</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0              7|8             15|16            23|16            31|
+--------+-------+-------+--------+----------------+----------------+
|0 1 1 0 |     0x00      |                 0x4bcde                  | ^
|Version | Traffic Class |               Flow Label                 | |
+--------+---------------+--------+----------------+----------------+ |
|             0x0020              |      0x06      |      0x79      | I
|         Payload length          |  Next header   |   Hop limit    | P
+---------------------------------+----------------+----------------+
|                                                                   | H
|              2001:0db8:85a3:0000:0000:8a2e:0370:7334              | E
|                          Source Address                           | A
|                                                                   | D
+-------------------------------------------------------------------+ E
|                                                                   | R
|              2001:0db8:a42b:0000:0000:7c3a:143a:1529              | |
|                       Destination Address                         | |
|                                                                   | v
+---------------------------------+---------------------------------+
|             0x0050              |             0xd475              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|                            0x6caa4bd7                             | |
|                          Sequence number                          | |
+-------------------------------------------------------------------+ |
|                            0x9b16794e                             | T
|                       Acknowledgment number                       | C
+--------+------------------------+---------------------------------+ P
|1 0 0 0 |0 0 0 0 0 0 0 1 0 0 0 0 |             0x041e              |
|Hdr Len |       TCP Flags        |             Window              | H
+--------+------------------------+---------------------------------+ E
|             0x8f6b              |             0x0000              | A
|            Checksum             |         Urgent Pointer          | D
+----------------+----------------+----------------+----------------+ E
|      0x01      |      0x01      |      0x08      |      0x0a      | R
|  No-Op Option  |  No-Op Option  |TimeStamp Option|     Length     | |
+----------------+----------------+----------------+----------------+ |
|                            0x119a5db3                             | |
|                          Timestamp value                          | |
+-------------------------------------------------------------------+ |
|                            0xd9b4d48d                             | |
|                       Timestamp echo reply                        | v
+-------------------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>This example assumes that the peer supports templates with at least two segments per template, IPv6 payload length derived field and checksum offloading. These capabilities were communicated using the following <tt>http-datagram-contexts</tt> HTTP field in proxy response confirming CONNECT-IP extended CONNECT.</t>
        <figure anchor="fig-http-datagram-contexts-example-1">
          <name>http-datagram-contexts response example</name>
          <artwork><![CDATA[
http-datagram-contexts = max-templates=1, max-templates-segments=2, derived=(1), checksum=?1, mtu=1500
]]></artwork>
        </figure>
        <t>Since the proxy does not support TCP checksum derivation, but it supports checksum offloading, the client calculates checksum of IPv6 pseudo-header and places it in the TCP checksum field. Context for the offloaded checksum is defined using the CHECKSUM_ASSIGN capsule:</t>
        <figure anchor="ipv6-tcp-checksum-assign">
          <name>CHECKSUM_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
CHECKSUM_ASSIGN Capsule {
  Type (i) = 0x3ee31445,
  Length (i) = 4,
  Context ID (i) = 2,
  Next Context ID (i) = 0,
  Checksum Field Offset (i) = 56,
  Checksum Start Offset (i) = 40,
}
]]></artwork>
        </figure>
        <t>Payload length field in IPv6 header can derived by the peer, so it is removed before calculating static segments. Resulting context for the derived field is defined using DERIVED_ASSIGN capsule:</t>
        <figure anchor="ipv6-tcp-derived-assign">
          <name>DERIVED_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i) = 3,
  Context ID (i) = 4,
  Next Context ID (i) = 2,
  Derived Field Type (i) = 1
}
]]></artwork>
        </figure>
        <t>The table below illustrates fields present in IPv6 and TCP headers after derived field was removed, their offsets in bits from the beginning of the packet and whether they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv6-tcp-fields">
          <name>IPv6 and TCP header fields in example packet</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0110b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x00</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">Flow label</td>
              <td align="left">20</td>
              <td align="left">0x4bcde</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">32</td>
              <td align="left">Next header</td>
              <td align="left">8</td>
              <td align="left">0x06</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">40</td>
              <td align="left">Hop limit</td>
              <td align="left">8</td>
              <td align="left">0x79</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Source address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:85a3::8a2e:0370:7334</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">176</td>
              <td align="left">Destination address</td>
              <td align="left">128</td>
              <td align="left">2001:0db8:a42b::7c3a:143a:1529</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">304</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0x0050</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">320</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0xd475</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">336</td>
              <td align="left">Sequence number</td>
              <td align="left">32</td>
              <td align="left">0x6caa4bd7</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">368</td>
              <td align="left">Acknowledgement number</td>
              <td align="left">32</td>
              <td align="left">0x9b16794e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">400</td>
              <td align="left">TCP header length</td>
              <td align="left">4</td>
              <td align="left">1000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">404</td>
              <td align="left">TCP Flags</td>
              <td align="left">12</td>
              <td align="left">000000010000b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">416</td>
              <td align="left">Window</td>
              <td align="left">16</td>
              <td align="left">0x041e</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">432</td>
              <td align="left">Checksum</td>
              <td align="left">16</td>
              <td align="left">0x8f6b</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">448</td>
              <td align="left">Urgent pointer</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">464</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">472</td>
              <td align="left">No-Op option</td>
              <td align="left">8</td>
              <td align="left">0x01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">480</td>
              <td align="left">Timestamp option</td>
              <td align="left">8</td>
              <td align="left">0x08</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">488</td>
              <td align="left">Timestamp option length</td>
              <td align="left">8</td>
              <td align="left">0x0a</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">496</td>
              <td align="left">Timestamp value</td>
              <td align="left">32</td>
              <td align="left">0x119a5db3</td>
              <td align="left">No</td>
            </tr>
            <tr>
              <td align="left">528</td>
              <td align="left">Timestamp echo reply</td>
              <td align="left">32</td>
              <td align="left">0xd9b4d48d</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>Static segments model the invariant parts except for the isolated 4-bit TCP header length.</t>
        <t>Resulting static segments:</t>
        <table anchor="ipv6-tcp-segments">
          <name>Static segments for example IPv6/TCP packet</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">42</td>
              <td align="left">Version, Traffic Class, Flow Label, Next header, Hop limit, Source address, Destination address, Source port, Destination port</td>
              <td align="left">0x6004bcde067920010db885a3...</td>
            </tr>
            <tr>
              <td align="left">56</td>
              <td align="left">6</td>
              <td align="left">Urgent pointer, 2 No-Op TCP options, Timestamp option code and length</td>
              <td align="left">0x00000101080a</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting TEMPLATE_ASSIGN capsule with client-allocated even context id is illustrated below:</t>
        <figure anchor="ipv6-tcp-template-assign">
          <name>TEMPLATE_ASSIGN Capsule for example IPv6/TCP packet</name>
          <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i) = 54,
  Context ID (i) = 6,
  Next Context ID (i) = 4,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 42,
    Segment Payload = 0x6004bcde067920010db885a3000000008a2e0370733420010db8a42b000000007c3a143a15290050d475,
  },
  Static Segment {
    Segment Offset (i) = 56,
    Segment Length (i) = 6,
    Segment Payload = 0x00000101080a,
  }
}
]]></artwork>
        </figure>
        <t>The resulting processing context chain reduces per-packet overhead by removing 50 bytes of repeated header material, increasing the effective MTU when datagrams are encapsulated in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order. Packets that do not match this template (for example packets with IPv6 extension headers or without TCP options) are sent using Context ID 0 or associated with a new context.</t>
        <t>Upon receiving the datagram with Context ID 6, proxy re-assembles the datagram by concatenating static and variable segments according to the offsets, re-calculates Payload Length and inserts it into IPv6 header and completes the TCP checksum using the sender-provided pseudo-header partial checksum.</t>
      </section>
      <section anchor="connect-ethernet-udp-over-ipv4-with-template-and-derived-fields">
        <name>CONNECT-ETHERNET: UDP over IPv4 with template and derived fields</name>
        <t>Original sample <xref target="UDP"/> over <xref target="IPv4"/> Ethernet frame layout is illustrated below.</t>
        <t>This frame is to be transmitted from the proxy to the client over CONNECT-ETHERNET.</t>
        <figure anchor="original-udp-ipv4-ethernet">
          <name>Example UDP over IPv4 Ethernet frame before optimization</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="576" viewBox="0 0 576 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,192" fill="none" stroke="black"/>
                <path d="M 8,224 L 8,624" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,48" fill="none" stroke="black"/>
                <path d="M 80,240 L 80,288" fill="none" stroke="black"/>
                <path d="M 144,224 L 144,288" fill="none" stroke="black"/>
                <path d="M 144,336 L 144,384" fill="none" stroke="black"/>
                <path d="M 152,32 L 152,48" fill="none" stroke="black"/>
                <path d="M 152,144 L 152,192" fill="none" stroke="black"/>
                <path d="M 224,32 L 224,48" fill="none" stroke="black"/>
                <path d="M 280,224 L 280,384" fill="none" stroke="black"/>
                <path d="M 280,480 L 280,576" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,48" fill="none" stroke="black"/>
                <path d="M 336,288 L 336,336" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,48" fill="none" stroke="black"/>
                <path d="M 416,224 L 416,240" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,144" fill="none" stroke="black"/>
                <path d="M 552,224 L 552,624" fill="none" stroke="black"/>
                <path d="M 568,256 L 568,272" fill="none" stroke="black"/>
                <path d="M 568,432 L 568,464" fill="none" stroke="black"/>
                <path d="M 568,496 L 568,528" fill="none" stroke="black"/>
                <path d="M 568,592 L 568,624" fill="none" stroke="black"/>
                <path d="M 8,48 L 440,48" fill="none" stroke="black"/>
                <path d="M 8,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 8,144 L 440,144" fill="none" stroke="black"/>
                <path d="M 8,192 L 152,192" fill="none" stroke="black"/>
                <path d="M 8,240 L 552,240" fill="none" stroke="black"/>
                <path d="M 8,288 L 552,288" fill="none" stroke="black"/>
                <path d="M 8,336 L 552,336" fill="none" stroke="black"/>
                <path d="M 8,384 L 552,384" fill="none" stroke="black"/>
                <path d="M 8,432 L 552,432" fill="none" stroke="black"/>
                <path d="M 8,480 L 552,480" fill="none" stroke="black"/>
                <path d="M 8,528 L 552,528" fill="none" stroke="black"/>
                <path d="M 8,576 L 552,576" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="576,624 564,618.4 564,629.6" fill="black" transform="rotate(90,568,624)"/>
                <polygon class="arrowhead" points="576,496 564,490.4 564,501.6" fill="black" transform="rotate(270,568,496)"/>
                <polygon class="arrowhead" points="576,464 564,458.4 564,469.6" fill="black" transform="rotate(90,568,464)"/>
                <polygon class="arrowhead" points="576,256 564,250.4 564,261.6" fill="black" transform="rotate(270,568,256)"/>
                <g class="text">
                  <text x="16" y="36">0</text>
                  <text x="72" y="36">7</text>
                  <text x="88" y="36">8</text>
                  <text x="140" y="36">15</text>
                  <text x="164" y="36">16</text>
                  <text x="212" y="36">23</text>
                  <text x="236" y="36">24</text>
                  <text x="284" y="36">31</text>
                  <text x="308" y="36">32</text>
                  <text x="356" y="36">39</text>
                  <text x="380" y="36">40</text>
                  <text x="428" y="36">47</text>
                  <text x="176" y="68">Destination</text>
                  <text x="240" y="68">MAC</text>
                  <text x="288" y="68">address</text>
                  <text x="224" y="84">00:00:5E:00:53:01</text>
                  <text x="172" y="116">Source</text>
                  <text x="216" y="116">MAC</text>
                  <text x="264" y="116">address</text>
                  <text x="224" y="132">00:00:5E:00:53:02</text>
                  <text x="76" y="164">0x0800</text>
                  <text x="80" y="180">EtherType</text>
                  <text x="284" y="180">ETHERNET</text>
                  <text x="348" y="180">HEADER</text>
                  <text x="16" y="228">0</text>
                  <text x="136" y="228">7</text>
                  <text x="152" y="228">8</text>
                  <text x="268" y="228">15</text>
                  <text x="292" y="228">16</text>
                  <text x="404" y="228">23</text>
                  <text x="428" y="228">16</text>
                  <text x="540" y="228">31</text>
                  <text x="16" y="260">0</text>
                  <text x="32" y="260">1</text>
                  <text x="48" y="260">0</text>
                  <text x="64" y="260">0</text>
                  <text x="88" y="260">0</text>
                  <text x="104" y="260">1</text>
                  <text x="120" y="260">0</text>
                  <text x="136" y="260">1</text>
                  <text x="212" y="260">0x02</text>
                  <text x="412" y="260">0x04cc</text>
                  <text x="40" y="276">Version</text>
                  <text x="96" y="276">Hdr</text>
                  <text x="128" y="276">Len</text>
                  <text x="184" y="276">Traffic</text>
                  <text x="240" y="276">Class</text>
                  <text x="384" y="276">Total</text>
                  <text x="436" y="276">length</text>
                  <text x="568" y="292">I</text>
                  <text x="140" y="308">0x0000</text>
                  <text x="288" y="308">0</text>
                  <text x="304" y="308">1</text>
                  <text x="320" y="308">0</text>
                  <text x="344" y="308">0</text>
                  <text x="360" y="308">0</text>
                  <text x="376" y="308">0</text>
                  <text x="392" y="308">0</text>
                  <text x="408" y="308">0</text>
                  <text x="424" y="308">0</text>
                  <text x="440" y="308">0</text>
                  <text x="456" y="308">0</text>
                  <text x="472" y="308">0</text>
                  <text x="488" y="308">0</text>
                  <text x="504" y="308">0</text>
                  <text x="520" y="308">0</text>
                  <text x="536" y="308">0</text>
                  <text x="568" y="308">P</text>
                  <text x="140" y="324">Identification</text>
                  <text x="304" y="324">Flags</text>
                  <text x="412" y="324">Fragment</text>
                  <text x="476" y="324">offset</text>
                  <text x="568" y="340">H</text>
                  <text x="76" y="356">0x40</text>
                  <text x="212" y="356">0x11</text>
                  <text x="412" y="356">0xb21b</text>
                  <text x="568" y="356">E</text>
                  <text x="72" y="372">TTL</text>
                  <text x="212" y="372">Protocol</text>
                  <text x="380" y="372">Header</text>
                  <text x="444" y="372">checksum</text>
                  <text x="568" y="372">A</text>
                  <text x="568" y="388">D</text>
                  <text x="280" y="404">192.0.2.1</text>
                  <text x="568" y="404">E</text>
                  <text x="244" y="420">Source</text>
                  <text x="304" y="420">Address</text>
                  <text x="568" y="420">R</text>
                  <text x="280" y="452">192.0.2.2</text>
                  <text x="240" y="468">Destination</text>
                  <text x="320" y="468">Address</text>
                  <text x="140" y="500">0xc199</text>
                  <text x="412" y="500">0x1151</text>
                  <text x="124" y="516">Source</text>
                  <text x="172" y="516">port</text>
                  <text x="392" y="516">Destination</text>
                  <text x="460" y="516">port</text>
                  <text x="140" y="548">0x04b8</text>
                  <text x="412" y="548">0x72de</text>
                  <text x="568" y="548">U</text>
                  <text x="140" y="564">Length</text>
                  <text x="412" y="564">Checksum</text>
                  <text x="568" y="564">D</text>
                  <text x="568" y="580">P</text>
                  <text x="200" y="612">UDP</text>
                  <text x="248" y="612">payload</text>
                  <text x="304" y="612">(1200</text>
                  <text x="356" y="612">bytes)</text>
                  <text x="280" y="628">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
|0      7|8     15|16    23|24    31|32    39|40    47|
+--------+--------+--------+--------+--------+--------+
|               Destination MAC address               |
|                  00:00:5E:00:53:01                  |
+--------+--------+--------+--------+--------+--------+
|                 Source MAC address                  |
|                  00:00:5E:00:53:02                  |
+--------+--------+--------+--------+--------+--------+
|     0x0800      |
|    EtherType    |            ETHERNET HEADER
+-----------------+

|0              7|8             15|16            23|16            31|
+--------+-------+----------------+----------------+----------------+
|0 1 0 0 |0 1 0 1|      0x02      |             0x04cc              | ^
|Version |Hdr Len| Traffic Class  |          Total length           | |
+--------+-------+----------------+------+--------------------------+ I
|             0x0000              |0 1 0 |0 0 0 0 0 0 0 0 0 0 0 0 0 | P
|         Identification          |Flags |     Fragment offset      |
+----------------+----------------+------+--------------------------+ H
|      0x40      |      0x11      |             0xb21b              | E
|      TTL       |    Protocol    |         Header checksum         | A
+----------------+----------------+---------------------------------+ D
|                             192.0.2.1                             | E
|                          Source Address                           | R
+-------------------------------------------------------------------+ |
|                             192.0.2.2                             | |
|                       Destination Address                         | v
+---------------------------------+---------------------------------+
|             0xc199              |             0x1151              | ^
|           Source port           |        Destination port         | |
+---------------------------------+---------------------------------+ |
|             0x04b8              |             0x72de              | U
|             Length              |            Checksum             | D
+---------------------------------+---------------------------------+ P
|                                                                   | |
|                      UDP payload (1200 bytes)                     | |
|                                ...                                | v
]]></artwork>
          </artset>
        </figure>
        <t>This example assumes that the peer supports templates, IPv4 total length, IPv4 header checksum, UDP length in IPv4 packet and UDP checksum in IPv4 packet derived field. These capabilities were communicated using the following <tt>http-datagram-contexts</tt> HTTP field in client requesting CONNECT-ETHERNET extended CONNECT.</t>
        <figure anchor="fig-http-datagram-contexts-example-2">
          <name>http-datagram-contexts request example</name>
          <artwork><![CDATA[
http-datagram-contexts = max-templates=1, max-templates-segments=1, derived=(0 2 4 7), mtu=1500
]]></artwork>
        </figure>
        <t>Total length and header checksum in IPv4 header as well as length and checksum in UDP header can be derived by the peer, so these fields are removed before calculating static segments. Resulting context for the derived field is defined using DERIVED_ASSIGN capsule:</t>
        <figure anchor="ipv4-udp-ethernet-derived-assign">
          <name>DERIVED_ASSIGN Capsule for example IPv4/UDP ethernet frame</name>
          <artwork><![CDATA[
DERIVED_ASSIGN Capsule {
  Type (i) = 0x3ee31442,
  Length (i) = 6,
  Context ID (i) = 1,
  Next Context ID (i) = 0,
  Derived Field Type (i) = 0
  Derived Field Type (i) = 2
  Derived Field Type (i) = 4
  Derived Field Type (i) = 7
}
]]></artwork>
        </figure>
        <t>Table below illustrates fields present in Ethernet, IPv4 and UDP headers after derived fields were removed, their offsets in bits from the beginning of the frame and if they are likely to be static for most packets of a given traffic flow</t>
        <table anchor="ipv4-udp-ethernet-fields">
          <name>Ethernet, IPv4 and UDP header fields in example frame</name>
          <thead>
            <tr>
              <th align="left">Offset</th>
              <th align="left">Field name</th>
              <th align="left">Length</th>
              <th align="left">Value</th>
              <th align="left">Static</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">Destination MAC address</td>
              <td align="left">48</td>
              <td align="left">00:00:5E:00:53:01</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">48</td>
              <td align="left">Source MAC address</td>
              <td align="left">48</td>
              <td align="left">00:00:5E:00:53:02</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">96</td>
              <td align="left">EtherType</td>
              <td align="left">16</td>
              <td align="left">0x0800</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">112</td>
              <td align="left">Version</td>
              <td align="left">4</td>
              <td align="left">0100b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">116</td>
              <td align="left">Header length</td>
              <td align="left">4</td>
              <td align="left">0101b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">120</td>
              <td align="left">Traffic Class</td>
              <td align="left">8</td>
              <td align="left">0x02</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">128</td>
              <td align="left">Identification</td>
              <td align="left">16</td>
              <td align="left">0x0000</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">144</td>
              <td align="left">Flags</td>
              <td align="left">3</td>
              <td align="left">010b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">147</td>
              <td align="left">Fragment offset</td>
              <td align="left">13</td>
              <td align="left">0000000000000b</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">160</td>
              <td align="left">TTL</td>
              <td align="left">8</td>
              <td align="left">0x40</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">168</td>
              <td align="left">Protocol</td>
              <td align="left">8</td>
              <td align="left">0x11</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">176</td>
              <td align="left">Source address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.1</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">208</td>
              <td align="left">Destination address</td>
              <td align="left">32</td>
              <td align="left">192.0.2.2</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">240</td>
              <td align="left">Source port</td>
              <td align="left">16</td>
              <td align="left">0xc199</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">256</td>
              <td align="left">Destination port</td>
              <td align="left">16</td>
              <td align="left">0x1151</td>
              <td align="left">Yes</td>
            </tr>
            <tr>
              <td align="left">272</td>
              <td align="left">UDP payload</td>
              <td align="left">9600</td>
              <td align="left">...</td>
              <td align="left">No</td>
            </tr>
          </tbody>
        </table>
        <t>A single static segment model can be used for the initial part of the HTTP datagram after derived fields were removed:</t>
        <table anchor="ipv4-udp-segment">
          <name>Static segment for example Ethernet/IPv4/UDP frame</name>
          <thead>
            <tr>
              <th align="left">Segment Offset</th>
              <th align="left">Segment Length</th>
              <th align="left">Segment Contents</th>
              <th align="left">Segment Payload</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">34</td>
              <td align="left">Source MAC address, Destination MAC address, EtherType, Version, Header length and Traffic Class, Identification, Flags, Fragment offset, TTL, Protocol, Source address, Destination address, Source port and Destination port</td>
              <td align="left">0x00005E00530100005E00530208004502000040004011c0000201c0000202c1991151</td>
            </tr>
          </tbody>
        </table>
        <t>Resulting TEMPLATE_ASSIGN capsule with proxy-allocated odd Context ID is illustrated below:</t>
        <figure anchor="ipv4-udp-template-assign">
          <name>TEMPLATE_ASSIGN Capsule for example IPv4/UDP ethernet frame</name>
          <artwork><![CDATA[
TEMPLATE_ASSIGN Capsule {
  Type (i) = 0x3ee3143f,
  Length (i) = 38,
  Context ID (i) = 3,
  Next Context ID (i) = 1,
  Static Segment {
    Segment Offset (i) = 0,
    Segment Length (i) = 34,
    Segment Payload = 0x00005E00530100005E00530208004502000040004011c0000201c0000202c1991151,
  }
}
]]></artwork>
        </figure>
        <t>The resulting processing context chain reduces per-frame overhead by removing 34 bytes of repeated header material, increasing the effective MTU when datagrams are encapsulated in QUIC DATAGRAM frames.</t>
        <t>The sender concatenates all variable regions in increasing offset order.</t>
        <t>Upon receiving the datagram with Context ID 3, client re-assembles the datagram by appending variable segments to the static, re-calculates derived fields and inserts them at appropriate locations in the datagram.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification changes how HTTP Datagrams are reconstructed but does not weaken transport-layer integrity or confidentiality protections provided by the underlying HTTP mapping. All Capsules travel on the reliable control stream and inherit those protections.</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion</name>
        <t>Processing contexts introduce receiver state and reconstruction work. An attacker could attempt to exhaust memory or CPU by creating excessive numbers of templates and static segments, purposely sending datagrams referencing not-yet-installed contexts and causing excessive buffering of unknown Context IDs.</t>
        <t>Implementations <bcp14>MUST</bcp14> enforce limits on number of active templates and static segments and restrict memory used for buffering datagrams with unknown contexts.</t>
      </section>
      <section anchor="amplification">
        <name>Amplification</name>
        <t>Derived fields and template reconstruction increase the size of the reconstructed packet relative to the received datagram payload. An attacker could exploit this to amplify processing cost and perform a denial-of-service attack.</t>
        <t>Endpoints <bcp14>MUST</bcp14> ensure that reconstructed packet size does not exceed the negotiated MTU and <bcp14>SHOULD</bcp14> apply rate limiting when expansion ratios are abnormally high.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-capsule-types-registration">
        <name>HTTP Capsule Types Registration</name>
        <t>This specification registers the following values in the "HTTP Capsule Types" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x3ee3143f</td>
              <td align="left">TEMPLATE_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31440</td>
              <td align="left">TEMPLATE_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31441</td>
              <td align="left">TEMPLATE_CLOSE</td>
            </tr>
            <tr>
              <td align="left">0x3ee31442</td>
              <td align="left">DERIVED_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31443</td>
              <td align="left">DERIVED_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31444</td>
              <td align="left">DERIVED_CLOSE</td>
            </tr>
            <tr>
              <td align="left">0x3ee31445</td>
              <td align="left">CHECKSUM_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x3ee31446</td>
              <td align="left">CHECKSUM_ACK</td>
            </tr>
            <tr>
              <td align="left">0x3ee31447</td>
              <td align="left">CHECKSUM_CLOSE</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl>
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent if this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>MASQUE Working Group masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>This specification registers the following value in the "HTTP Field Name" registry:</t>
        <ul spacing="normal">
          <li>
            <t>Field Name: http-datagram-contexts</t>
          </li>
          <li>
            <t>Status: provisional (permanent if approved)</t>
          </li>
          <li>
            <t>Structured Type: Dictionary</t>
          </li>
          <li>
            <t>Reference: This document</t>
          </li>
          <li>
            <t>Comments: None</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-derived-fields">
        <name>HTTP Datagram Derived Field Types Registry</name>
        <t>IANA is requested to create a new registry titled "HTTP Datagram Derived Field Types". The registration policy is expert review as specified in <xref section="4.5" sectionFormat="of" target="IANA-POLICY"/>. This new registry governs the Derived Field types that appear in DERIVED_ASSIGN capsule and <tt>derived</tt> list of <tt>http-datagram-contexts</tt> dictionary.</t>
        <t>This new registry contains five columns:</t>
        <dl>
          <dt>Type:</dt>
          <dd>
            <t>A positive integer identifying the field type</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>A short name of the field</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>A description of the field</t>
          </dd>
          <dt>Protocols:</dt>
          <dd>
            <t>A list of HTTP Upgrade Tokens that the derived field type can apply</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>An optional reference defining the use of the entry.</t>
          </dd>
        </dl>
        <t>The registry's initial entries are as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Protocols</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">ipv4-total-length</td>
              <td align="left">IPv4 Total Length field derived from reconstructed packet size</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">ipv6-payload-length</td>
              <td align="left">IPv6 Payload Length field derived from reconstructed packet size</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">ipv4-udp-length</td>
              <td align="left">UDP Length derived from UDP header to end of IPv4 packet</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">ipv6-udp-length</td>
              <td align="left">UDP Length derived from UDP header to end of IPv6 packet</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">ipv4-header-checksum</td>
              <td align="left">IPv4 header checksum computed over IPv4 header</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">ipv4-tcp-checksum</td>
              <td align="left">TCP checksum computed over IPv4 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">ipv6-tcp-checksum</td>
              <td align="left">TCP checksum computed over IPv6 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">ipv4-udp-checksum</td>
              <td align="left">UDP checksum computed over IPv4 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">ipv6-udp-checksum</td>
              <td align="left">UDP checksum computed over IPv6 pseudo-header and segment</td>
              <td align="left">connect-ip, connect-ethernet</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="HTTP-DATAGRAMS">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="CONNECT-ETHERNET">
          <front>
            <title>Proxying Ethernet in HTTP</title>
            <author fullname="Alejandro Sedeño" initials="A." surname="Sedeño">
              <organization>Google LLC</organization>
            </author>
            <date day="10" month="October" year="2025"/>
            <abstract>
              <t>   This document describes how to proxy Ethernet frames in HTTP.  This
   protocol is similar to IP proxying in HTTP, but for Layer 2 instead
   of Layer 3.  More specifically, this document defines a protocol that
   allows an HTTP client to create a tunnel to exchange Layer 2 Ethernet
   frames through an HTTP server with an attached physical or virtual
   Ethernet segment.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ethernet-08"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="INCREMENTAL-CHECKSUM">
          <front>
            <title>Computation of the Internet Checksum via Incremental Update</title>
            <author fullname="A. Rijsinghani" initials="A." role="editor" surname="Rijsinghani"/>
            <date month="May" year="1994"/>
            <abstract>
              <t>This memo describes an updated technique for incremental computation of the standard Internet checksum. It updates the method described in RFC 1141. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1624"/>
          <seriesInfo name="DOI" value="10.17487/RFC1624"/>
        </reference>
        <reference anchor="STRUCTURED-HTTP">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="TCP-PERF">
          <front>
            <title>TCP Extensions for High Performance</title>
            <author fullname="D. Borman" initials="D." surname="Borman"/>
            <author fullname="B. Braden" initials="B." surname="Braden"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="R. Scheffenegger" initials="R." role="editor" surname="Scheffenegger"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths. It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics. The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t>
              <t>This document obsoletes RFC 1323 and describes changes from it.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7323"/>
          <seriesInfo name="DOI" value="10.17487/RFC7323"/>
        </reference>
        <reference anchor="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="IPv4">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
        <reference anchor="IANA-POLICY">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
    </references>
    <?line 891?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
