<?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.2.3) -->
<?rfc tocompact="yes"?>
<?rfc tocindent="yes"?>
<?rfc compact="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bonica-tcpm-extended-options-00" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="tcp-ext-opt">TCP Extended Options</title>
    <seriesInfo name="Internet-Draft" value="draft-bonica-tcpm-extended-options-00"/>
    <author initials="R." surname="Bonica" fullname="Ron Bonica">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <city>Herndon</city>
          <region>Virginia</region>
          <country>USA</country>
        </postal>
        <email>rbonica@juniper.net</email>
      </address>
    </author>
    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>Juniper Networks</organization>
      <address>
        <postal>
          <city>Sunnyvale</city>
          <region>California</region>
          <country>USA</country>
        </postal>
        <email>tli@juniper.net</email>
      </address>
    </author>
    <date year="2025" month="May" day="30"/>
    <area>Transport</area>
    <workgroup>TCPM Working Group</workgroup>
    <keyword>TCP</keyword>
    <abstract>
      <?line 54?>
<t>The TCP header can accommodates 40 octets of TCP options. However, modern applications may require more than 40 octets of TCP Options. Therefore, this document describes an experiment that extends the TCP Options field. If this experiment is successful, it will demonstrate the extension procedures described herein are implementable and deployable. It will also demonstrate that they maintain backwards compatibility.</t>
    </abstract>
  </front>
  <middle>
    <?line 57?>

<section anchor="intro">
      <name>Introduction</name>
      <t><xref target="tcpseg"/> depicts a TCP <xref target="RFC9293"/> segment.</t>
      <figure anchor="tcpseg">
        <name>TCP Segment</name>
        <artwork><![CDATA[
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  =
|          Source Port          |       Destination Port        |   
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|                        Sequence Number                        |  T
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  C
|                    Acknowledgment Number                      |  P
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
|  Data |       |C|E|U|A|P|R|S|F|                               |  H  
| Offset| Rsrvd |W|C|R|C|S|S|Y|I|            Window             |  E 
|       |       |R|E|G|K|H|T|N|N|                               |  A 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  D 
|           Checksum            |         Urgent Pointer        |  E
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  R
|                           [Options]                           |   
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  =
|                                                               :  
:                             Data                              :   
:                                                               |  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  = 
]]></artwork>
      </figure>
      <t>Every TCP segment contains a header. Some TCP segments also contain data.</t>
      <t>Each field in the TCP header, except for the last, has a fixed length. 
The fixed length fields in the TCP header occupy 20 octets.  One of these
fields is called the Data Offset field.</t>
      <t>The last field in the TCP header is called the Options field. When present, 
the Options field contains a list of TCP options <xref target="TCPOPTS"/>. Its length varies from 0 to 40 octets.</t>
      <t>The Data Offset field represents the offset of the Data field in the TCP
segment, measured in 4-octet units. The Data Offset field also determines the length of the 
Options field. This is because the Options field consumes all of the 
space between the fixed length fields in the TCP header and the Data field.</t>
      <t>The Data Offset field contains 4 bits. So, its value ranges nominally from
0 to 15. However, the value of the Data Offset field must be 5 or greater. This 
is because the Data field must follow the fixed length fields in the TCP header. As stated
above, those fields occupy 20 octets.</t>
      <t>Because the value of the Data Offset field cannot exceed 15, the offset of the Data
field cannot exceed 60 and the length of the Options field cannot exceed 40
(i.e., 60 minus 20).</t>
      <t>Modern applications may require more than 40 octets of TCP Options. Therefore, this document describes an experiment that extends the TCP Options field. If this experiment is successful, it will demonstrate the extension procedures described herein are implementable and deployable. It will also demonstrate that they maintain backwards compatibility.</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 BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="extending-the-tcp-options-field">
      <name>Extending The TCP Options field</name>
      <t>According to <xref target="RFC9293"/>:</t>
      <ul spacing="normal">
        <li>
          <t>The Data Offset field must have a value of 5 or greater</t>
        </li>
        <li>
          <t>TCP Options can be present only when the Data Offset field has a value greater than 5.</t>
        </li>
      </ul>
      <t>This document allows TCP options to be present when the Data Offset 
field has a value of 0. When the Data Offset field has a value of 0, the format of the 
TCP Options field is as depicted in <xref target="extopt"/>.</t>
      <figure anchor="extopt">
        <name>TCP Options</name>
        <artwork><![CDATA[
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|     Length    |                                               :
+-+-+-+-+-+-+-+-+                                               :
|                          Individual Options                   :
:                                                               :   
:                                                               :  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               
]]></artwork>
      </figure>
      <ul spacing="normal">
        <li>
          <t>Length: 8-bit unsigned integer. Represents the length of the TCP Options field, including the length field, measured in 4-octet units.</t>
        </li>
        <li>
          <t>Individual Options: Defined in <xref target="RFC9293"/>.</t>
        </li>
      </ul>
      <t>When a TCP segment contains 40 bytes of TCP Options or fewer, it <bcp14>MUST</bcp14> be formatted exactly as described in <xref target="RFC9293"/>. When a TCP segment contains more than 40 bytes of TCP Options, the Data Offset field <bcp14>MUST</bcp14> be equal to 0 and the Options field <bcp14>MUST</bcp14> be formatted as described in this section.</t>
    </section>
    <section anchor="checksum-considerations">
      <name>Checksum Considerations</name>
      <t>As per <xref target="RFC9293"/>, checksums are calculated over the entire Options field.</t>
    </section>
    <section anchor="backward">
      <name>Backwards Compatibility Considerations</name>
      <t>Legacy TCP implementations, including middleboxes, cannot parse segments in which the Data Offset is equal to 0. <xref target="RFC9293"/> is silent regarding the required behavior when a TCP implementation receives a segment with Data Offset equal to 0.</t>
      <t>The following TCP implementations have been tested and are known to discard the segment:</t>
      <ul spacing="normal">
        <li>
          <t>One</t>
        </li>
        <li>
          <t>Two</t>
        </li>
        <li>
          <t>Three</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Legacy middleboxes, including firewalls, cannot parse segments in which the Data Offset is equal to 0. They are likely to discard packets that they cannot parse.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not request any IANA actions.</t>
    </section>
    <section anchor="experimental-results">
      <name>Experimental Results</name>
      <t>Parties participating in this experiment should publish experimental results within one year of the publication of this document Experimental results should address the following:</t>
      <ul spacing="normal">
        <li>
          <t>Effort required to deploy
          </t>
          <ul spacing="normal">
            <li>
              <t>Was deployment incremental or network-wide?</t>
            </li>
            <li>
              <t>Was there a need to synchronize configurations at each node or could nodes be configured independently?</t>
            </li>
            <li>
              <t>Did the deployment require hardware upgrade?</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Scale of deployment</t>
        </li>
        <li>
          <t>Interoperability
          </t>
          <ul spacing="normal">
            <li>
              <t>Did you deploy two interoperable implementations?</t>
            </li>
            <li>
              <t>Did you experience interoperability problems?</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Effectiveness and sufficiency of OAM mechanisms
          </t>
          <ul spacing="normal">
            <li>
              <t>Did Wireshark work?</t>
            </li>
            <li>
              <t>Did TCPDUMP work?</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to acknowledge Keshwan Hamlin, Jordan Head, and Joe Touch for their review and helpful comments.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC9293">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="TCPOPTS">
          <front>
            <title>Transmission Control Protocol (TCP) Parameters -</title>
            <author>
              <organization>Internet Assigned Numbers Authority (IANA)</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Web" value="https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-1"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
KcPiQuEgAAA=

-->

</rfc>
