﻿<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="info" docName="draft-mcbride-v6ops-eh-use-cases-00" ipr="trust200902">

  <front>
    <title abbrev="draft-mcbride-v6ops-eh-use-cases-00">Extension Header Use Cases</title>
    <seriesInfo name="Internet-Draft" value="draft-mcbride-v6ops-eh-use-cases-00"/>
    <author fullname="Mike McBride">
      <organization>Futurewei</organization>
      <address>
        <email>michael.mcbride@futurewei.com</email>
      </address>
    </author>
    <author fullname="Nalini Elkins">
      <organization>Inside Products, Inc</organization>
      <address>
        <email>nalini.elkins@insidethestack.com</email>
      </address>
    </author>
    <author fullname="Nick Buraglio">
      <organization>Forwarding Plane</organization>
      <address>
        <email>buraglio@forwardingplane.net</email>
      </address>
    </author>
    <author fullname="Xuesong Geng">
      <organization>Huawei Technologies</organization>
      <address>
        <email>gengxuesong@huawei.com</email>
      </address>
    </author>
    <author fullname="Michael Ackermann">
      <organization>BCBS Michigan</organization>
      <address>
        <email>mackermann@bcbsm.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="6"/>
    <area>Ops</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>Extension Headers</keyword>
    <keyword>IPv6</keyword>
    <abstract>
      <?line 84?>

<t>This document outlines IPv6 extension header use cases including
those intended to be deployed in limited domains and those intended
for the global Internet. We specify use cases are deployed today and
those which may be of use in the future. The hope is that through 
understanding these various extension header use cases, we can then
better understand how best to implement any necessary limits on their
use.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mcbride-v6ops-eh-use-cases/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        IPv6 Operations Working Group mailing list (<eref target="mailto:v6ops@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/v6ops/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/v6ops/"/>.
      </t>
    </note>
  </front>

  <middle>
<section anchor="introduction">
      <name>Introduction</name>
      <t>Extension headers have been specified since original 1995 IPv6
Specification <xref target="RFC2460"/> and maintained in the more recently updated
<xref target="RFC8200"/>.  In the nearly 30 years since extension headers were
specified, there have been many documents which have specified how to
limit, block and deprecate their use.  What we haven't had is a
document to show how extension headers are being deployed nor how
related innovations are being proposed.  This document outlines IPv6
extension header use cases including those intended to be deployed in
limited domains and those deployed across the Internet.  By
understanding these various use cases we can better understand how
best to improve upon, and perhaps limit, extension header deployment.</t>
    </section>
    <section anchor="glossary">
      <name>Glossary</name>
      <t>EH: IPv6 Extension Header</t>
      <t>Hop-by-Hop Optioners Header: Used to carry optional information
intended for every node along the path.</t>
      <t>Routing Header: Used to list one or more nodes to be visited on the
way to a packet's destination.</t>
      <t>Fragment Header: Used to send a packet larger than would fit in the
path MTU to its destination.</t>
      <t>Encapsulating Security Payload: The Encapsulating Security Payload
(ESP) extension header provides confidentiality, integrity, and
authentication for IPv6 packets.</t>
      <t>Authentication Header: The IPv6 Authentication Header (AH) extension
provides data integrity, authentication, and anti-replay protection
for IPv6 packets.</t>
      <t>Destination Options Header: Used to carry optional information for
destination nodes.</t>
      <t>Mobility Header: The Mobility Header enables mobility support for
network nodes in IPv6 networks.</t>
      <t>Host Identity Protocol: The Host Identity Protocol (HIP) provides
a cryptographic identity-based solution for secure communication and
mobility management in IPv6 networks.</t>
      <t>Shim6 Protocol: The Shim6 IPv6 extension header enables multihoming
by providing source and destination address selection for efficient 
routing.</t>
      <t>Single Administrative Domain: The EH is limited to one administrative
domain.</t>
      <t>Limited Domain: The EH is limited to a group of administrative
domains.</t>
      <t>Unlimited Domain: The EH is not limited to any group of domains.</t>
    </section>
    <section anchor="ipv6-extension-header-types">
      <name>IPv6 Extension Header Types</name>
      <artwork><![CDATA[
 Protocol         Description                 Reference
  Number 

0         IPv6 Hop-by-Hop Option              [RFC8200]
43        Routing Header for IPv6             [RFC8200][RFC5095]
44        Fragment Header for IPv6            [RFC8200]
50        Encapsulating Security Payload      [RFC4303]
51        Authentication Header               [RFC4302]
60        Destination Options for IPv6        [RFC8200]
135       Mobility Header                     [RFC6275]
139       Host Identity Protocol              [RFC7401]
140       Shim6 Protocol                      [RFC5533]
253       Use for experimentation and testing [RFC3692][RFC4727]
254       Use for experimentation and testing [RFC3692][RFC4727]
]]></artwork>
    </section>
    <section anchor="existing-ipv6-extension-header-use-cases">
      <name>Existing IPv6 Extension Header Use Cases</name>
      <t>In this section we list and describe, several extension header use
cases. We will specify if the use case is intended for a limited
domain and the status of its deployment.  We further categorize the
EH into a category.  The categories are the following:</t>
      <artwork><![CDATA[
Quality of Service
Network Security
Network Management
Application Specific
Internet of Things
Content Delivery Networks
Routing
]]></artwork>
      <t>Another crucial aspect in characterizing extension header usage is to 
determine whether the EH is intended for a single administrative domain, 
a limited domain, or an unlimited domain.</t>
      <t>Furthermore, it is important to consider the potential consequences if 
the EH is modified, which could be a result of transmission errors or 
intentional alterations. It is also necessary to assess whether the EH
contains private data that, if exposed, could lead to a data leak.<br/>
This evaluation may prompt a deeper discussion on the additional 
safeguards that should be implemented, such as incorporating a checksum, 
a signature, or encryption mechanisms for the EH.</t>
      <section anchor="detailed-description-of-categories">
        <name>Detailed Description of Categories</name>
        <ol spacing="normal" type="1"><li>Quality of Service (QoS) Extension Headers: These extension headers
can be used to prioritize and manage traffic based on different quality
of service parameters such as latency, bandwidth, packet loss, or
reliability. They allow for fine-grained control over QoS policies within
an IPv6 network.</li>
          <li>Network Security Extension Headers: These extension headers provide 
enhanced security features for IPv6, such as authentication, integrity checks, 
encryption, or firewall rules. They can be used to enforce network security 
policies at the IP layer, complementing higher-layer security protocols.</li>
          <li>Network Management Extension Headers: These extension headers facilitate 
network management operations by including information related to network 
monitoring, performance measurement, or configuration management. They 
enable administrators to efficiently manage and troubleshoot IPv6 networks.</li>
          <li>Application-Specific Extension Headers: These extension headers cater to 
specific application requirements by carrying application-specific metadata or 
instructions. They can be used to enable application-specific optimizations or 
provide additional context to the network for better application performance.</li>
          <li>Internet of Things (IoT) Extension Headers: These extension headers
include information about device capabilities, power management, sensor data, or 
IoT-specific protocols to enable efficient communication and management of IoT 
devices over IPv6.</li>
          <li>Content Delivery Networks (CDN) Extension Headers: These extension headers 
optimize content delivery over IPv6 by including information related to content 
caching, replication, or load balancing within a content delivery network. They
allow for efficient content distribution and improved performance for 
CDN-enabled services.</li>
          <li>Routing Extension Headers: These extension headers supplement existing
information about routing policies, traffic engineering, or multicast routing
to enhance the routing capabilities of IPv6.</li>
        </ol>
      </section>
      <section anchor="existing-destination-and-hop-by-hop-options">
        <name>Existing Destination and Hop-by-Hop Options</name>
        <t>The following is the list of Destination Options and Hop-by-Hop 
Options which have an option number at IANA.  Note, we will
describe use cases, if any, for options which do not have an 
option number at IANA.</t>
        <t>[ToBeDone: Separate these into Destination Options and
Hop-by-hop options]</t>
        <artwork><![CDATA[
Hex
Value   Description    RFC Number

0x00    Pad1                                      [RFC2460]
0x01    PadN                                      [RFC2460]
0xC2    Jumbo Payload                             [RFC2675]
0x23    RPL Option                                [RFC9008]
0x63    RPL Option (DEPRECATED)                   [RFC6553]
0x04    Tunnel Encapsulation Limit                [RFC2473]
0x05    Router Alert                              [RFC2711]
0x26    Quick-Start                               [RFC4782]
0x07    CALIPSO                                   [RFC5570]
0x08    SMF_DPD                                   [RFC6621]
0xC9    Home Address                              [RFC6275]
0x8A    Endpoint Identification (DEPRECATED) [[CHARLES LYNN]]
0x8B    ILNP Nonce                                [RFC6744]
0x8C    Line-Identification Option                [RFC6788]
0x4D    Deprecated                                [RFC7731]
0x6D    MPL Option                                [RFC7731]
0xEE    IP_DFF                                    [RFC6971]
0x0F    Performance and Diagnostic Metrics (PDM)  [RFC8250]
0x30    Minimum Path MTU Hop-by-Hop Option        [RFC9268]
0x11    IOAM Destination Option and IOAM Hop-by-Hop Option
                                    [RFC-ietf-ippm-ioam-ipv6-options-12]
0x31    IOAM Destination Option and IOAM Hop-by-Hop Option
                                    [RFC-ietf-ippm-ioam-ipv6-options-12]
0x12    AltMark                                   [RFC9343]
10011-11101  Unassigned
0x1E    RFC3692-style Experiment                  [RFC4727]
0x3E    RFC3692-style Experiment                  [RFC4727]
0x5E    RFC3692-style Experiment                  [RFC4727]
0x7E    RFC3692-style Experiment                  [RFC4727]
0x9E    RFC3692-style Experiment                  [RFC4727]
0xBE    RFC3692-style Experiment                  [RFC4727]
0xDE    RFC3692-style Experiment                  [RFC4727]
0xFE    RFC3692-style Experiment                  [RFC4727]

]]></artwork>
      </section>
      <section anchor="existing-routing-types">
        <name>Existing Routing Types</name>
        <t>The following is the list of Routing Types which are defined
at IANA. Note, we will describe use cases, if any, for options
which do not have an option number at IANA.</t>
        <artwork><![CDATA[
Value              Description          Reference
--------------------------------------------------
0   Source Route (DEPRECATED)            [RFC2460][RFC5095]
1   Nimrod (DEPRECATED 2009-05-06)
2   Type 2 Routing Header                [RFC6275]
3   RPL Source Route Header              [RFC6554]
4   Segment Routing Header (SRH)         [RFC8754]
5   CRH-16 (TEMPORARY)                   [draft-bonica-6man-comp
                                         -rtg-hdr-30]
6   CRH-32 (TEMPORARY                    [draft-bonica-6man-comp
                                         -rtg-hdr-30]
7-252 Unassigned
253  RFC3692-style Experiment 1          [RFC4727]
254  RFC3692-style Experiment 2          [RFC4727]
255  Reserved

]]></artwork>
        <t>Segment Routing Header TLVs</t>
        <artwork><![CDATA[
 Value        Description        Reference
 --------------------------------------------------
      0    Pad1 TLV                 [RFC8754]
      1    Reserved                 [RFC8754]
      2    Reserved                 [RFC8754]
      3    Reserved                 [RFC8754]
      4    PadN TLV                 [RFC8754]
      5    HMAC TLV                 [RFC8754]
      6    Reserved                 [RFC8754]
    7-123  Unassigned
   124-126 Experimentation and Test [RFC8754]
     127   Reserved                 [RFC8754]
   128-251 Unassigned
   252-254 Experimentation and Test [RFC8754]
     255   Reserved                 [RFC8754]
]]></artwork>
      </section>
    </section>
    <section anchor="quality-of-service-qos-extension-headers">
      <name>Quality of Service (QoS) Extension Headers</name>
      <section anchor="existing-qos-extension-headers">
        <name>Existing QoS Extension Headers</name>
      </section>
      <section anchor="potential-qos-extension-headers">
        <name>Potential QoS Extension Headers</name>
      </section>
    </section>
    <section anchor="network-management">
      <name>Network Management Extension Headers</name>
      <section anchor="existing-network-management-extension-headers">
        <name>Existing Network Management Extension Headers</name>
        <section anchor="rfc8250-performance-and-diagnostic-metrics-pdm">
          <name>RFC8250: Performance and Diagnostic Metrics (PDM)</name>
          <t>RFC 8250 specifies the Performance and Diagnostic Metrics (PDM)
Destination Options header, which is used to measure the performance
of IPv6 networks. The PDM header contains sequence numbers and timing
information that can be used to calculate metrics such as round-trip 
delay and server delay.</t>
          <t>The PDM header is embedded in each packet, and the information it 
contains is combined with the 5-tuple (source IP address, source port,
destination IP address, destination port, and upper-layer protocol) to
calculate the metrics. The PDM header also includes fields for storing
time scaling factors, which can be used to adjust the measurements for
different network conditions.</t>
          <t>The PDM header can be used to assess performance problems in real time
or after the fact. The measurements can be used to troubleshoot network
problems, identify bottlenecks, and optimize network performance.</t>
        </section>
      </section>
      <section anchor="potential-network-management-extension-headers">
        <name>Potential Network Management Extension Headers</name>
      </section>
    </section>
    <section anchor="network-security-extension-headers">
      <name>Network Security Extension Headers</name>
      <section anchor="existing-network-security-extension-headers">
        <name>Existing Network Security Extension Headers</name>
      </section>
      <section anchor="potential-network-security-extension-headers">
        <name>Potential Network Security Extension Headers</name>
      </section>
    </section>
    <section anchor="application-specific-extension-headers">
      <name>Application Specific Extension Headers</name>
      <section anchor="existing-application-specific-extension-headers">
        <name>Existing Application Specific Extension Headers</name>
      </section>
      <section anchor="potential-application-specific-extension-headers">
        <name>Potential Application Specific Extension Headers</name>
      </section>
    </section>
    <section anchor="internet-of-things-iot-extension-headers">
      <name>Internet of Things (IoT) Extension Headers</name>
      <section anchor="existing-iot-extension-headers">
        <name>Existing IoT Extension Headers</name>
      </section>
      <section anchor="potential-iot-extension-headers">
        <name>Potential IoT Extension Headers</name>
      </section>
    </section>
    <section anchor="content-delivery-networks-cdn-extension-headers">
      <name>Content Delivery Networks (CDN) Extension Headers</name>
      <section anchor="existing-cdn-extension-headers">
        <name>Existing CDN Extension Headers</name>
      </section>
      <section anchor="potential-cdn-extension-headers">
        <name>Potential CDN Extension Headers</name>
      </section>
    </section>
    <section anchor="routing-extension-headers">
      <name>Routing Extension Headers</name>
      
            <section anchor="existing-routing-extension-headers">
        <name>Existing Routing Extension Headers</name>

      
      <section anchor="Segment Routing Header (SRH)">
      <name>Segment Routing Header (SRH)</name>
      <t>Segment Routing (SR) can be applied to the IPv6 data plane using a routing header called the Segment Routing Header (SRH).
      <xref target="RFC8754"/> specifies the encoding of IPv6 segments in an SRH. SRv6 uses this IPv6 Routing Extension Header
      to forward IPv6 packets using the source routing model. It implements hop-by-hop 
      forwarding by adding a Segment Routing header (SRH) into IPv6 packets, encapsulating an explicit IPv6 address stack into
      the SRH, and continuously updating IPv6 destination addresses while offsetting the address stack on transit nodes. According
      to <xref target="I-D.matsushima-spring-srv6-deployment-status"/>, there have been over 10 announced deployments of an SRH
      based data plane and over 20 additional deployments without public announcements.</t>
      </section>
      
      <section anchor="Mobility Header">
      <name>Mobility Header</name>
      <t><xref target="RFC6275"/> specifies Mobile IPv6, a protocol that allows nodes to remain reachable while moving around in the 
      IPv6 Internet.The Mobility Header is an extension header used by mobile nodes, correspondent nodes, and home agents in all messaging 
      related to the creation and management of mobile bindings. The Mobility Header is identified by a Next Header value of 135. </t>
      </section>
      
              <section anchor="mld-messages">
          <name>MLD Messages</name>
          <t>Multicast Listener Discovery (MLD) is used today by IPv6 routers for 
discovering multicast listeners on a directly attached link, much like
Internet Group Management Protocol (IGMP) is used in IPv4. MLD uses 
ICMPv6 (IP Protocol 58) message types, rather than IGMP (IP Protocol 2)
message types. MLD messages are identified in IPv6 packets by a preceding
Next Header value of 58. MLD messages are sent with an IPv6 Router
Alert option in a Hop-by-Hop Options header as defined in RFC 2710.</t>
        </section>
        
              </section>
      
                  <section anchor="potential-routing-extension-headers">
        <name>Potential Routing Extension Headers</name>
      
      <section anchor="bier-integrated-multicast-bitstring">
      <name>Integrated Multicast Bitstring</name>
          <t>There's a potential deployment of using a bitstring (such as used in
BIER) as part of the IPv6 data plane using an EH.</t>
          <artwork><![CDATA[
         |<<-----(BIER-based multicast overlay)----->>|
         |                                            |
         |<----------(L3 BIER(P2MP) tunnel)---------->|
         |                                            |
         |  SEP                 SEP       SEP    SEP  |
         |    +******************+          +****+    |
         |   /                    \        /      \   |
     +------+       +-------+       +-----+        +------+
     | BFIR |-------|Non-BFR|-------| BFR |--------| BFER |
     +------+       +-------+       +-----+        +------+

     ------- L2 link

     ******* IPv6(P2P) segment (SEP = Segment EndPoint)

     <-----> BIER(P2MP) tunnel

]]></artwork>
          <t>In this deployment, BIER works as part of the IPv6 data plane.  The
BFIR and BFERs work as IPv6 (P2MP) tunnel endpoints, and BFRs work as
IPv6 segment endpoints.  The BIER header is processed on each segment
endpoint and there is no decapsulation, or re-encapsulation, on the
segment endpoints.</t>
          <t>This deployment typically needs an IPv6 extension header to carry the
BIER header and processing of the BIER header (e.g., the bitstring)
will be implemented as part of the IPv6 extension header processing.
The IPv6 source address is the BIER packet source-origin identifier,
and is unchanged through the BIER domain from BFIR to BFERs.</t>
        </section>
                      </section>
      </section>
 
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>None.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>None.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>None.</t>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Thanks to Dr. Tommaso Pecorella and Dhruv Dhody for their comments.</t>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <t>Note to RFC Editor: if this document does not obsolete an existing
RFC, please remove this appendix before publication as an RFC</t>
    </section>
    <section anchor="open-issues">
      <name>Open Issues</name>
      <t>Note to RFC Editor: please remove this appendix before publication as
an RFC</t>
    </section>
  </middle>
  <back>
    <references title="Normative References">

      <?rfc include='reference.RFC.4302'?>
      <?rfc include='reference.RFC.4303'?>
      <?rfc include='reference.RFC.4727'?>
      <?rfc include='reference.RFC.4782'?>
      <?rfc include='reference.RFC.5095'?>
      <?rfc include='reference.RFC.5533'?>
      <?rfc include='reference.RFC.5570'?>
      <?rfc include='reference.RFC.6554'?>
      <?rfc include='reference.RFC.6744'?>
      <?rfc include='reference.RFC.6788'?>
      <?rfc include='reference.RFC.6971'?>
      <?rfc include='reference.RFC.3692'?>
      <?rfc include='reference.RFC.2780'?>
      <?rfc include='reference.RFC.2711'?>    
      <?rfc include='reference.RFC.2675'?> 
      <?rfc include='reference.RFC.2473'?>
      <?rfc include='reference.RFC.2460'?>
      <?rfc include='reference.RFC.2119'?>
      <?rfc include='reference.RFC.4271'?>
      <?rfc include='reference.RFC.4607'?>
      <?rfc include='reference.RFC.2858'?>
      <?rfc include='reference.RFC.8279'?>
      <?rfc include='reference.RFC.2236'?>
      <?rfc include='reference.RFC.3810'?>
      <?rfc include='reference.RFC.7401'?>
      <?rfc include='reference.RFC.8200'?>
      <?rfc include='reference.RFC.8250'?>
      <?rfc include='reference.RFC.9008'?>
      <?rfc include='reference.RFC.9268'?>
      <?rfc include='reference.RFC.9343'?>
      <?rfc include='reference.RFC.8754'?>
      <?rfc include='reference.RFC.9180'?>
      <?rfc include='reference.RFC.1421'?>
      <?rfc include='reference.RFC.6275'?>
      <?rfc include='reference.I-D.matsushima-spring-srv6-deployment-status'?>
  
    </references>
      </back>
  </rfc>