<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kuehlewind-masque-ip-compression-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Connect-IP Compression">Extension to Connect-IP for static IP header compression</title>
    <seriesInfo name="Internet-Draft" value="draft-kuehlewind-masque-ip-compression-00"/>
    <author fullname="Mirja Kühlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <author fullname="Marcus Ihlar">
      <organization>Ericsson</organization>
      <address>
        <email>marcus.ihlar@ericsson.com</email>
      </address>
    </author>
    <author fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Web and Internet Transport</area>
    <workgroup>Multiplexed Application Substrate over QUIC Encryption</workgroup>
    <keyword>connect-ip</keyword>
    <abstract>
      <?line 43?>

<t>This document specifies an extension for IP header compression when using Connect-IP proxying.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mirjak.github.io/draft-masque-ip-compression/draft-kuehlewind-masque-ip-compression.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-kuehlewind-masque-ip-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/mirjak/draft-masque-ip-compression"/>.</t>
    </note>
  </front>
  <middle>
    <?line 48?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document specifies an extension for IP header compression when using Connect-IP
<xref target="CONNECT-IP"/> proxying.
It specifies a way to indicate which IP header fields can be omitted
and provides reference values that are then used to reconstruct omitted fields when using the indicated context ID.</t>
      <t>This document defines four new capsules to assign new context IDs and provide static information
in IPv4 and IPv6 headers, acknowlegde the use of such a context ID, or cancel its use.
The capsules <bcp14>MUST</bcp14> only be used with Connect-IP <xref target="CONNECT-IP"/>.</t>
      <t>Extending this work to include compression of transport layer fields like the port numbers
in TCP or UDP is left for consideration for further revisions.</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?>

<section anchor="capsule-assign">
        <name>IP4_COMPRESSION_ASSIGN and IP6_COMPRESSION_ASSIGN capsules</name>
        <t>The IPv4 Compression Assign capsule (capsule type TBD) is used to register a
Context ID and provides reference values of the IP header fields that will be omitted from the
HTTP Datagram Payload when using this Context ID. It has the following format:</t>
        <figure anchor="fig-capsule-ipv4-assign">
          <name>IPv4 Compression Assign Capsule Format</name>
          <artwork><![CDATA[
IP4_COMPRESSION_ASSIGN Capsule {
  Type (i) = TBD,
  Length (i),
  Context ID (i),
  IPv4 Flags (16),
  IPv4 Header (20)
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <dl>
          <dt>IPv4 Flags:</dt>
          <dd>
            <t>A 16-bit field containing flags that indicate which byte-aligned IP header fields can be omitted.
The format is defined in <xref target="fig-ipv4-flags"/>.</t>
          </dd>
          <dt>IPv4 Header:</dt>
          <dd>
            <t>This field contains the first 20 bytes of the IPv4 header. Fields that are not indicated as omitted will be
included in the compressed packet and therefore their reference value is not relevant.</t>
          </dd>
        </dl>
        <t>The IPv4 Flags field has the following format:</t>
        <figure anchor="fig-ipv4-flags">
          <name>IPv4 Flags Format</name>
          <artwork><![CDATA[
IPv4 Flags {
  Version-IHL (1),
  DSCP-ECN (1),
  Total Length (1),
  Identification (1),
  Flags-FragOffset (1),
  TTL (1),
  Protocol (1),
  Checksum (1),
  Source Address (1),
  Destination Address (1),
  Reserved (6),
}
]]></artwork>
        </figure>
        <t>The flags have the following meanings:</t>
        <dl>
          <dt>Version-IHL:</dt>
          <dd>
            <t>This flag indicates if byte 0 of the IPv4 header (Version and IHL fields) can be omitted.</t>
          </dd>
          <dt>DSCP-ECN:</dt>
          <dd>
            <t>This flag indicates if byte 1 of the IPv4 header (DSCP and ECN fields) can be omitted.</t>
          </dd>
          <dt>Total Length:</dt>
          <dd>
            <t>This flag indicates if bytes 2-3 of the IPv4 header (Total Length field) can be omitted (receiver will compute from payload size).</t>
          </dd>
          <dt>Identification:</dt>
          <dd>
            <t>This flag indicates if bytes 4-5 of the IPv4 header (Identification field) can be omitted.</t>
          </dd>
          <dt>Flags-FragOffset:</dt>
          <dd>
            <t>This flag indicates if bytes 6-7 of the IPv4 header (Flags and Fragment Offset fields) can be omitted.</t>
          </dd>
          <dt>TTL:</dt>
          <dd>
            <t>This flag indicates if byte 8 of the IPv4 header (TTL field) can be omitted.</t>
          </dd>
          <dt>Protocol:</dt>
          <dd>
            <t>This flag indicates if byte 9 of the IPv4 header (Protocol field) can be omitted.</t>
          </dd>
          <dt>Checksum:</dt>
          <dd>
            <t>This flag indicates if bytes 10-11 of the IPv4 header (Header Checksum field) can be omitted (receiver will recompute).</t>
          </dd>
          <dt>Source Address:</dt>
          <dd>
            <t>This flag indicates if bytes 12-15 of the IPv4 header (Source Address field) can be omitted.</t>
          </dd>
          <dt>Destination Address:</dt>
          <dd>
            <t>This flag indicates if bytes 16-19 of the IPv4 header (Destination Address field) can be omitted.</t>
          </dd>
          <dt>Reserved:</dt>
          <dd>
            <t>These bits are reserved for future use and <bcp14>MUST</bcp14> be set to zero.</t>
          </dd>
        </dl>
        <figure anchor="fig-capsule-ipv6-assign">
          <name>IPv6 Compression Assign Capsule Format</name>
          <artwork><![CDATA[
IP6_COMPRESSION_ASSIGN Capsule {
  Type (i) = TBD,
  Length (i),
  Context ID (i),
  IPv6 Flags (16),
  IPv6 Header (40)
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <dl>
          <dt>IPv6 Flags:</dt>
          <dd>
            <t>A 16-bit field containing flags that indicate which byte-aligned IP header fields can be omitted.
The format is defined in <xref target="fig-ipv6-flags"/>.</t>
          </dd>
          <dt>IPv6 Header:</dt>
          <dd>
            <t>This field contains the first 40 bytes of the IPv6 header. Fields that are not indicated as omitted will be
included in the compressed packet and therefore their reference value is not relevant.</t>
          </dd>
        </dl>
        <t>The IPv6 Flags field has the following format:</t>
        <figure anchor="fig-ipv6-flags">
          <name>IPv6 Flags Format</name>
          <artwork><![CDATA[
IPv6 Flags {
  Version-FL (1),
  Traffic Class (1),
  Payload Length (1),
  Next Header (1),
  Hop Limit (1),
  Source Address (1),
  Destination Address (1),
  Reserved (9),
}
]]></artwork>
        </figure>
        <t>The flags have the following meanings:</t>
        <dl>
          <dt>Version-FL:</dt>
          <dd>
            <t>This flag indicates if the Version field (upper 4 bits of byte 0) and Flow Label field (lower 4 bits of byte 1, and all of bytes 2-3) can be omitted.
When this flag is set but the Traffic Class flag is not set, the Traffic Class field (lower 4 bits of byte 0 and upper 4 bits of byte 1) <bcp14>MUST</bcp14> be preserved
as a single byte in the compressed packet.</t>
          </dd>
          <dt>Traffic Class:</dt>
          <dd>
            <t>This flag indicates if the Traffic Class field (lower 4 bits of byte 0 and upper 4 bits of byte 1) can be omitted.
This flag can be set independently of the Version-FL flag to allow omitting Version and Flow Label while preserving Traffic Class.</t>
          </dd>
          <dt>Payload Length:</dt>
          <dd>
            <t>This flag indicates if bytes 4-5 of the IPv6 header (Payload Length field) can be omitted (receiver will compute from payload size).</t>
          </dd>
          <dt>Next Header:</dt>
          <dd>
            <t>This flag indicates if byte 6 of the IPv6 header (Next Header field) can be omitted.</t>
          </dd>
          <dt>Hop Limit:</dt>
          <dd>
            <t>This flag indicates if byte 7 of the IPv6 header (Hop Limit field) can be omitted.</t>
          </dd>
          <dt>Source Address:</dt>
          <dd>
            <t>This flag indicates if bytes 8-23 of the IPv6 header (Source Address field) can be omitted.</t>
          </dd>
          <dt>Destination Address:</dt>
          <dd>
            <t>This flag indicates if bytes 24-39 of the IPv6 header (Destination Address field) can be omitted.</t>
          </dd>
          <dt>Reserved:</dt>
          <dd>
            <t>These bits are reserved for future use and <bcp14>MUST</bcp14> be set to zero.</t>
          </dd>
        </dl>
        <t>When the indicated Context ID is used, all IP header fields that are flagged as omitted
as well as the version field <bcp14>MUST</bcp14> be omitted from the HTTP datagram payload. The receiver of the
datagram with the indicated Context ID <bcp14>MUST</bcp14> reconstruct the complete IP header using the reference
values from the COMPRESSION_ASSIGN capsule and/or by computing derived values (such as checksums
and length fields) before forwarding the payload.</t>
        <t>When an endpoint receives a IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN
capsule, it <bcp14>MUST</bcp14> either accept or reject the corresponding registration:</t>
        <ul spacing="normal">
          <li>
            <t>if it accepts the registration, the receiver <bcp14>MUST</bcp14> return a COMPRESSION_ACK
capsule with the Context ID set to the one from the received
IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN capsule back to its peer</t>
          </li>
          <li>
            <t>if it rejects the registration, the receiver <bcp14>MUST</bcp14> respond by sending a
COMPRESSION_CLOSE capsule with the Context ID set to the one from the
received IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN capsule.</t>
          </li>
        </ul>
        <t>As mandated in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>, clients can only allocate even
Context IDs, while proxies can only allocate odd ones. This makes the
registration capsules from this document unambiguous. For example, if a
client receives a COMPRESSION_ASSIGN capsule with an even Context ID, that
has to be an echo of a capsule that the client initially sent, indicating
that the proxy accepted the registration. Since the value 0 was reserved by
unextended connect-udp, the Context ID value of COMPRESSION_ASSIGN can never
be zero.</t>
        <t>Endpoints <bcp14>MUST NOT</bcp14> send two COMPRESSION_ASSIGN capsules with the same
Context ID. If a recipient detects a repeated Context ID, it <bcp14>MUST</bcp14> treat the
capsule as malformed. Receipt of a malformed capsule <bcp14>MUST</bcp14> be treated as an
error processing the Capsule Protocol, as defined in <xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
        <t>Endpoints <bcp14>MAY</bcp14> pre-emptively use Context IDs not yet acknowledged by the peer
via COMPRESSION_ACK, knowing that those HTTP Datagrams can be dropped if
they arrive before the corresponding IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN capsule,
or if the peer rejects the registration.</t>
      </section>
      <section anchor="capsule-ack">
        <name>IP_COMPRESSION_ACK capsule</name>
        <t>The IP Compression Acknowledgment capsule (capsule type TBD) confirms
registration of a context ID that was received in an IP4_COMPRESSION_ASSIGN
or IP6_COMPRESSION_ASSIGN capsule.</t>
        <figure anchor="fig-capsule-ack">
          <name>IP Compression Acknowledgment Capsule Format</name>
          <artwork><![CDATA[
IP_COMPRESSION_ACK Capsule {
  Type (i) = TBD,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>An endpoint can only send a COMPRESSION_ACK capsule if it received a
IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN capsule with the same Context ID.
If an endpoint receives COMPRESSION_ACK capsule for a context ID it did not attempt
to register in an IP4_COMPRESSION_ASSIGN or IP6_COMPRESSION_ASSIGN capsule, that
capsule is considered malformed.</t>
      </section>
      <section anchor="capsule-close">
        <name>IP_COMPRESSION_CLOSE capsule</name>
        <t>The IP Compression Close capsule (capsule type TDB) serves two purposes. It
can be sent as a direct response to a received IP4_COMPRESSION_ASSIGN or
IP6_COMPRESSION_ASSIGN capsule capsule, to indicate that the registration
was rejected. It can also be sent later to indicate the closure of a
previously assigned registration.</t>
        <figure anchor="fig-capsule-close">
          <name>IP Compression Close Capsule Format</name>
          <artwork><![CDATA[
IP_COMPRESSION_CLOSE Capsule {
  Type (i) = TBD,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>Once an endpoint has either sent or received a IP_COMPRESSION_CLOSE for a given
Context ID, it <bcp14>MUST NOT</bcp14> send any further datagrams with that Context ID.
Since the value 0 was reserved by unextended connect-udp, the Context ID
value of IP_COMPRESSION_CLOSE can never be zero.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
    </section>
    <section anchor="iana-considerations-1">
      <name>IANA Considerations</name>
      <t>This document will request IANA to register the following new items to the
"HTTP Capsule Types" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/masque"/>&gt;:</t>
      <table anchor="iana-capsules-table">
        <name>New Capsules</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Capsule Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">TBD</td>
            <td align="left">IP4_COMPRESSION_ASSIGN</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">IP6_COMPRESSION_ASSIGN</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">IP_COMPRESSION_ACK</td>
          </tr>
          <tr>
            <td align="left">TBD</td>
            <td align="left">IP_COMPRESSION_CLOSE</td>
          </tr>
        </tbody>
      </table>
      <t>All of these new entries use the following values for these fields:</t>
      <dl spacing="compact">
        <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 <eref target="mailto:masque@ietf.org">masque@ietf.org</eref></t>
        </dd>
        <dt>Notes:</dt>
        <dd>
          <t>None</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <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="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="HTTP-DGRAM">
        <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>
    </references>
    <?line 352?>

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

-->

</rfc>
