<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-http-datagram-compression-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="HTTP Datagram Compression">Extensions to Compress and Derive Fields in HTTP Datagrams</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-http-datagram-compression-00"/>
    <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="June" day="21"/>
    <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-ietf-masque-http-datagram-compression.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-http-datagram-compression/"/>.
      </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="12" month="April" year="2026"/>
            <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-09"/>
        </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>
