<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema
      validation and schema-aware editing --> 
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> --> 
<!-- This third-party XSLT can be enabled for direct transformations
in XML processors, including most browsers --> 

<!DOCTYPE rfc [
  <!ENTITY filename "draft-eastlake-6man-hide-options-11">
  <!ENTITY nbsp   "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be
added to the DOCTYPE above. Use of an external entity file is not
recommended. --> 
<?rfc strict="yes" ?>
<?rfc toc="yes"?>

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="std"
  docName="&filename;"
  ipr="trust200902"
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
<!-- 
    * docName should be the name of your draft * category should be
    one of std, bcp, info, exp, historic * ipr should be one of
    trust200902, noModificationTrust200902, noDerivativesTrust200902,
    pre5378Trust200902 * updates can be an RFC number as NNNN *
    obsoletes can be an RFC number as NNNN
-->


<!-- ____________________FRONT_MATTER____________________ -->
<front>
   <title abbrev="Hiding IP Options">Transient Hiding of Hop-by-Hop
   Options</title>
   <!--  The abbreviated title is required if the full title is
        longer than 39 characters --> 

   <seriesInfo name="Internet-Draft"
               value="&filename;"/>

   <author fullname="Donald E. Eastlake 3rd" initials="D."
           surname="Eastlake">
     <organization>Independent</organization>
     <address>
       <postal>
         <street>2386 Panoramic Circle</street>
         <city>Apopka</city>
         <region>Florida</region>
         <code>32703</code>
         <country>USA</country>
       </postal>        
       <email>d3e3e3@gmail.com</email>
     </address>
   </author>
   
   <author fullname="Jie Dong" initials="J."
           surname="Dong">
     <organization>Huawei Technologies</organization>
     <address>
       <postal>
         <street>Huawei Campus, No. 156 Beiqing Rd.</street>
         <city>Beijing</city>
         <code>100095</code>
         <country>China</country>
       </postal>        
       <email>jie.dong@huawei.com</email>
    </address>
   </author>

   <date year="2026" month="6" day="5"/>

   <area>Internet</area>
   <workgroup>6MAN Working Group</workgroup>
   <!-- "Internet Engineering Task Force" is fine for individual
        submissions.  If this element is not present, the default is
        "Network Working Group", which is used by the RFC Editor as a
        nod to the history of the RFC Series. --> 

   <keyword>IPv6</keyword>
   <keyword>hop-by-hop options</keyword>
   <keyword>extension headers</keyword>
   <!-- Multiple keywords are allowed.  Keywords are incorporated
        into HTML output files for use by search engines. --> 

<abstract>
   <t>There are an increasing number of IPv6 hop-by-hop options
   specified but such IPv6 options are poorly handled, particularly by
   high-speed routers in the core Internet where packets having
   options may be discarded. This document proposes a simple method of
   transiently hiding such options for part of a packet's path to
   protect the packet from discard or mishandling.</t>
</abstract>
 
</front>


<!-- ____________________MIDDLE_MATTER____________________ -->
<middle>
    
<section>  <!-- 1. -->
  <name>Introduction</name>

<t>As discussed in [Options3] there are an increasing number of IPv6
hop-by-hop options being specified. But such IPv6 options, are poorly
handled, particularly by high-speed routers in the core Internet where
packets having options may be discarded. This document proposes a
simple method of transiently hiding such options for part of a
packet's path to protect the packet from discard or mishandling. In
this document, the network area where options are hidden is called the
"opaque area".</t>

<section>  <!-- 1.1 -->
  <name>Conventions Used in This Document</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>

<t>Terms:</t>

<dl>
<dt>ASIC</dt><dd>- Application Specific Integrated Circuit.</dd>

<dt>field</dt><dd>- an area of one or more contiguous bits within a larger
data structure.</dd>

<dt>opaque area</dt><dd>- The part of the IPv6 network within which
options are hidden.</dd>
</dl>

</section>
</section>

<section>  <!--2. -->
  <name>IP Options and Option Handling Problems</name>

<t>This Section is informational and intended to provide background
information.</t>

<t>In the early days of the Internet, much of the traffic was text,
transmission speeds were slow, and IP routers were commonly
small general-purpose computers. Under these conditions, parsing IP
headers with various options or combinations of options, handling
variable length options, etc., was relatively easy.</t>

<t>However, as time passed, the Internet increased in size, bandwidth
grew including more voluminous media such as video, transmission
speeds increased enormously, and latency/responsiveness requirements
became more stringent. These requirements have led to IP routers,
especially in the core of the Internet, becoming less flexible and
more specialized. To be able to handle data faster and more
efficiently, such core IP routers are divided into a forwarding plane
and a control plane where the forwarding plane handles the usual data
forwarding while the control plane handles routing control messages and
other packets that the data plane cannot handle. In some IP routers,
the forwarding plane is implemented with Application Specific
Integrated Circuits (ASICs) that are inflexible and may need fields
they examine in an IP packet header to be at a fixed offset from the
beginning of the packet. Meanwhile, the control plane may be
implemented through a general-purpose computer which can only handle a
limited number of packets per unit time.</t>

<t>For these reasons, many IP routers do not implement many, if any,
types of IPv6 Hop-by-Hop options (or IPv4 <xref target="RFC0791"/>
header options) except through the control plane which has limited
capacity. Sending packets with such options to the control plane can
overwhelm the control plane and interfere with routing control
messages or other critical functions.  Very often, particularly for IP
routers handling a large volume of traffic, a strategy is adopted of
dropping IP packets with such header options or ignoring the header
options.</t>

<t>See <xref target="Options3"/> for a further discussion of these
option handling problems.</t>

<section>  <!-- 2.1 -->
  <name>IPv6 Options</name>

<t>Figure 1 shows the IPv6 header <xref target="RFC8200"/>. The
initial 4-bit Version field indicates the IP version number and
would be 0b0110 to indicate the value 6.</t>

<figure>
  <name>IPv6 Header</name>
  <artwork type="ascii-art" align="center">
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| Traffic Class |           Flow Label                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Payload Length        |  Next Header  |   Hop Limit   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                         Source Address                        +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                      Destination Address                      +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  </artwork>
</figure>

<t>The value of the 8-bit Next Header field specifies the type and
format of information immediately following the header. For example, a
value of 17 in the Next Header field indicates that the header is
immediately followed by a User Datagram Protocol (UDP) message and a
value of 6 would indicate the header is followed by a Transmission
Control Protocol (TCP) message. In some cases, the data immediately
after the IPv6 header can be a header that itself includes a Next
Header field for the type of data following it and so on as shown in
Figure 2. Such headers, after the initial IPv6 header and before the
main payload, are called Extension Headers and can be viewed as
extensions to the IPv6 header. At this time specified extension
headers include the six listed below, additional extension headers
have been proposed, and likely more extension headers will be proposed
and specified in the future.</t>

<t>Specified extension headers:</t>

<ul>
<li>Hop-by-Hop Options</li>
<li>Fragment</li>
<li>Destination Options</li>
<li>Routing</li>
<li>Authentication</li>
<li>Encapsulating Security Payload</li>
</ul>

<t>In the two "options" types of extension header, the "Hop-by-Hop
Options" and "Destination Options", the extension header content is
further structured into options each of which, except for a one byte
"pad1" option, is an 8-bit type followed by an 8-bit option length,
followed by the option value. Hop-by-Hop options were initially
specified to require that every router pay attention to them. While
this has been relaxed in the most recent IPv6 specification, they are
still sometimes viewed as imposing a burden on every IP router through
which they pass.</t>

<figure>
  <name>IPv6 Option Extension Header</name>
  <artwork type="ascii-art" align="center">
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  |  Hdr Ext Len  |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
.                                                               .
.                            Options                            .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  </artwork>
</figure>

</section>
</section>

<section>  <!-- 3. -->
  <name>Overview of the Protocol</name>

<t>Figure 3 shows a simplified high-level view of a network path
between two hosts within local networks through an opaque area. In
reality there are likely to be more levels with a local network,
whether a home, office, data center, or whatever. In the case where
the opaque area is the Internet core, thses would usually be connected
through one or more levels of lower tier service provider before
connecting to a Tier 1 provider that connects to the core, also known
as the default free zone.</t>

<t></t>

<figure>
  <name>High Level View of an Internet Path</name>
  <artwork type="ascii-art" align="center">
- - - - - - - - - - - - - - - - .       . - - - - - - - - - -
.            Network 1          .       .    Opaque Area /  .
.                               .       .   Internet Core   .
.   +------+   +---+     +---+  .       .       +---+       .
.   |Host A|---|R10|-...-|R19|------------------|R90|       .
.   +------+   +---+     +---+  .       .       +---+       .
.                               .       .        | |        .
. - - - - - - - - - - - - - - - -       .        ...
                                        .       .....
                                        .      .......
                                        .      .......
- - - - - - - - - - - - - - - - .       .       .....
.            Network 2          .       .        ...
.                               .       .        | |        .
.   +------+   +---+     +---+  .       .       +---+       .
.   |Host B|---|R20|-...-|R29|------------------|R99|       .
.   +------+   +---+     +---+  .       .       +---+       .
.                               .       .                   .
. - - - - - - - - - - - - - - - -       - - - - - - - - - - .
  </artwork>
</figure>

<t>There are efforts to improve and streamline handling of IPv6
Hop-by-Hop options such as the methods in <xref target="Options1"/>
and <xref target="Options2"/>. However, even if such a method were
popular and deployed in some network areas, there is likely to be
significant delay before it would be deployed in most of the Internet
core.  While some Internet core routers may ignore options, others
discard packets with options and, as long as there is a significant
chance of such discard, options are rendered essentially useless on
paths through the Internet core.</t>

<t>A solution is to hide options in IP packets while they are in an
area that does not properly handle options, such as the Internet core.
This document specifies a protocol that does this hiding in an easily
detectable and reversible fashion. Thus options can be easily unhidden
on leaving the problematic area. IPv6 Hop-by-Hop options so hidden
might not be effective but the situation can be an improvement over
the traffic using such options being discarded.</t>

<t>This solution requires destination support but that would be
knowable in many cases such as traffic between branches of the same
company or between a customer and a data center.</t>

<t>To obtain more uniform handling of packets in a flow, it may be
desirable to treat all packet in the flow as if they had such options
in that the packet would be transformed to hide and unhide options
even if there were none. Alternatively, this transformation could be
applied to all packets starting with the first having a problematic
option.</t>

<section>  <!-- 3.1 -->
  <name>Transiently Hiding IPv6 Options</name>

<t>IPv6 Hop-by-Hop options SHOULD be hidden on entry to an opaque area
by replacing the zero Next Header field in the IPv6 Header by the
opaque IP protocol number TBD. If this is not done, then the options
will be exposed within the opaque area and may cause packet discard or
other problems.</t>

<t>Hiding is a very simple modification of one 8-bit field in a fixed
location that has no effect of the size of the packet and leaves the
Traffic Class, Flow Label, Hop Limit, etc., unchanged. They are
unhidden by changing this opaque IP protocol number in the IPv6 header
back to zero. The points of hiding and unhiding in the packet's path
(or paths if multicast) should be chosen to maximize the routers at
the beginning and end of the path (Figure 3) that implement the
options while minimizing the chance of unwanted packet discard or
other damaging behavior.</t>

<t>Unhiding is likewise a very simple operation. IPv6 packets with
options hidden are easily recognized by the Next Protocol field value
of TBD in the IPv6 header. Hidden options MUST be unhidden on exit
from the opaque area or subsequent routers or destination hosts may be
presented with IPv6 packets whose Next Protocol field contains a value
they are not programmed to handle. This might result in packet
discard.</t>

</section>

<section>  <!-- 3.2 -->
  <name>Evolution to Greater Option Support</name>

<t>This solution supports the evolution of the Internet toward more
widespread support or beneficent handling of hop-by-hop options as
follows:</t>

<ul>
  
<li>As acceptable option handling is more widely implemented, probably
starting at lower bandwidth routers nearer the edge, the boundaries at
which options are hidden and unhidden to avoid problems in the
Internet core can migrate closer to the core.</li>

<li>If scattered core routers improve to provide acceptable option
handling, they can recognize the opaque protocol number and perform
options, perhaps in a limited way, on packets where those options are
hidden to unimproved routers.</li>

</ul>

</section>
</section>

<section>  <!-- 4. -->
  <name>IANA Considerations</name>

<t>IANA is requested to assign a number from the "Assigned Internet
Protocol Numbers" registry as follows:</t>

<table>
  <thead>
    <tr><th>Decimal</th><th>Keyword</th><th>Protocol</th>
    <th>IPv6 Ex Hdr</th><th align="center">Reference</th></tr>
  </thead>
  <tbody>
<tr><td align="center">TBD</td><td>Opaque</td><td
align="center">Opaque</td><td></td><td>[this document]</td></tr>
  </tbody>
</table>

</section>

<section>  <!-- 5. -->
  <name>Security Considerations</name>

<t>The use of the opaque IP Protocol to mask options is intended to
disable normal analysis of the following packet content, specifically
hop-by-hop options in the IPv6 header. This would make firewalls, deep
packet analysis, and the like less effective. However, such methods
are less likely to be present in the Internet core where packets are
the most likely to be obscured. Furthermore, firewalls tend to only
admit packets with known permissible values in protocol header fields
such as the IP protocol field. The rejection by a firewall of a packet
with the opaque IP protocol value will protect the nodes behind that
firewall from possible damage due to the receipt of a packet modified
as specified in this document. If the firewall does know the opaque IP
Protocol value, it should be configured to treat packets with that
value safely, possibly by reversing the option hiding
transformation.</t>

<t>Performing the specified option hiding header modification only for
packets with options would reveal which packets have that
characteristic and might cause re-ordering of those packets with
respect to other packets in the same flow. Thus, it may be beneficial
to perform the specified modification on all packets in an order
sensitive flow.</t>

<t>Should an IPv6 packet modified to hide options get through to a host
that does not understand this modification, it would almost certainly be
discarded due to having an unknown IP Protocol. This might disrupt
that communication but should not cause security problems.</t>

</section>

</middle>

<!-- ____________________BACK_MATTER____________________ -->
<back>

<references>
  <name>Normative References</name>

<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8200.xml"/>

</references>

<references>
  <name>Informative References</name>

<reference anchor="Options1"
	     target="https://datatracker.ietf.org/doc/draft-li-6man-hbh-fwd-hdr/">
  <front>
    <title>Hop-by-Hop Forwarding Options Header</title>
    <author fullname="Zhenbin Li" initials="Z." surname="Li">
      <organization>Huawei Technologies</organization>
      <address>
	<email>lizhenbin@huawei.com</email>
      </address>
    </author>
    <author fullname="Shuping Peng" initials="S." surname="Peng">
      <organization>Huawei Technologies</organization>
      <address>
	<email>pengshuping@huawei.com</email>
      </address>
    </author>
    <author fullname="Gyan Mishra" initials="G." surname="Mishra">
      <organization>Verizon Inc.</organization>
      <address>
	<email>gyan.s.mishra@verizon.com</email>
      </address>
    </author>
    <date month="2" year="2021"/>
  </front>
  <seriesInfo name="Work in" value="progress"/>
</reference>

<reference anchor="Options2"
	     target="https://datatracker.ietf.org/doc/draft-ietf-6man-hbh-processing/">
  <front>
    <title>IPv6 Hop-by-Hop Options Processing Procedures</title>
    <author fullname="Robert M. Hinden" initials="R" surname="Hinden">
      <organization>Check Point Software</organization>
      <address>
        <postal>
          <street>959 Skyway Road</street>
          <city>San Carlos</city>
          <region>CA</region>
          <code>94070</code>
          <country>USA</country>
        </postal>
        <phone/>
        <email>bob.hinden@gmail.com</email>
      </address>
    </author>
    <author fullname="Godred Fairhurst" initials="G" surname="Fairhurst">
      <organization>University of Aberdeen</organization>
      <address>
        <postal>
          <street>School of Engineering</street>
          <street>Fraser Noble Building</street>
          <city>Aberdeen</city>
          <code>AB24 3UE</code>
          <country>UK</country>
        </postal>
        <email>gorry@erg.abdn.ac.uk</email>
      </address>
    </author>
    <date day="4" month="7" year="2023"/>
  </front>
  <seriesInfo name="Work in" value="progress"/>
</reference>

<reference anchor="Options3"
	     target="https://datatracker.ietf.org/doc/draft-ietf-v6ops-hbh/">
  <front>
    <title>Operational Issues with Processing of the Hop-by-Hop
    Options Header</title>
    <author fullname="Zhenbin Li" initials="Z." surname="Li">
      <organization>Huawei Technologies</organization>
      <address>
	<email>lizhenbin@huawei.com</email>
      </address>
    </author>
    <author fullname="Shuping Peng" initials="S." surname="Peng">
      <organization>Huawei Technologies</organization>
    </author>
    <author fullname="Chongfeng Xie" initials="C." surname="Xie">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>xiechf@chinatelecom.cn</email>
      </address>
    </author>
    <author fullname="Zhuangzhuang Qin" initials="Z." surname="Qin">
      <organization>China Unicom</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>qinzhuangzhuang@chinaunicom.cn</email>
      </address>
    </author>
    <author fullname="Gyan Mishra" initials="G." surname="Mishra">
      <organization>Verizon Inc.</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>gyan.s.mishra@verizon.com</email>
      </address>
    </author>
    <date day="10" month="3" year="2023"/>
  </front>
  <seriesInfo name="Work in" value="progress"/>
</reference>

<xi:include
    href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.0791.xml"/>

</references>

<section>
  <name>Revision History</name>

<t>RFC Editor: Please delete this appendix before publication.</t>

<section>
  <name>-00 to -01</name>

<t>Minor editorial changes. Add more Security Considerations. Add
Acknowledgements section.</t>

</section>
<section>
  <name>-01 to -02</name>

<t>Delete IPv4 material. It was a bit complex and almost no one really
cares about IPv4 options. Also, minor editorial changes.</t>

</section>
<section>
  <name>-02 to -03 to -04</name>

<t>Minor changes.</t>

</section>
<section>
  <name>-04 to -05</name>

<t>Convert to XMLv3. Add author.</t>

</section>
<section>
  <name>-05 to -07</name>

<t>Minor changes.</t>

</section>
<section>
  <name>-07 to -10</name>

<t>Keep alive.</t>

</section>
<section>
  <name>-10 to -11</name>

  <ul>

    <li>Greatly expand Security Considerations section.</li>
    <li>Add <xref target="RFC2119"/> wording.</li>
    <li>Generalize to "opaque area" as well as Internet core.</li>
    <li>Editorial improvements and typo fixes.</li>

  </ul>

</section>

</section>

<section anchor="Acknowledgements" numbered="false">
  <name>Acknowledgments</name>

<t>The helpful comments of the following are gratefully acknowledged:</t>

<t>
Peng Shuping
</t>

</section>

</back>

</rfc>
