<?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.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-04" category="exp" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="tcp-ext-opt">TCP Extended Options</title>
    <seriesInfo name="Internet-Draft" value="draft-bonica-tcpm-extended-options-04"/>
    <author initials="R." surname="Bonica" fullname="Ron Bonica">
      <organization>HPE</organization>
      <address>
        <postal>
          <city>Herndon</city>
          <region>Virginia</region>
          <country>USA</country>
        </postal>
        <email>ronald.bonica@hpe.com</email>
      </address>
    </author>
    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>HPE</organization>
      <address>
        <postal>
          <city>Sunnyvale</city>
          <region>California</region>
          <country>USA</country>
        </postal>
        <email>tony.li@tony.li</email>
      </address>
    </author>
    <date year="2026" month="June" day="26"/>
    <area>Transport</area>
    <workgroup>TCPM Working Group</workgroup>
    <keyword>TCP</keyword>
    <abstract>
      <?line 55?>
<t>A TCP header accommodates only 40 octets of TCP options. In the future, applications may require more than 40 octets of TCP options. For example, an application may require a TCP Authentication Option (TCP-AO) with a 384-bit MAC. This option requires 52 octets of option space.</t>
      <t>This document defines a TCP extension that accommodates up to 1,016 octets of TCP options while maintaining backward compatibility with legacy implementations.</t>
    </abstract>
  </front>
  <middle>
    <?line 60?>

<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>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="568" viewBox="0 0 568 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,64 L 8,304" fill="none" stroke="black"/>
              <path d="M 72,160 L 72,224" fill="none" stroke="black"/>
              <path d="M 136,160 L 136,224" fill="none" stroke="black"/>
              <path d="M 152,160 L 152,224" fill="none" stroke="black"/>
              <path d="M 168,160 L 168,224" fill="none" stroke="black"/>
              <path d="M 184,160 L 184,224" fill="none" stroke="black"/>
              <path d="M 200,160 L 200,224" fill="none" stroke="black"/>
              <path d="M 216,160 L 216,224" fill="none" stroke="black"/>
              <path d="M 232,160 L 232,224" fill="none" stroke="black"/>
              <path d="M 248,160 L 248,224" fill="none" stroke="black"/>
              <path d="M 264,64 L 264,96" fill="none" stroke="black"/>
              <path d="M 264,160 L 264,256" fill="none" stroke="black"/>
              <path d="M 520,64 L 520,288" fill="none" stroke="black"/>
              <path d="M 520,336 L 520,352" fill="none" stroke="black"/>
              <path d="M 8,64 L 520,64" fill="none" stroke="black"/>
              <path d="M 8,96 L 520,96" fill="none" stroke="black"/>
              <path d="M 8,128 L 520,128" fill="none" stroke="black"/>
              <path d="M 8,160 L 520,160" fill="none" stroke="black"/>
              <path d="M 8,224 L 520,224" fill="none" stroke="black"/>
              <path d="M 8,256 L 520,256" fill="none" stroke="black"/>
              <path d="M 8,288 L 520,288" fill="none" stroke="black"/>
              <path d="M 8,352 L 520,352" fill="none" stroke="black"/>
              <g class="text">
                <text x="8" y="36">0</text>
                <text x="168" y="36">1</text>
                <text x="328" y="36">2</text>
                <text x="488" y="36">3</text>
                <text x="8" y="52">0</text>
                <text x="24" y="52">1</text>
                <text x="40" y="52">2</text>
                <text x="56" y="52">3</text>
                <text x="72" y="52">4</text>
                <text x="88" y="52">5</text>
                <text x="104" y="52">6</text>
                <text x="120" y="52">7</text>
                <text x="136" y="52">8</text>
                <text x="152" y="52">9</text>
                <text x="168" y="52">0</text>
                <text x="184" y="52">1</text>
                <text x="200" y="52">2</text>
                <text x="216" y="52">3</text>
                <text x="232" y="52">4</text>
                <text x="248" y="52">5</text>
                <text x="264" y="52">6</text>
                <text x="280" y="52">7</text>
                <text x="296" y="52">8</text>
                <text x="312" y="52">9</text>
                <text x="328" y="52">0</text>
                <text x="344" y="52">1</text>
                <text x="360" y="52">2</text>
                <text x="376" y="52">3</text>
                <text x="392" y="52">4</text>
                <text x="408" y="52">5</text>
                <text x="424" y="52">6</text>
                <text x="440" y="52">7</text>
                <text x="456" y="52">8</text>
                <text x="472" y="52">9</text>
                <text x="488" y="52">0</text>
                <text x="504" y="52">1</text>
                <text x="544" y="68">=</text>
                <text x="116" y="84">Source</text>
                <text x="164" y="84">Port</text>
                <text x="368" y="84">Destination</text>
                <text x="436" y="84">Port</text>
                <text x="236" y="116">Sequence</text>
                <text x="300" y="116">Number</text>
                <text x="544" y="116">T</text>
                <text x="544" y="132">C</text>
                <text x="228" y="148">Acknowledgment</text>
                <text x="316" y="148">Number</text>
                <text x="544" y="148">P</text>
                <text x="44" y="180">Data</text>
                <text x="144" y="180">C</text>
                <text x="160" y="180">E</text>
                <text x="176" y="180">U</text>
                <text x="192" y="180">A</text>
                <text x="208" y="180">P</text>
                <text x="224" y="180">R</text>
                <text x="240" y="180">S</text>
                <text x="256" y="180">F</text>
                <text x="544" y="180">H</text>
                <text x="44" y="196">Offset</text>
                <text x="104" y="196">Rsrvd</text>
                <text x="144" y="196">W</text>
                <text x="160" y="196">C</text>
                <text x="176" y="196">R</text>
                <text x="192" y="196">C</text>
                <text x="208" y="196">S</text>
                <text x="224" y="196">S</text>
                <text x="240" y="196">Y</text>
                <text x="256" y="196">I</text>
                <text x="388" y="196">Window</text>
                <text x="544" y="196">E</text>
                <text x="144" y="212">R</text>
                <text x="160" y="212">E</text>
                <text x="176" y="212">G</text>
                <text x="192" y="212">K</text>
                <text x="208" y="212">H</text>
                <text x="224" y="212">T</text>
                <text x="240" y="212">N</text>
                <text x="256" y="212">N</text>
                <text x="544" y="212">A</text>
                <text x="544" y="228">D</text>
                <text x="132" y="244">Checksum</text>
                <text x="364" y="244">Urgent</text>
                <text x="424" y="244">Pointer</text>
                <text x="544" y="244">E</text>
                <text x="544" y="260">R</text>
                <text x="264" y="276">[Options]</text>
                <text x="544" y="292">=</text>
                <text x="520" y="308">:</text>
                <text x="8" y="324">:</text>
                <text x="260" y="324">Data</text>
                <text x="520" y="324">:</text>
                <text x="8" y="340">:</text>
                <text x="544" y="356">=</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![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>
        </artset>
      </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 final field in the TCP header contains TCP options <xref target="TCPOPTS"/>. Its length varies from 0 to 40 octets.</t>
      <t>The Data Offset field represents the TCP data offset, 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 space between the fixed length fields in the TCP header and the TCP data.</t>
      <t>The Data Offset field contains 4 bits. So, its nominal value ranges from 0 to 15.
However, the value of the Data Offset field must be 5 or greater. This
is because TCP data must follow the fixed-length header fields, and those fields occupy 20 octets.</t>
      <t>Because the value of the Data Offset field cannot exceed 15, the TCP data offset cannot exceed 60 and the length of the Options field cannot exceed 40
(i.e., 60 minus 20).</t>
      <t>In the future, applications may require more than 40 octets of TCP options. For example, an application may require a TCP Authentication Option (TCP-AO) <xref target="RFC5925"/> with a 384-bit MAC 
<xref target="I-D.bonica-tcpm-tcp-ao-long-algs"/>. This option requires 52 octets of option space.</t>
      <t>This document defines a TCP extension that accommodates up to 1,016 octets of TCP options while maintaining backward compatibility with legacy implementations.</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="terminology">
      <name>Terminology</name>
      <t>This document uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>TCP Client - The TCP endpoint that initiates a session.</t>
        </li>
        <li>
          <t>TCP Server - The TCP endpoint that communicates with the TCP Client.</t>
        </li>
        <li>
          <t>Ordinary Segment (SEG-O) - A TCP segment, as defined in <xref target="RFC9293"/>. In a SEG-O, the Data Offset field has a value from 5 to 15.</t>
        </li>
        <li>
          <t>Updated Segment (SEG-U) - A TCP segment, as defined in <xref target="RFC9293"/>. However, in a SEG-U, the Data Offset field must be equal to 0. That value identifies the segment as a SEG-U. See <xref target="SEGU"/>.</t>
        </li>
        <li>
          <t>Ordinary SYN (SYN-O) - A SEG-O whose SYN bit is set and ACK bit is not set.</t>
        </li>
        <li>
          <t>Updated SYN (SYN-U) -  A SEG-U whose SYN bit is set and ACK bit is not set.</t>
        </li>
        <li>
          <t>Ordinary SYN/ACK (SYN/ACK-O) - A SEG-O whose SYN and ACK bits are set.</t>
        </li>
        <li>
          <t>Updated SYN/ACK (SYN/ACK-U) -  A SEG-U whose SYN and ACK bits are set.</t>
        </li>
        <li>
          <t>Ordinary TCP Connection (TCP-O) - A TCP connection, as defined in <xref target="RFC9293"/>. A TCP-O exchanges only SEG-O's.</t>
        </li>
        <li>
          <t>Updated TCP Connection (TCP-U) - A TCP connection, as defined in <xref target="RFC9293"/>. However, a TCP-U can exchange both SEG-O's and SEG-U's. See <xref target="TCPU"/>.</t>
        </li>
        <li>
          <t>Legacy TCP - A TCP implementation that supports TCP-O only.</t>
        </li>
        <li>
          <t>Upgraded TCP - A TCP implementation that supports both TCP-O and TCP-U.</t>
        </li>
      </ul>
    </section>
    <section anchor="TCPU">
      <name>The Updated TCP Connection (TCP-U)</name>
      <t>A TCP-U sends SEG-U's:</t>
      <ul spacing="normal">
        <li>
          <t>During the three-way handshake, even if those segments do not contain options</t>
        </li>
        <li>
          <t>When the segment contains more than 40 octets of options.</t>
        </li>
      </ul>
      <t>When neither of the above conditions is true, a TCP-U <bcp14>MAY</bcp14> send either SEG-O's or SEG-U's.</t>
      <section anchor="SEGU">
        <name>Updated TCP Segment (SEG-U)</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>In a SEG-U, the Data Offset <bcp14>MUST</bcp14> have a value of 0. This value identifies the segment as a SEG-U and indicates that the format of the TCP Options field <bcp14>MUST</bcp14> be as depicted in <xref target="extopt"/>.</t>
        <figure anchor="extopt">
          <name>SEG-U TCP Options</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="560" viewBox="0 0 560 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,112" fill="none" stroke="black"/>
                <path d="M 136,64 L 136,96" fill="none" stroke="black"/>
                <path d="M 520,64 L 520,96" fill="none" stroke="black"/>
                <path d="M 8,64 L 520,64" fill="none" stroke="black"/>
                <path d="M 8,96 L 520,96" fill="none" stroke="black"/>
                <path d="M 8,160 L 520,160" fill="none" stroke="black"/>
                <g class="text">
                  <text x="8" y="36">0</text>
                  <text x="168" y="36">1</text>
                  <text x="328" y="36">2</text>
                  <text x="488" y="36">3</text>
                  <text x="8" y="52">0</text>
                  <text x="24" y="52">1</text>
                  <text x="40" y="52">2</text>
                  <text x="56" y="52">3</text>
                  <text x="72" y="52">4</text>
                  <text x="88" y="52">5</text>
                  <text x="104" y="52">6</text>
                  <text x="120" y="52">7</text>
                  <text x="136" y="52">8</text>
                  <text x="152" y="52">9</text>
                  <text x="168" y="52">0</text>
                  <text x="184" y="52">1</text>
                  <text x="200" y="52">2</text>
                  <text x="216" y="52">3</text>
                  <text x="232" y="52">4</text>
                  <text x="248" y="52">5</text>
                  <text x="264" y="52">6</text>
                  <text x="280" y="52">7</text>
                  <text x="296" y="52">8</text>
                  <text x="312" y="52">9</text>
                  <text x="328" y="52">0</text>
                  <text x="344" y="52">1</text>
                  <text x="360" y="52">2</text>
                  <text x="376" y="52">3</text>
                  <text x="392" y="52">4</text>
                  <text x="408" y="52">5</text>
                  <text x="424" y="52">6</text>
                  <text x="440" y="52">7</text>
                  <text x="456" y="52">8</text>
                  <text x="472" y="52">9</text>
                  <text x="488" y="52">0</text>
                  <text x="504" y="52">1</text>
                  <text x="76" y="84">Length</text>
                  <text x="316" y="84">Reserved</text>
                  <text x="520" y="116">:</text>
                  <text x="8" y="132">:</text>
                  <text x="228" y="132">Individual</text>
                  <text x="304" y="132">Options</text>
                  <text x="520" y="132">:</text>
                  <text x="8" y="148">:</text>
                  <text x="520" y="148">:</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![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    |                  Reserved                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               :
    :                      Individual Options                       :   
    :                                                               :  
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    
]]></artwork>
          </artset>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Length: 8-bit unsigned integer. Represents the length of TCP Options, including the Length and Reserved fields. Measured in 4-octet units. Value <bcp14>MUST</bcp14> be 1 or greater. A value of 1 indicates that only the Length and Reserved fields are present, with no Individual Options (i.e., the options region is empty).</t>
          </li>
          <li>
            <t>Reserved: <bcp14>MUST</bcp14> be set to 0 by the sender and <bcp14>MUST</bcp14> be ignored by the receiver.</t>
          </li>
          <li>
            <t>Individual Options: Defined in <xref target="RFC9293"/>.</t>
          </li>
        </ul>
        <t>In a SEG-U, the receiver <bcp14>MUST</bcp14> use the Length field to determine the
boundary between the Options field and TCP data. TCP data begins at
byte offset 20 + (Length x 4) from the start of the TCP header, where
20 is the length of the fixed TCP header fields. This replaces the role
of the Data Offset field, which <bcp14>MUST</bcp14> be ignored as an offset in a SEG-U.</t>
        <t>As per <xref target="RFC9293"/>, checksums are calculated over the entire Options field.</t>
        <t>A SEG-U can include 1,016 octets of options. While this may be required in the distant future, it is <bcp14>RECOMMENDED</bcp14> that TCP options not exceed 256 octets.</t>
      </section>
    </section>
    <section anchor="backward">
      <name>Backwards Compatibility Considerations</name>
      <t>When a legacy TCP client initiates a session with an updated TCP server, it sends a SYN-O. Depending upon local policy and application requirements, the server can refuse the connection request or continue with a TCP-O.</t>
      <t>When an updated TCP client initiates a session with a legacy TCP server, it sends a SYN-U. The server can ignore the SYN-U and allow the session to time out, as per <xref target="RFC9293"/> or respond with a SYN/ACK-O, in violation of <xref target="RFC9293"/>.</t>
      <t>In the latter case, depending upon local policy and application requirements, the updated TCP client can either terminate the connection or continue with a TCP-O.</t>
      <t>The behavior described above is acceptable in environments where extended TCP options are essential. However, it is not acceptable in environments where extended TCP options are desirable, but not essential. In these environments, implementations <bcp14>SHOULD</bcp14> implement the Dual Three-Way Handshake described in <xref target="dualSYN"/>. In the Dual Three-Way Handshake, the client simultaneously initiates both a TCP-U and a TCP-O connection, and proceeds with whichever is accepted, preferring TCP-U when it is accepted.</t>
    </section>
    <section anchor="middleboxes-and-accelerators">
      <name>Middleboxes and Accelerators</name>
      <t>Legacy middleboxes and hardware accelerators ignore packets with Data Offset equal to 0. So, when a TCP client sends a SYN-U and receives no response, it cannot tell whether the packet was ignored by a middlebox, an accelerator, or the server.</t>
      <t>Regardless of where the packet was ignored, the client observes the behavior described in <xref target="backward"/> and behaves as if the packet were ignored by a legacy server.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document inherits security considerations from <xref target="RFC9293"/>.</t>
      <t>Setting the Data Offset field to 0 intentionally violates <xref target="RFC9293"/> Section 3.1, which mandates that the Data Offset field <bcp14>MUST</bcp14> be 5 or greater. This approach is acceptable because:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="RFC9293"/> compliant implementations will reject or discard segments with invalid Data Offset values (less than 5) before processing options. This ensures that legacy TCP implementations cannot be exploited by SEG-U segments, as the segments will be discarded at the validation stage rather than processed.</t>
        </li>
        <li>
          <t>Upgraded TCP implementations <bcp14>MUST</bcp14> validate that the Data Offset field is either within the range [5, 15] (indicating a SEG-O) or exactly 0 (indicating a SEG-U). Any other value is malformed and <bcp14>MUST</bcp14> be discarded. Implementations <bcp14>MUST NOT</bcp14> attempt to infer meaning from intermediate values.</t>
        </li>
        <li>
          <t>Legacy middleboxes that strictly validate TCP headers per <xref target="RFC9293"/> will discard or ignore SEG-U segments, which is the desired behavior for backward compatibility. Middleboxes that do not validate Data Offset values may forward SEG-U segments unchanged.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no IANA requests.</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>
            <li>
              <t>Did you implement the Dual Three-Way Handshake?</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 anchor="success-criteria">
        <name>Success Criteria</name>
        <t>Successful experimental deployment <bcp14>SHOULD</bcp14> demonstrate the following:</t>
        <ol spacing="normal" type="1"><li>
            <t>Implementation and testing by at least two independent developers or organizations</t>
          </li>
          <li>
            <t>Interoperability validation between implementations, demonstrating that SEG-U segments are correctly generated and processed</t>
          </li>
          <li>
            <t>At least one deployment in a testbed or production environment</t>
          </li>
          <li>
            <t>No critical security vulnerabilities discovered during the experiment</t>
          </li>
          <li>
            <t>Positive or neutral feedback regarding middlebox compatibility and packet handling</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to acknowledge Keshawn Hamlin, Jordan Head, C. M. Heard, Rahul Khali, Prashant Kumar, Amalesh Maity, Erin MacNeil, Jainam Parikh, Joe Touch and Michael Tuexen for their review and helpful comments.</t>
      <t>Special thanks to Bob Briscoe, who contributed the Dual Three-Way Handshake in <xref target="I-D.briscoe-tcpm-inner-space"/>.</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="RFC5925">
          <front>
            <title>The TCP Authentication Option</title>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="R. Bonica" initials="R." surname="Bonica"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>This document specifies the TCP Authentication Option (TCP-AO), which obsoletes the TCP MD5 Signature option of RFC 2385 (TCP MD5). TCP-AO specifies the use of stronger Message Authentication Codes (MACs), protects against replays even for long-lived TCP connections, and provides more details on the association of security with TCP connections than TCP MD5. TCP-AO is compatible with either a static Master Key Tuple (MKT) configuration or an external, out-of-band MKT management mechanism; in either case, TCP-AO also protects connections when using the same MKT across repeated instances of a connection, using traffic keys derived from the MKT, and coordinates MKT changes between endpoints. The result is intended to support current infrastructure uses of TCP MD5, such as to protect long-lived connections (as used, e.g., in BGP and LDP), and to support a larger set of MACs with minimal other system and operational changes. TCP-AO uses a different option identifier than TCP MD5, even though TCP-AO and TCP MD5 are never permitted to be used simultaneously. TCP-AO supports IPv6, and is fully compatible with the proposed requirements for the replacement of TCP MD5. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5925"/>
          <seriesInfo name="DOI" value="10.17487/RFC5925"/>
        </reference>
        <reference anchor="I-D.bonica-tcpm-tcp-ao-long-algs">
          <front>
            <title>384-bit Cryptographic Algorithms For Use With TCP-AO</title>
            <author fullname="Ron Bonica" initials="R. P." surname="Bonica">
              <organization>HPE</organization>
            </author>
            <author fullname="Tony Li" initials="T." surname="Li">
              <organization>HPE</organization>
            </author>
            <date day="2" month="June" year="2026"/>
            <abstract>
              <t>   RFC5926 creates a list of cryptographic algorithms that can be used
   with TCP-AO.  This document expands that list, adding two Message
   Authentication Code (MAC) algorithms, HMAC-SHA384 and KMAC384.  For
   each MAC algorithm, a corresponding Key Derivation Function (KDF) is
   also added.

   The MAC algorithms described by this document produce 384-bit (i.e.,
   48-byte) MACs.  When 48-byte MACs are encoded in TCP-AO, the TCP-AO
   consumes 52 bytes.  This exceeds TCP's 40-byte option size
   limitation.  Therefore, it depends on a solution that extends TCP
   Option space.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bonica-tcpm-tcp-ao-long-algs-03"/>
        </reference>
        <reference anchor="I-D.briscoe-tcpm-inner-space">
          <front>
            <title>Inner Space for TCP Options</title>
            <author fullname="Bob Briscoe" initials="B." surname="Briscoe">
              <organization>BT</organization>
            </author>
            <date day="27" month="October" year="2014"/>
            <abstract>
              <t>   This document describes an experimental method to extend the limited
   space for control options in every segment of a TCP connection.  It
   can use a dual handshake so that, from the very first SYN segment,
   extra option space can immediately start to be used optimistically.
   At the same time a dual handshake prevents a legacy server from
   getting confused and sending the control options to the application
   as user-data.  The dual handshake is only one strategy - a single
   handshake will usually suffice once deployment has got started.  The
   protocol is designed to traverse most known middleboxes including
   connection splitters, because it sits wholly within the TCP Data.  It
   also provides reliable ordered delivery for control options.
   Therefore, it should allow new TCP options to be introduced i) with
   minimal middlebox traversal problems; ii) with incremental deployment
   from legacy servers; iii) without an extra round of handshaking delay
   iv) without having to provide its own loss recovery and ordering
   mechanism and v) without arbitrary limits on available space.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-briscoe-tcpm-inner-space-01"/>
        </reference>
        <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="&lt;https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml#tcp-parameters-1&gt;"/>
        </reference>
      </references>
    </references>
    <?line 273?>

<section anchor="dualSYN">
      <name>Dual Three-Way Handshake</name>
      <t>In this procedure an upgraded TCP client executes two three-way handshakes in parallel.
One three-way handshake begins with a SYN-U while the other begins with a SYN-O. Both SYN segments have the same source address, destination address, and destination port. However, they use different source ports. So, while both SYN segments are directed to the same peer, they initiate different TCP sessions. The session that begins with a SYN-U is a TCP-U while the session that begins with SYN-O is a TCP-O.</t>
      <t>Having sent a SYN-U and a SYN-O, the client may receive:</t>
      <ul spacing="normal">
        <li>
          <t>A SYN/ACK-U and a SYN/ACK-O, in that order</t>
        </li>
        <li>
          <t>A SYN/ACK-U but not a SYN/ACK-O</t>
        </li>
        <li>
          <t>A SYN/ACK-O and a SYN/ACK-U, in that order</t>
        </li>
        <li>
          <t>A SYN/ACK-O but not a SYN/ACK-U</t>
        </li>
        <li>
          <t>Neither a SYN/ACK-U nor a SYN/ACK-O</t>
        </li>
      </ul>
      <t>The following subsections describe each scenario.</t>
      <section anchor="synack-u-arrives-first-then-synack-o">
        <name>SYN/ACK-U Arrives First, Then SYN/ACK-O</name>
        <figure anchor="dualSYN-s1">
          <name>Dual Three-Way Handshake: SYN/ACK-U Then SYN/ACK-O</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="544" viewBox="0 0 544 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,48 L 16,160" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,160" fill="none" stroke="black"/>
                <path d="M 24,64 L 48,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 48,112" fill="none" stroke="black"/>
                <path d="M 112,112 L 440,112" fill="none" stroke="black"/>
                <path d="M 24,128 L 216,128" fill="none" stroke="black"/>
                <path d="M 416,128 L 440,128" fill="none" stroke="black"/>
                <path d="M 24,144 L 48,144" fill="none" stroke="black"/>
                <path d="M 112,144 L 440,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,144 436,138.4 436,149.6" fill="black" transform="rotate(0,440,144)"/>
                <polygon class="arrowhead" points="448,112 436,106.4 436,117.6" fill="black" transform="rotate(0,440,112)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
                <polygon class="arrowhead" points="32,128 20,122.4 20,133.6" fill="black" transform="rotate(180,24,128)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(180,24,96)"/>
                <g class="text">
                  <text x="36" y="36">Upgraded</text>
                  <text x="88" y="36">TCP</text>
                  <text x="132" y="36">Client</text>
                  <text x="472" y="36">TCP</text>
                  <text x="516" y="36">Server</text>
                  <text x="80" y="68">SYN-U</text>
                  <text x="124" y="68">(src</text>
                  <text x="164" y="68">port</text>
                  <text x="196" y="68">X)</text>
                  <text x="80" y="84">SYN-O</text>
                  <text x="124" y="84">(src</text>
                  <text x="164" y="84">port</text>
                  <text x="196" y="84">Y)</text>
                  <text x="264" y="100">SYN/ACK-U</text>
                  <text x="324" y="100">(dst</text>
                  <text x="364" y="100">port</text>
                  <text x="396" y="100">X)</text>
                  <text x="80" y="116">ACK-U</text>
                  <text x="264" y="132">SYN/ACK-O</text>
                  <text x="324" y="132">(dst</text>
                  <text x="364" y="132">port</text>
                  <text x="396" y="132">Y)</text>
                  <text x="80" y="148">RST-O</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Upgraded TCP Client                                      TCP Server
  |                                                     |
  |---- SYN-U (src port X) ---------------------------->|
  |---- SYN-O (src port Y) ---------------------------->|
  |<------------------------ SYN/ACK-U (dst port X) ----|
  |---- ACK-U ----------------------------------------->|
  |<------------------------ SYN/ACK-O (dst port Y) ----|
  |---- RST-O ----------------------------------------->|
  |                                                     |
]]></artwork>
          </artset>
        </figure>
        <t>In this scenario, TCP-U succeeds immediately. The client completes the TCP-U three-way handshake by sending ACK-U.</t>
        <t>When SYN/ACK-O arrives for the parallel TCP-O attempt, the client rejects that connection by sending RST-O. The client then uses the TCP-U connection for all subsequent data exchange.</t>
      </section>
      <section anchor="synack-u-arrives-synack-o-does-not-arrive">
        <name>SYN/ACK-U Arrives, SYN/ACK-O Does Not Arrive</name>
        <figure anchor="dualSYN-s2">
          <name>Dual Three-Way Handshake: SYN/ACK-U Only</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="544" viewBox="0 0 544 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,48 L 16,144" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,144" fill="none" stroke="black"/>
                <path d="M 24,64 L 48,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 48,112" fill="none" stroke="black"/>
                <path d="M 112,112 L 440,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,112 436,106.4 436,117.6" fill="black" transform="rotate(0,440,112)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(180,24,96)"/>
                <g class="text">
                  <text x="36" y="36">Upgraded</text>
                  <text x="88" y="36">TCP</text>
                  <text x="132" y="36">Client</text>
                  <text x="472" y="36">TCP</text>
                  <text x="516" y="36">Server</text>
                  <text x="80" y="68">SYN-U</text>
                  <text x="124" y="68">(src</text>
                  <text x="164" y="68">port</text>
                  <text x="196" y="68">X)</text>
                  <text x="80" y="84">SYN-O</text>
                  <text x="124" y="84">(src</text>
                  <text x="164" y="84">port</text>
                  <text x="196" y="84">Y)</text>
                  <text x="264" y="100">SYN/ACK-U</text>
                  <text x="324" y="100">(dst</text>
                  <text x="364" y="100">port</text>
                  <text x="396" y="100">X)</text>
                  <text x="80" y="116">ACK-U</text>
                  <text x="208" y="132">[no</text>
                  <text x="264" y="132">SYN/ACK-O</text>
                  <text x="344" y="132">observed]</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Upgraded TCP Client                                      TCP Server
  |                                                     |
  |---- SYN-U (src port X) ---------------------------->|
  |---- SYN-O (src port Y) ---------------------------->|
  |<------------------------ SYN/ACK-U (dst port X) ----|
  |---- ACK-U ----------------------------------------->|
  |                      [no SYN/ACK-O observed]        |
  |                                                     |
]]></artwork>
          </artset>
        </figure>
        <t>In this scenario, TCP-U succeeds and TCP-O is not established. The client completes the TCP-U three-way handshake and proceeds with TCP-U.</t>
        <t>The client silently abandons the TCP-O attempt. If a delayed SYN/ACK-O is received later, the client sends RST-O.</t>
      </section>
      <section anchor="synack-o-arrives-first-then-synack-u">
        <name>SYN/ACK-O Arrives First, Then SYN/ACK-U</name>
        <figure anchor="dualSYN-s3">
          <name>Dual Three-Way Handshake: SYN/ACK-O Then SYN/ACK-U</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="544" viewBox="0 0 544 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,48 L 16,176" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,96" fill="none" stroke="black"/>
                <path d="M 448,128 L 448,176" fill="none" stroke="black"/>
                <path d="M 24,64 L 48,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 24,128 L 216,128" fill="none" stroke="black"/>
                <path d="M 416,128 L 440,128" fill="none" stroke="black"/>
                <path d="M 24,144 L 48,144" fill="none" stroke="black"/>
                <path d="M 112,144 L 440,144" fill="none" stroke="black"/>
                <path d="M 24,160 L 48,160" fill="none" stroke="black"/>
                <path d="M 112,160 L 440,160" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,160 436,154.4 436,165.6" fill="black" transform="rotate(0,440,160)"/>
                <polygon class="arrowhead" points="448,144 436,138.4 436,149.6" fill="black" transform="rotate(0,440,144)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
                <polygon class="arrowhead" points="32,128 20,122.4 20,133.6" fill="black" transform="rotate(180,24,128)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(180,24,96)"/>
                <g class="text">
                  <text x="36" y="36">Upgraded</text>
                  <text x="88" y="36">TCP</text>
                  <text x="132" y="36">Client</text>
                  <text x="472" y="36">TCP</text>
                  <text x="516" y="36">Server</text>
                  <text x="80" y="68">SYN-U</text>
                  <text x="124" y="68">(src</text>
                  <text x="164" y="68">port</text>
                  <text x="196" y="68">X)</text>
                  <text x="80" y="84">SYN-O</text>
                  <text x="124" y="84">(src</text>
                  <text x="164" y="84">port</text>
                  <text x="196" y="84">Y)</text>
                  <text x="264" y="100">SYN/ACK-O</text>
                  <text x="324" y="100">(dst</text>
                  <text x="364" y="100">port</text>
                  <text x="396" y="100">Y)</text>
                  <text x="128" y="116">[wait</text>
                  <text x="184" y="116">briefly</text>
                  <text x="232" y="116">for</text>
                  <text x="288" y="116">preferred</text>
                  <text x="356" y="116">TCP-U]</text>
                  <text x="440" y="116">|</text>
                  <text x="264" y="132">SYN/ACK-U</text>
                  <text x="324" y="132">(dst</text>
                  <text x="364" y="132">port</text>
                  <text x="396" y="132">X)</text>
                  <text x="80" y="148">ACK-U</text>
                  <text x="80" y="164">RST-O</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Upgraded TCP Client                                      TCP Server
  |                                                     |
  |---- SYN-U (src port X) ---------------------------->|
  |---- SYN-O (src port Y) ---------------------------->|
  |<------------------------ SYN/ACK-O (dst port Y) ----|
  |           [wait briefly for preferred TCP-U]       |
  |<------------------------ SYN/ACK-U (dst port X) ----|
  |---- ACK-U ----------------------------------------->|
  |---- RST-O ----------------------------------------->|
  |                                                     |
]]></artwork>
          </artset>
        </figure>
        <t>In this scenario, the ordinary handshake responds first but the updated handshake is preferred.</t>
        <t>Upon receiving SYN/ACK-O first, the client waits for a short, locally configured interval to allow SYN/ACK-U to arrive. If SYN/ACK-U arrives during that interval, the client completes TCP-U and send RST-O for the TCP-O attempt.</t>
        <t>If SYN/ACK-U does not arrive before the local interval expires, the client completes TCP-O instead.</t>
      </section>
      <section anchor="synack-o-arrives-synack-u-does-not-arrive">
        <name>SYN/ACK-O Arrives, SYN/ACK-U Does Not Arrive</name>
        <figure anchor="dualSYN-s4">
          <name>Dual Three-Way Handshake: SYN/ACK-O Only</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="544" viewBox="0 0 544 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,48 L 16,144" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,144" fill="none" stroke="black"/>
                <path d="M 24,64 L 48,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 216,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 48,112" fill="none" stroke="black"/>
                <path d="M 112,112 L 440,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,112 436,106.4 436,117.6" fill="black" transform="rotate(0,440,112)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
                <polygon class="arrowhead" points="32,96 20,90.4 20,101.6" fill="black" transform="rotate(180,24,96)"/>
                <g class="text">
                  <text x="36" y="36">Upgraded</text>
                  <text x="88" y="36">TCP</text>
                  <text x="132" y="36">Client</text>
                  <text x="472" y="36">TCP</text>
                  <text x="516" y="36">Server</text>
                  <text x="80" y="68">SYN-U</text>
                  <text x="124" y="68">(src</text>
                  <text x="164" y="68">port</text>
                  <text x="196" y="68">X)</text>
                  <text x="80" y="84">SYN-O</text>
                  <text x="124" y="84">(src</text>
                  <text x="164" y="84">port</text>
                  <text x="196" y="84">Y)</text>
                  <text x="264" y="100">SYN/ACK-O</text>
                  <text x="324" y="100">(dst</text>
                  <text x="364" y="100">port</text>
                  <text x="396" y="100">Y)</text>
                  <text x="80" y="116">ACK-O</text>
                  <text x="208" y="132">[no</text>
                  <text x="264" y="132">SYN/ACK-U</text>
                  <text x="344" y="132">observed]</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Upgraded TCP Client                                      TCP Server
  |                                                     |
  |---- SYN-U (src port X) ---------------------------->|
  |---- SYN-O (src port Y) ---------------------------->|
  |<------------------------ SYN/ACK-O (dst port Y) ----|
  |---- ACK-O ----------------------------------------->|
  |                      [no SYN/ACK-U observed]        |
  |                                                     |
]]></artwork>
          </artset>
        </figure>
        <t>In this scenario, only TCP-O succeeds. The client completes the TCP-O handshake and proceeds with a TCP-O connection.</t>
        <t>The TCP-U attempt is abandoned. If a delayed SYN/ACK-U arrives after TCP-O is selected, the client sends RST-U.</t>
      </section>
      <section anchor="scenario-5-neither-synack-u-nor-synack-o-arrives">
        <name>Scenario 5: Neither SYN/ACK-U Nor SYN/ACK-O Arrives</name>
        <figure anchor="dualSYN-s5">
          <name>Dual Three-Way Handshake: No Response</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="160" width="544" viewBox="0 0 544 160" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,48 L 16,128" fill="none" stroke="black"/>
                <path d="M 448,48 L 448,128" fill="none" stroke="black"/>
                <path d="M 24,64 L 48,64" fill="none" stroke="black"/>
                <path d="M 216,64 L 440,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 216,80 L 440,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="448,64 436,58.4 436,69.6" fill="black" transform="rotate(0,440,64)"/>
                <g class="text">
                  <text x="36" y="36">Upgraded</text>
                  <text x="88" y="36">TCP</text>
                  <text x="132" y="36">Client</text>
                  <text x="472" y="36">TCP</text>
                  <text x="516" y="36">Server</text>
                  <text x="80" y="68">SYN-U</text>
                  <text x="124" y="68">(src</text>
                  <text x="164" y="68">port</text>
                  <text x="196" y="68">X)</text>
                  <text x="80" y="84">SYN-O</text>
                  <text x="124" y="84">(src</text>
                  <text x="164" y="84">port</text>
                  <text x="196" y="84">Y)</text>
                  <text x="208" y="100">[no</text>
                  <text x="264" y="100">SYN/ACK-U</text>
                  <text x="344" y="100">observed]</text>
                  <text x="208" y="116">[no</text>
                  <text x="264" y="116">SYN/ACK-O</text>
                  <text x="344" y="116">observed]</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
 Upgraded TCP Client                                      TCP Server
  |                                                     |
  |---- SYN-U (src port X) ---------------------------->|
  |---- SYN-O (src port Y) ---------------------------->|
  |                      [no SYN/ACK-U observed]        |
  |                      [no SYN/ACK-O observed]        |
  |                                                     |
]]></artwork>
          </artset>
        </figure>
        <t>In this scenario, neither parallel connection attempt succeeds.</t>
        <t>The client retransmits SYN-U and SYN-O according to <xref target="RFC9293"/> timer and retry behavior. If retries are exhausted without receiving either SYN/ACK-U or SYN/ACK-O, the connection attempt fails.</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
YtqhZXeWrwl5KcZSpyDCfwM+LEJMOkkAAA==

-->

</rfc>
