<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" consensus="true" docName="draft-iab-use-it-or-lose-it-04" indexInclude="true" ipr="trust200902" number="9170" prepTime="2021-12-30T11:47:28" scripts="Common,Latin" sortRefs="true" submissionType="IAB" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-iab-use-it-or-lose-it-04" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9170" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="Use It or Lose It">Long-Term Viability of Protocol Extension Mechanisms</title>
    <seriesInfo name="RFC" value="9170" stream="IAB"/>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <date month="12" year="2021"/>
    <keyword>Extensions</keyword>
    <keyword>versions</keyword>
    <keyword>grease</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The ability to change protocols depends on exercising the extension
      and version-negotiation mechanisms that support change.  This document
      explores how regular use of new protocol features can ensure that it
      remains possible to deploy changes to a protocol. Examples are given
      where lack of use caused changes to be more difficult or costly.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Architecture Board
            (IAB) and represents information that the IAB has deemed valuable
            to provide for permanent record.  It represents the consensus of the Internet
            Architecture Board (IAB).  Documents approved for publication
            by the IAB are not candidates for any level of Internet Standard; see
            Section 2 of RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9170" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2021 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-imperfect-implementations-l">Imperfect Implementations Limit Protocol Evolution</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-good-protocol-design-is-not">Good Protocol Design Is Not Itself Sufficient</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-disuse-can-hide-problems">Disuse Can Hide Problems</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-multi-party-interactions-an">Multi-party Interactions and Middleboxes</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-active-use">Active Use</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dependency-is-better">Dependency Is Better</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-version-negotiation">Version Negotiation</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-falsifying-active-use">Falsifying Active Use</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples-of-active-use">Examples of Active Use</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.5">
                <t indent="0" pn="section-toc.1-1.3.2.5.1"><xref derivedContent="3.5" format="counter" sectionFormat="of" target="section-3.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-restoring-active-use">Restoring Active Use</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-complementary-techniques">Complementary Techniques</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-fewer-extension-points">Fewer Extension Points</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-invariants">Invariants</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-limiting-participation">Limiting Participation</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-effective-feedback">Effective Feedback</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples">Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="A.1" format="counter" sectionFormat="of" target="section-appendix.a.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dns">DNS</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="A.2" format="counter" sectionFormat="of" target="section-appendix.a.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-http">HTTP</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.3">
                <t indent="0" pn="section-toc.1-1.8.2.3.1"><xref derivedContent="A.3" format="counter" sectionFormat="of" target="section-appendix.a.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ip">IP</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.4">
                <t indent="0" pn="section-toc.1-1.8.2.4.1"><xref derivedContent="A.4" format="counter" sectionFormat="of" target="section-appendix.a.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-snmp">SNMP</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.5">
                <t indent="0" pn="section-toc.1-1.8.2.5.1"><xref derivedContent="A.5" format="counter" sectionFormat="of" target="section-appendix.a.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tcp">TCP</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.6">
                <t indent="0" pn="section-toc.1-1.8.2.6.1"><xref derivedContent="A.6" format="counter" sectionFormat="of" target="section-appendix.a.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tls">TLS</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-iab-members-at-the-time-of-">IAB Members at the Time of Approval
              </xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgments">Acknowledgments</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">A successful protocol <xref target="RFC5218" format="default" sectionFormat="of" derivedContent="SUCCESS"/> needs
      to change in ways that allow it to continue to fulfill the changing
      needs of its users.  New use cases, conditions, and constraints on the
      deployment of a protocol can render a protocol that does not change
      obsolete.</t>
      <t indent="0" pn="section-1-2">Usage patterns and requirements for a protocol shift over time.  In response,
implementations might adjust usage patterns within the constraints of the
protocol, the protocol could be extended, or a replacement protocol might be
developed.  Experience with Internet-scale protocol deployment shows that each
option comes with different costs.  <xref target="RFC8170" format="default" sectionFormat="of" derivedContent="TRANSITIONS"/> examines the
problem of protocol evolution more broadly.</t>
      <t indent="0" pn="section-1-3">An extension point is a mechanism that allows a protocol to be changed or
enhanced.  This document examines the specific conditions that determine whether
protocol maintainers have the ability to design and deploy new or modified
protocols via their specified extension points.  <xref target="implementations" format="default" sectionFormat="of" derivedContent="Section 2"/> highlights
some historical examples of difficulties in transitions to new protocol
features.  <xref target="use-it" format="default" sectionFormat="of" derivedContent="Section 3"/> argues that ossified protocols are more difficult to
update and describes how successful protocols make frequent use of new
extensions and code points.  <xref target="other" format="default" sectionFormat="of" derivedContent="Section 4"/> outlines several additional strategies
that might aid in ensuring that protocol changes remain possible over time.</t>
      <t indent="0" pn="section-1-4">The experience that informs this document is predominantly at "higher" layers of
the network stack, in protocols with limited numbers of participants.  Though
similar issues are present in many protocols that operate at scale, the
trade-offs involved with applying some of the suggested techniques can be more
complex when there are many participants, such as at the network layer or in
routing systems.</t>
    </section>
    <section anchor="implementations" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-imperfect-implementations-l">Imperfect Implementations Limit Protocol Evolution</name>
      <t indent="0" pn="section-2-1">It can be extremely difficult to deploy a change to a protocol if
      implementations with which the new deployment needs to interoperate do
      not operate predictably.  Variation in how new code points or extensions
      are handled can be the result of bugs in implementation or
      specifications.

      Unpredictability can manifest as errors, crashes, timeouts, abrupt
      termination of sessions, or disappearances of endpoints.

      </t>
      <t indent="0" pn="section-2-2">The risk of interoperability problems can in turn make it infeasible
      to deploy certain protocol changes.  If deploying a new code point or
      extension makes an implementation less reliable than others, even if
      only in rare cases, it is far less likely that implementations will
      adopt the change.</t>
      <t indent="0" pn="section-2-3">Deploying a change to a protocol could require implementations to fix
      a substantial proportion of the bugs that the change exposes.  This can
      involve a difficult process that includes identifying the cause of these
      errors, finding the responsible implementation(s), coordinating a bug
      fix and release plan, contacting users and/or the operator of affected
      services, and waiting for the fix to be deployed.</t>
      <t indent="0" pn="section-2-4">Given the effort involved in fixing problems, the existence of these
      sorts of bugs can outright prevent the deployment of some types of
      protocol changes, especially for protocols involving multiple parties or
      that are considered critical infrastructure (e.g., IP, BGP, DNS, or
      TLS).  It could even be necessary to come up with a new protocol design
      that uses a different method to achieve the same result.</t>
      <t indent="0" pn="section-2-5">This document only addresses cases where extensions are not deliberately
blocked.  Some deployments or implementations apply policies that explicitly
prohibit the use of unknown capabilities.  This is especially true of functions
that seek to make security guarantees, like firewalls.</t>
      <t indent="0" pn="section-2-6">The set of interoperable features in a protocol is often the subset of its
features that have some value to those implementing and deploying the protocol.
It is not always the case that future extensibility is in that set.</t>
      <section anchor="not-good-enough" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-good-protocol-design-is-not">Good Protocol Design Is Not Itself Sufficient</name>
        <t indent="0" pn="section-2.1-1">It is often argued that the careful design of a protocol extension
        point or version-negotiation capability is critical to the freedom
        that it ultimately offers.</t>
        <t indent="0" pn="section-2.1-2">RFC 6709 <xref target="RFC6709" format="default" sectionFormat="of" derivedContent="EXTENSIBILITY"/> contains a great
        deal of well-considered advice on designing for extensions.  It
        includes the following advice:</t>
        <blockquote pn="section-2.1-3">
          <t indent="0" pn="section-2.1-3.1">
  This means that, to be useful, a protocol version-negotiation mechanism
  should be simple enough that it can reasonably be assumed that all the
  implementers of the first protocol version at least managed to implement the
  version-negotiation mechanism correctly.
</t>
        </blockquote>
        <t indent="0" pn="section-2.1-4">There are a number of protocols for which this has proven to be insufficient in
practice.  These protocols have imperfect implementations of these mechanisms.
Mechanisms that aren't used are the ones that fail most often.  The same
paragraph from RFC 6709 acknowledges the existence of this problem but does not
offer any remedy:</t>
        <blockquote pn="section-2.1-5">
          <t indent="0" pn="section-2.1-5.1">
    The nature of protocol version-negotiation mechanisms is that, by
    definition, they don't get widespread real-world testing until
    <strong>after</strong> the base protocol has been deployed for a while, and its
    deficiencies have become evident.
          </t>
        </blockquote>
        <t indent="0" pn="section-2.1-6">Indeed, basic interoperability is considered critical early in the deployment of
a protocol.  A desire to deploy can result in early focus on a reduced feature
set, which could result in deferring implementation of version-negotiation and
extension mechanisms.  This leads to these mechanisms being particularly
affected by this problem.</t>
      </section>
      <section anchor="disuse" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-disuse-can-hide-problems">Disuse Can Hide Problems</name>
        <t indent="0" pn="section-2.2-1">There are many examples of extension points in protocols that have been either
completely unused or their use was so infrequent that they could no longer be
relied upon to function correctly.</t>
        <t indent="0" pn="section-2.2-2"><xref target="examples" format="default" sectionFormat="of" derivedContent="Appendix A"/> includes examples of disuse in a number of widely deployed Internet
protocols.</t>
        <t indent="0" pn="section-2.2-3">Even where extension points have multiple valid values, if the set
        of permitted values does not change over time, there is still a risk
        that new values are not tolerated by existing implementations.  If the
        set of values for a particular field of a protocol or the order in which these
        values appear remains fixed over a long period, some
        implementations might not correctly handle a new value when it is
        introduced.  For example, implementations of TLS broke when new values
        of the signature_algorithms extension were introduced.</t>
      </section>
      <section anchor="middleboxes" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-multi-party-interactions-an">Multi-party Interactions and Middleboxes</name>
        <t indent="0" pn="section-2.3-1">One of the key challenges in deploying new features is ensuring compatibility
with all actors that could be involved in the protocol.  Even the most
superficially simple protocols can often involve more actors than is immediately
apparent.</t>
        <t indent="0" pn="section-2.3-2">The design of extension points needs to consider what actions middleboxes
might take in response to a protocol change as well as the effect those actions
could have on the operation of the protocol.</t>
        <t indent="0" pn="section-2.3-3">Deployments of protocol extensions also need to consider the impact
of the changes on entities beyond protocol participants and middleboxes.
Protocol changes can affect the behavior of applications or systems
that don't directly interact with the protocol, such as when a protocol
change modifies the formatting of data delivered to an application.</t>
      </section>
    </section>
    <section anchor="use-it" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-active-use">Active Use</name>
      <t indent="0" pn="section-3-1">The design of a protocol for extensibility and eventual replacement
      <xref target="RFC6709" format="default" sectionFormat="of" derivedContent="EXTENSIBILITY"/> does not guarantee the ability
      to exercise those options.  The set of features that enable future
      evolution need to be interoperable in the first implementations and
      deployments of the protocol.  Implementation of mechanisms that support
      evolution is necessary to ensure that they remain available for new
      uses, and history has shown this occurs almost exclusively through
      active mechanism use.</t>
      <t indent="0" pn="section-3-2">Only by using the extension capabilities of a protocol is the
      availability of that capability assured. "Using" here includes
      specifying, implementing, and deploying capabilities that rely on the
      extension capability.  Protocols that fail to use a mechanism, or a
      protocol that only rarely uses a mechanism, could lead to that mechanism
      being unreliable.</t>
      <t indent="0" pn="section-3-3">Implementations that routinely see new values are more likely to
      correctly handle new values.  More frequent changes will improve the
      likelihood that incorrect handling or intolerance is discovered and
      rectified.  The longer an intolerant implementation is deployed, the
      more difficult it is to correct.</t>
      <t indent="0" pn="section-3-4">Protocols that routinely add new extensions and code points rarely
      have trouble adding additional ones especially when the handling of new
      versions or extensions are well defined.  The definition of mechanisms
      alone is insufficient; it is the assured implementation and active use
      of those mechanisms that determines their availability.</t>
      <t indent="0" pn="section-3-5">What constitutes "active use" can depend greatly on the environment
      in which a protocol is deployed.  The frequency of changes necessary to
      safeguard some mechanisms might be slow enough to attract ossification
      in another protocol deployment, while being excessive in others.</t>
      <section anchor="need-it" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-dependency-is-better">Dependency Is Better</name>
        <t indent="0" pn="section-3.1-1">The easiest way to guarantee that a protocol mechanism is used is
        to make the handling of it critical to an endpoint participating in
        that protocol.  This means that implementations must rely on both the
        existence of extension mechanisms and their continued, repeated
        expansion over time.</t>
        <t indent="0" pn="section-3.1-2">For example, the message format in SMTP relies on header fields for most of its
functions, including the most basic delivery functions.  A deployment of SMTP
cannot avoid including an implementation of header field handling.  In addition
to this, the regularity with which new header fields are defined and used
ensures that deployments frequently encounter header fields that they do not yet
(and may never) understand.  An SMTP implementation therefore needs to be able
to both process header fields that it understands and ignore those that it does
not.</t>
        <t indent="0" pn="section-3.1-3">In this way, implementing the extensibility mechanism is not merely mandated by
the specification, it is crucial to the functioning of a protocol deployment.
Should an implementation fail to correctly implement the mechanism, that failure
would quickly become apparent.</t>
        <t indent="0" pn="section-3.1-4">Caution is advised to avoid assuming that building a dependency on an extension
mechanism is sufficient to ensure availability of that mechanism in the long
term.  If the set of possible uses is narrowly constrained and deployments do
not change over time, implementations might not see new variations or assume a
narrower interpretation of what is possible.  Those implementations might still
exhibit errors when presented with new variations.</t>
      </section>
      <section anchor="version-negotiation" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-version-negotiation">Version Negotiation</name>
        <t indent="0" pn="section-3.2-1">As noted in <xref target="not-good-enough" format="default" sectionFormat="of" derivedContent="Section 2.1"/>,
        protocols that provide version-negotiation mechanisms might not be
        able to test that feature until a new version is deployed.  One
        relatively successful design approach has been to use the protocol
        selection mechanisms built into a lower-layer protocol to select the
        protocol.  This could allow a version-negotiation mechanism to benefit
        from active use of the extension point by other protocols.</t>
        <t indent="0" pn="section-3.2-2">For instance, all published versions of IP contain a version number
        as the four high bits of the first header byte.  However, version
        selection using this field proved to be unsuccessful. Ultimately,
        successful deployment of IPv6 over Ethernet <xref target="RFC2464" format="default" sectionFormat="of" derivedContent="RFC2464"/> required a different EtherType from IPv4.  This
        change took advantage of the already diverse usage of EtherType.</t>
        <t indent="0" pn="section-3.2-3">Other examples of this style of design include Application-Layer
        Protocol Negotiation (<xref target="RFC7301" format="default" sectionFormat="of" derivedContent="ALPN"/>) and
        HTTP content negotiation (<xref section="12" sectionFormat="of" target="I-D.ietf-httpbis-semantics" format="default" derivedLink="https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-semantics-19#section-12" derivedContent="HTTP"/>).</t>
        <t indent="0" pn="section-3.2-4">This technique relies on the code point being usable.  For instance,
        the IP protocol number is known to be unreliable and therefore not
        suitable <xref target="NEW-PROTOCOLS" format="default" sectionFormat="of" derivedContent="NEW-PROTOCOLS"/>.</t>
      </section>
      <section anchor="grease" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-falsifying-active-use">Falsifying Active Use</name>
        <t indent="0" pn="section-3.3-1">"Grease" was originally defined for TLS <xref target="RFC8701" format="default" sectionFormat="of" derivedContent="GREASE"/> but has been adopted by other protocols such as
	QUIC <xref target="RFC9000" format="default" sectionFormat="of" derivedContent="QUIC"/>.  Grease identifies
	lack of use as an issue (protocol mechanisms "rusting" shut) and
	proposes reserving values for extensions that have no semantic value
	attached.</t>
        <t indent="0" pn="section-3.3-2">The design in <xref target="RFC8701" format="default" sectionFormat="of" derivedContent="GREASE"/> is aimed at
        the style of negotiation most used in TLS, where one endpoint offers a
        set of options and the other chooses the one that it most prefers from
        those that it supports.  An endpoint that uses grease randomly offers
        options, usually just one, from a set of reserved values.  These
        values are guaranteed to never be assigned real meaning, so its peer
        will never have cause to genuinely select one of these values.</t>
        <t indent="0" pn="section-3.3-3">More generally, greasing is used to refer to any attempt to
        exercise extension points without changing endpoint behavior other
        than to encourage participants to tolerate new or varying values of
        protocol elements.</t>
        <t indent="0" pn="section-3.3-4">The principle that grease operates on is that an implementation
        that is regularly exposed to unknown values is less likely to be
        intolerant of new values when they appear.  This depends largely on
        the assumption that the difficulty of implementing the extension
        mechanism correctly is as easy or easier than implementing code to
        identify and filter out reserved values.  Reserving random or unevenly
        distributed values for this purpose is thought to further discourage
        special treatment.</t>
        <t indent="0" pn="section-3.3-5">Without reserved greasing code points, an implementation can use
        code points from spaces used for private or experimental use if such a
        range exists.  In addition to the risk of triggering participation in
        an unwanted experiment, this can be less effective.  Incorrect
        implementations might still be able to identify these code points and
        ignore them.</t>
        <t indent="0" pn="section-3.3-6">In addition to advertising bogus capabilities, an endpoint might
        also selectively disable noncritical protocol elements to test the
        ability of peers to handle the absence of certain capabilities.</t>
        <t indent="0" pn="section-3.3-7">This style of defensive design is limited because it is only
        superficial.  As greasing only mimics active use of an extension
        point, it only exercises a small part of the mechanisms that support
        extensibility.  More critically, it does not easily translate to all
        forms of extension points.  For instance, highest mutually supported
        version (HMSV) negotiation cannot be greased in this fashion.  Other
        techniques might be necessary for protocols that don't rely on the
        particular style of exchange that is predominant in TLS.</t>
        <t indent="0" pn="section-3.3-8">Grease is deployed with the intent of quickly revealing errors in implementing
the mechanisms it safeguards.  Though it has been effective at revealing
problems in some cases with TLS, the efficacy of greasing isn't proven more
generally.  Where implementations are able to tolerate a non-zero error rate in
their operation, greasing offers a potential option for safeguarding future
extensibility.  However, this relies on there being a sufficient proportion of
participants that are willing to invest the effort and tolerate the risk of
interoperability failures.</t>
      </section>
      <section anchor="ex-active" numbered="true" toc="include" removeInRFC="false" pn="section-3.4">
        <name slugifiedName="name-examples-of-active-use">Examples of Active Use</name>
        <t indent="0" pn="section-3.4-1">Header fields in email <xref target="RFC5321" format="default" sectionFormat="of" derivedContent="SMTP"/>,
        HTTP <xref target="I-D.ietf-httpbis-semantics" format="default" sectionFormat="of" derivedContent="HTTP"/>, and SIP <xref target="RFC3261" format="default" sectionFormat="of" derivedContent="SIP"/> all derive from the same basic
        design, which amounts to a list of name/value pairs.  There is no
        evidence of significant barriers to deploying header fields with new
        names and semantics in email and HTTP as clients and servers generally
        ignore headers they do not understand or need.  The widespread
        deployment of SIP back-to-back user agents (B2BUAs), which generally
        do not ignore unknown fields, means that new SIP header fields do not
        reliably reach peers.  This does not necessarily cause
        interoperability issues in SIP but rather causes features to remain
        unavailable until the B2BUA is updated.  All three protocols are still
        able to deploy new features reliably, but SIP features are deployed
        more slowly due to the larger number of active participants that need
        to support new features.</t>
        <t indent="0" pn="section-3.4-2">As another example, the attribute-value pairs (AVPs) in Diameter
<xref target="RFC6733" format="default" sectionFormat="of" derivedContent="DIAMETER"/> are fundamental to the design of the protocol.  Any use of
Diameter requires exercising the ability to add new AVPs.  This is routinely
done without fear that the new feature might not be successfully deployed.</t>
        <t indent="0" pn="section-3.4-3">These examples show extension points that are heavily used are also being
relatively unaffected by deployment issues preventing addition of new values
for new use cases.</t>
        <t indent="0" pn="section-3.4-4">These examples show that a good design is not required for success.  On the
contrary, success is often despite shortcomings in the design.  For instance,
the shortcomings of HTTP header fields are significant enough that there are
ongoing efforts to improve the syntax <xref target="RFC8941" format="default" sectionFormat="of" derivedContent="HTTP-HEADERS"/>.</t>
      </section>
      <section anchor="restoring-active-use" numbered="true" toc="include" removeInRFC="false" pn="section-3.5">
        <name slugifiedName="name-restoring-active-use">Restoring Active Use</name>
        <t indent="0" pn="section-3.5-1">With enough effort, active use can be used to restore capabilities.</t>
        <t indent="0" pn="section-3.5-2">Extension Mechanisms for DNS (<xref target="RFC6891" format="default" sectionFormat="of" derivedContent="EDNS"/>) was defined to provide extensibility in DNS.
        Intolerance of the extension in DNS servers resulted in a fallback
        method being widely deployed (see <xref section="6.2.2" sectionFormat="of" target="RFC6891" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6891#section-6.2.2" derivedContent="EDNS"/>).  This
        fallback resulted in EDNS being disabled for affected servers.  Over
        time, greater support for EDNS and increased reliance on it for
        different features motivated a flag day <xref target="DNSFLAGDAY" format="default" sectionFormat="of" derivedContent="DNSFLAGDAY"/> where the workaround was removed.</t>
        <t indent="0" pn="section-3.5-3">The EDNS example shows that effort can be used to restore capabilities.  This is
in part because EDNS was actively used with most resolvers and servers.  It was
therefore possible to force a change to ensure that extension capabilities would
always be available.  However, this required an enormous coordination effort.  A
small number of incompatible servers and the names they serve also became
inaccessible to most clients.</t>
      </section>
    </section>
    <section anchor="other" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-complementary-techniques">Complementary Techniques</name>
      <t indent="0" pn="section-4-1">The protections to protocol evolution that come from <xref target="use-it" format="default" sectionFormat="of" derivedContent="Section 3">active use</xref> can
be improved through the use of other defensive techniques. The techniques listed
here might not prevent ossification on their own, but they can make active use more
effective.</t>
      <section anchor="fewer-extension-points" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-fewer-extension-points">Fewer Extension Points</name>
        <t indent="0" pn="section-4.1-1">A successful protocol will include many potential types of
        extensions.  Designing multiple types of extension mechanisms, each
        suited to a specific purpose, might leave some extension points less
        heavily used than others.</t>
        <t indent="0" pn="section-4.1-2">Disuse of a specialized extension point might render it unusable.
        In contrast, having a smaller number of extension points with wide
        applicability could improve the use of those extension points.  Use of
        a shared extension point for any purpose can protect rarer or more
        specialized uses.</t>
        <t indent="0" pn="section-4.1-3">Both extensions and core protocol elements use the same extension
        points in protocols like HTTP <xref target="I-D.ietf-httpbis-semantics" format="default" sectionFormat="of" derivedContent="HTTP"/> and DIAMETER <xref target="RFC6733" format="default" sectionFormat="of" derivedContent="DIAMETER"/>; see <xref target="ex-active" format="default" sectionFormat="of" derivedContent="Section 3.4"/>.</t>
      </section>
      <section anchor="invariants" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-invariants">Invariants</name>
        <t indent="0" pn="section-4.2-1">Documenting aspects of the protocol that cannot or will not change as extensions
or new versions are added can be a useful exercise. <xref section="2.2" sectionFormat="of" target="RFC5704" format="default" derivedLink="https://rfc-editor.org/rfc/rfc5704#section-2.2" derivedContent="RFC5704"/>
defines invariants as:</t>
        <blockquote pn="section-4.2-2">
          <t indent="0" pn="section-4.2-2.1">
    Invariants are core properties that are consistent across the network and
    do not change over extremely long time-scales.
          </t>
        </blockquote>
        <t indent="0" pn="section-4.2-3">Understanding what aspects of a protocol are invariant can help guide the
process of identifying those parts of the protocol that might change.
<xref target="RFC8999" format="default" sectionFormat="of" derivedContent="QUIC-INVARIANTS"/> and <xref section="9.3" sectionFormat="of" target="RFC8446" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8446#section-9.3" derivedContent="TLS13"/> are both examples of
documented invariants.</t>
        <t indent="0" pn="section-4.2-4">As a means of protecting extensibility, a declaration of protocol
        invariants is useful only to the extent that protocol participants are
        willing to allow new uses for the protocol.  A protocol that declares
        protocol invariants relies on implementations understanding and
        respecting those invariants.  If active use is not possible for all
        non-invariant parts of the protocol, greasing (<xref target="grease" format="default" sectionFormat="of" derivedContent="Section 3.3"/>) might be used to improve the chance that
        invariants are respected.</t>
        <t indent="0" pn="section-4.2-5">Protocol invariants need to be clearly and concisely documented.
        Including examples of aspects of the protocol that are not invariant,
        such as <xref target="RFC8999" section="A" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8999#appendix-A" derivedContent="QUIC-INVARIANTS"/>, can be
        used to clarify intent.</t>
      </section>
      <section anchor="limiting-participation" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-limiting-participation">Limiting Participation</name>
        <t indent="0" pn="section-4.3-1">Reducing the number of entities that can participate in a protocol
        or limiting the extent of participation can reduce the number of
        entities that might affect extensibility.  Using TLS or other
        cryptographic tools can therefore reduce the number of entities that
        can influence whether new features are usable.</t>
        <t indent="0" pn="section-4.3-2"><xref target="RFC8558" format="default" sectionFormat="of" derivedContent="PATH-SIGNALS"/> also recommends the use
        of encryption and integrity protection to limit participation.  For
        example, encryption is used by the QUIC protocol <xref target="RFC9000" format="default" sectionFormat="of" derivedContent="QUIC"/> to limit the information that is
        available to middleboxes and integrity protection prevents
        modification.</t>
      </section>
      <section anchor="effective-feedback" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-effective-feedback">Effective Feedback</name>
        <t indent="0" pn="section-4.4-1">While not a direct means of protecting extensibility mechanisms,
        feedback systems can be important to discovering problems.</t>
        <t indent="0" pn="section-4.4-2">The visibility of errors is critical to the success of techniques like
        grease (see <xref target="grease" format="default" sectionFormat="of" derivedContent="Section 3.3"/>).  The grease
        design is most effective if a deployment has a means of detecting and
        reporting errors.  Ignoring errors could allow problems to become
        entrenched.</t>
        <t indent="0" pn="section-4.4-3">Feedback on errors is more important during the development and
        early deployment of a change.  It might also be helpful to disable
        automatic error recovery methods during development.</t>
        <t indent="0" pn="section-4.4-4">Automated feedback systems are important for automated systems, or
        where error recovery is also automated.  For instance, connection
        failures with HTTP alternative services <xref target="RFC7838" format="default" sectionFormat="of" derivedContent="ALT-SVC"/> are not permitted to affect the outcome of
        transactions.  An automated feedback system for capturing failures in
        alternative services is therefore necessary for failures to be
        detected.</t>
        <t indent="0" pn="section-4.4-5">How errors are gathered and reported will depend greatly on the
        nature of the protocol deployment and the entity that receives the
        report.  For instance, end users, developers, and network operations
        each have different requirements for how error reports are created,
        managed, and acted upon.</t>
        <t indent="0" pn="section-4.4-6">Automated delivery of error reports can be critical for rectifying
        deployment errors as early as possible, as seen in <xref target="RFC7489" format="default" sectionFormat="of" derivedContent="DMARC"/> and <xref target="RFC8460" format="default" sectionFormat="of" derivedContent="SMTP-TLS-REPORTING"/>.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-5-1">Many of the problems identified in this document are not the result
      of deliberate actions by an adversary but more the result of mistakes,
      decisions made without sufficient context, or simple neglect, i.e.,
      problems therefore not the result of opposition by an adversary.  In
      response, the recommended measures generally assume that other protocol
      participants will not take deliberate action to prevent protocol
      evolution.</t>
      <t indent="0" pn="section-5-2">The use of cryptographic techniques to exclude potential participants is the
only strong measure that the document recommends.  However, authorized protocol
peers are most often responsible for the identified problems, which can mean
that cryptography is insufficient to exclude them.</t>
      <t indent="0" pn="section-5-3">The ability to design, implement, and deploy new protocol mechanisms can be
critical to security.  In particular, it is important to be able to replace
cryptographic algorithms over time <xref target="RFC7696" format="default" sectionFormat="of" derivedContent="AGILITY"/>.  For example,
preparing for the replacement of weak hash algorithms was made more difficult
through misuse <xref target="HASH" format="default" sectionFormat="of" derivedContent="HASH"/>.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-httpbis-semantics" to="HTTP"/>
    <displayreference target="I-D.ietf-httpbis-messaging" to="HTTP11"/>
    <displayreference target="RFC5218" to="SUCCESS"/>
    <displayreference target="RFC8170" to="TRANSITIONS"/>
    <displayreference target="RFC6709" to="EXTENSIBILITY"/>
    <displayreference target="RFC7301" to="ALPN"/>
    <displayreference target="RFC8701" to="GREASE"/>
    <displayreference target="RFC9000" to="QUIC"/>
    <displayreference target="RFC5321" to="SMTP"/>
    <displayreference target="RFC3261" to="SIP"/>
    <displayreference target="RFC6733" to="DIAMETER"/>
    <displayreference target="RFC8941" to="HTTP-HEADERS"/>
    <displayreference target="RFC6891" to="EDNS"/>
    <displayreference target="RFC8999" to="QUIC-INVARIANTS"/>
    <displayreference target="RFC8558" to="PATH-SIGNALS"/>
    <displayreference target="RFC7838" to="ALT-SVC"/>
    <displayreference target="RFC7489" to="DMARC"/>
    <displayreference target="RFC8460" to="SMTP-TLS-REPORTING"/>
    <displayreference target="RFC7696" to="AGILITY"/>
    <displayreference target="RFC7208" to="SPF"/>
    <displayreference target="RFC3597" to="RRTYPE"/>
    <displayreference target="RFC2113" to="RAv4"/>
    <displayreference target="RFC2711" to="RAv6"/>
    <displayreference target="RFC1157" to="SNMPv1"/>
    <displayreference target="RFC0793" to="TCP"/>
    <displayreference target="RFC8684" to="MPTCP"/>
    <displayreference target="RFC7413" to="TFO"/>
    <displayreference target="RFC5246" to="TLS12"/>
    <displayreference target="RFC8446" to="TLS13"/>
    <displayreference target="RFC6066" to="TLS-EXT"/>
    <references pn="section-7">
      <name slugifiedName="name-informative-references">Informative References</name>
      <reference anchor="RFC7696" target="https://www.rfc-editor.org/info/rfc7696" quoteTitle="true" derivedAnchor="AGILITY">
        <front>
          <title>Guidelines for Cryptographic Algorithm Agility and Selecting Mandatory-to-Implement Algorithms</title>
          <author initials="R." surname="Housley" fullname="R. Housley">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2015" month="November"/>
          <abstract>
            <t indent="0">Many IETF protocols use cryptographic algorithms to provide confidentiality, integrity, authentication, or digital signature.  Communicating peers must support a common set of cryptographic algorithms for these mechanisms to work properly.  This memo provides guidelines to ensure that protocols have the ability to migrate from one mandatory-to-implement algorithm suite to another over time.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="201"/>
        <seriesInfo name="RFC" value="7696"/>
        <seriesInfo name="DOI" value="10.17487/RFC7696"/>
      </reference>
      <reference anchor="RFC7301" target="https://www.rfc-editor.org/info/rfc7301" quoteTitle="true" derivedAnchor="ALPN">
        <front>
          <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
          <author initials="S." surname="Friedl" fullname="S. Friedl">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Popov" fullname="A. Popov">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Langley" fullname="A. Langley">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="E." surname="Stephan" fullname="E. Stephan">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2014" month="July"/>
          <abstract>
            <t indent="0">This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7301"/>
        <seriesInfo name="DOI" value="10.17487/RFC7301"/>
      </reference>
      <reference anchor="RFC7838" target="https://www.rfc-editor.org/info/rfc7838" quoteTitle="true" derivedAnchor="ALT-SVC">
        <front>
          <title>HTTP Alternative Services</title>
          <author initials="M." surname="Nottingham" fullname="M. Nottingham">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="P." surname="McManus" fullname="P. McManus">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Reschke" fullname="J. Reschke">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2016" month="April"/>
          <abstract>
            <t indent="0">This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7838"/>
        <seriesInfo name="DOI" value="10.17487/RFC7838"/>
      </reference>
      <reference anchor="RFC6733" target="https://www.rfc-editor.org/info/rfc6733" quoteTitle="true" derivedAnchor="DIAMETER">
        <front>
          <title>Diameter Base Protocol</title>
          <author initials="V." surname="Fajardo" fullname="V. Fajardo" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Arkko" fullname="J. Arkko">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Loughney" fullname="J. Loughney">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="G." surname="Zorn" fullname="G. Zorn" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2012" month="October"/>
          <abstract>
            <t indent="0">The Diameter base protocol is intended to provide an Authentication, Authorization, and Accounting (AAA) framework for applications such as network access or IP mobility in both local and roaming situations.  This document specifies the message format, transport, error reporting, accounting, and security services used by all Diameter applications.  The Diameter base protocol as defined in this document obsoletes RFC 3588 and RFC 5719, and it must be supported by all new Diameter implementations.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6733"/>
        <seriesInfo name="DOI" value="10.17487/RFC6733"/>
      </reference>
      <reference anchor="RFC7489" target="https://www.rfc-editor.org/info/rfc7489" quoteTitle="true" derivedAnchor="DMARC">
        <front>
          <title>Domain-based Message Authentication, Reporting, and Conformance (DMARC)</title>
          <author initials="M." surname="Kucherawy" fullname="M. Kucherawy" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="E." surname="Zwicky" fullname="E. Zwicky" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2015" month="March"/>
          <abstract>
            <t indent="0">Domain-based Message Authentication, Reporting, and Conformance (DMARC) is a scalable mechanism by which a mail-originating organization can express domain-level policies and preferences for message validation, disposition, and reporting, that a mail-receiving organization can use to improve mail handling.</t>
            <t indent="0">Originators of Internet Mail need to be able to associate reliable and authenticated domain identifiers with messages, communicate policies about messages that use those identifiers, and report about mail using those identifiers.  These abilities have several benefits: Receivers can provide feedback to Domain Owners about the use of their domains; this feedback can provide valuable insight about the management of internal operations and the presence of external domain name abuse.</t>
            <t indent="0">DMARC does not produce or encourage elevated delivery privilege of authenticated email.  DMARC is a mechanism for policy distribution that enables increasingly strict handling of messages that fail authentication checks, ranging from no action, through altered delivery, up to message rejection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7489"/>
        <seriesInfo name="DOI" value="10.17487/RFC7489"/>
      </reference>
      <reference anchor="DNSFLAGDAY" target="https://dnsflagday.net/2019/" quoteTitle="true" derivedAnchor="DNSFLAGDAY">
        <front>
          <title>DNS Flag Day 2019</title>
          <author>
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2019" month="May"/>
        </front>
      </reference>
      <reference anchor="RFC6891" target="https://www.rfc-editor.org/info/rfc6891" quoteTitle="true" derivedAnchor="EDNS">
        <front>
          <title>Extension Mechanisms for DNS (EDNS(0))</title>
          <author initials="J." surname="Damas" fullname="J. Damas">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Graff" fullname="M. Graff">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="P." surname="Vixie" fullname="P. Vixie">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2013" month="April"/>
          <abstract>
            <t indent="0">The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow requestors to advertise their capabilities to responders.  This document describes backward-compatible mechanisms for allowing the protocol to grow.</t>
            <t indent="0">This document updates the Extension Mechanisms for DNS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deployment experience in several implementations.  It also obsoletes RFC 2673 ("Binary Labels in the Domain Name System") and adds considerations on the use of extended labels in the DNS.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="75"/>
        <seriesInfo name="RFC" value="6891"/>
        <seriesInfo name="DOI" value="10.17487/RFC6891"/>
      </reference>
      <reference anchor="EXT-TCP" quoteTitle="true" target="https://doi.org/10.1145/2068816.2068834" derivedAnchor="EXT-TCP">
        <front>
          <title>Is it still possible to extend TCP?</title>
          <author fullname="Michio Honda" initials="M." surname="Honda">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Yoshifumi Nishida" initials="Y." surname="Nishida">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Costin Raiciu" initials="C." surname="Raiciu">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Adam Greenhalgh" initials="A." surname="Greenhalgh">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Mark Handley" initials="M." surname="Handley">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Hideyuki Tokuda" initials="H." surname="Tokuda">
            <organization showOnFrontPage="true"/>
          </author>
          <date month="November" year="2011"/>
        </front>
        <refcontent>IMC '11: Proceedings of the 2011 ACM SIGCOMM conference on Internet measurement conference</refcontent>
        <seriesInfo name="DOI" value="10.1145/2068816.2068834"/>
      </reference>
      <reference anchor="RFC6709" target="https://www.rfc-editor.org/info/rfc6709" quoteTitle="true" derivedAnchor="EXTENSIBILITY">
        <front>
          <title>Design Considerations for Protocol Extensions</title>
          <author initials="B." surname="Carpenter" fullname="B. Carpenter">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="B." surname="Aboba" fullname="B. Aboba" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="S." surname="Cheshire" fullname="S. Cheshire">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2012" month="September"/>
          <abstract>
            <t indent="0">This document discusses architectural issues related to the extensibility of Internet protocols, with a focus on design considerations.  It is intended to assist designers of both base protocols and extensions.  Case studies are included.  A companion document, RFC 4775 (BCP 125), discusses procedures relating to the extensibility of IETF protocols.  This document is not an  Internet Standards Track specification; it is published for informational  purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6709"/>
        <seriesInfo name="DOI" value="10.17487/RFC6709"/>
      </reference>
      <reference anchor="RFC8701" target="https://www.rfc-editor.org/info/rfc8701" quoteTitle="true" derivedAnchor="GREASE">
        <front>
          <title>Applying Generate Random Extensions And Sustain Extensibility (GREASE) to TLS Extensibility</title>
          <author initials="D." surname="Benjamin" fullname="D. Benjamin">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2020" month="January"/>
          <abstract>
            <t indent="0">This document describes GREASE (Generate Random Extensions And Sustain Extensibility), a mechanism to prevent extensibility failures in the TLS ecosystem. It reserves a set of TLS protocol values that may be advertised to ensure peers correctly handle unknown values.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8701"/>
        <seriesInfo name="DOI" value="10.17487/RFC8701"/>
      </reference>
      <reference anchor="HASH" target="https://www.cs.columbia.edu/~smb/papers/new-hash.pdf" quoteTitle="true" derivedAnchor="HASH">
        <front>
          <title>Deploying a New Hash Algorithm</title>
          <author initials="S." surname="Bellovin" fullname="Steven M. Bellovin">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="E." surname="Rescorla" fullname="Eric M. Rescorla">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2006"/>
        </front>
        <refcontent>Proceedings of NDSS</refcontent>
      </reference>
      <reference anchor="I-D.ietf-httpbis-semantics" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-semantics-19" derivedAnchor="HTTP">
        <front>
          <title>HTTP Semantics</title>
          <author initials="R" surname="Fielding" fullname="Roy Fielding" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M" surname="Nottingham" fullname="Mark Nottingham" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J" surname="Reschke" fullname="Julian Reschke" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2021" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        <refcontent>Work in Progress</refcontent>
      </reference>
      <reference anchor="RFC8941" target="https://www.rfc-editor.org/info/rfc8941" quoteTitle="true" derivedAnchor="HTTP-HEADERS">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author initials="M." surname="Nottingham" fullname="M. Nottingham">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="P-H." surname="Kamp" fullname="P-H. Kamp">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2021" month="February"/>
          <abstract>
            <t indent="0">This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8941"/>
        <seriesInfo name="DOI" value="10.17487/RFC8941"/>
      </reference>
      <reference anchor="I-D.ietf-httpbis-messaging" quoteTitle="true" target="https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-messaging-19" derivedAnchor="HTTP11">
        <front>
          <title>HTTP/1.1</title>
          <author initials="R" surname="Fielding" fullname="Roy Fielding" role="editor"/>
          <author initials="M" surname="Nottingham" fullname="Mark Nottingham" role="editor"/>
          <author initials="J" surname="Reschke" fullname="Julian Reschke" role="editor"/>
          <date year="2021" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-messaging-19"/>
        <refcontent>Work in Progress</refcontent>
      </reference>
      <reference anchor="INTOLERANCE" target="https://mailarchive.ietf.org/arch/msg/tls/bOJ2JQc3HjAHFFWCiNTIb0JuMZc" quoteTitle="true" derivedAnchor="INTOLERANCE">
        <front>
          <title>Re: [TLS] Thoughts on Version Intolerance</title>
          <author initials="H." surname="Kario" fullname="Hubert Kario">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2016" month="July"/>
        </front>
      </reference>
      <reference anchor="RFC8684" target="https://www.rfc-editor.org/info/rfc8684" quoteTitle="true" derivedAnchor="MPTCP">
        <front>
          <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
          <author initials="A." surname="Ford" fullname="A. Ford">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="C." surname="Raiciu" fullname="C. Raiciu">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Handley" fullname="M. Handley">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="O." surname="Bonaventure" fullname="O. Bonaventure">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="C." surname="Paasch" fullname="C. Paasch">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2020" month="March"/>
          <abstract>
            <t indent="0">TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers. The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and thus improve user experience through higher throughput and improved resilience to network failure.</t>
            <t indent="0">Multipath TCP provides the ability to simultaneously use multiple paths between peers. This document presents a set of extensions to traditional TCP to support multipath operation. The protocol offers the same type of service to applications as TCP (i.e., a reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.</t>
            <t indent="0">This document specifies v1 of Multipath TCP, obsoleting v0 as specified in RFC 6824, through clarifications and modifications primarily driven by deployment experience.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8684"/>
        <seriesInfo name="DOI" value="10.17487/RFC8684"/>
      </reference>
      <reference anchor="MPTCP-HOW-HARD" target="https://www.usenix.org/conference/nsdi12/technical-sessions/presentation/raiciu" quoteTitle="true" derivedAnchor="MPTCP-HOW-HARD">
        <front>
          <title>How Hard Can It Be? Designing and Implementing a Deployable Multipath TCP</title>
          <author initials="C." surname="Raiciu" fullname="Costin Raiciu">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="C." surname="Paasch" fullname="Christoph Paasch">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="S." surname="Barre" fullname="Sebastien Barre">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Ford" fullname="Alan Ford">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Honda" fullname="Michio Honda">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="F." surname="Duchene" fullname="Fabien Duchene">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="O." surname="Bonaventure" fullname="Olivier Bonaventure">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Handley" fullname="Mark Handley">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2012" month="April"/>
        </front>
      </reference>
      <reference anchor="NEW-PROTOCOLS" quoteTitle="true" target="https://doi.org/10.1016/j.comnet.2020.107211" derivedAnchor="NEW-PROTOCOLS">
        <front>
          <title>On the usability of transport protocols other than TCP: A home gateway and internet path traversal study</title>
          <author fullname="Runa Barik" initials="R." surname="Barik">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Michael Welzl" initials="M." surname="Welzl">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Gorry Fairhurst" initials="G." surname="Fairhurst">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Ahmed Elmokashfi" initials="A." surname="Elmokashfi">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Thomas Dreibholz" initials="T." surname="Dreibholz">
            <organization showOnFrontPage="true"/>
          </author>
          <author fullname="Stein Gjessing" initials="S." surname="Gjessing">
            <organization showOnFrontPage="true"/>
          </author>
          <date month="May" year="2020"/>
        </front>
        <refcontent>Computer Networks, Vol. 173, pp. 107211</refcontent>
        <seriesInfo name="DOI" value="10.1016/j.comnet.2020.107211"/>
      </reference>
      <reference anchor="RFC8558" target="https://www.rfc-editor.org/info/rfc8558" quoteTitle="true" derivedAnchor="PATH-SIGNALS">
        <front>
          <title>Transport Protocol Path Signals</title>
          <author initials="T." surname="Hardie" fullname="T. Hardie" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2019" month="April"/>
          <abstract>
            <t indent="0">This document discusses the nature of signals seen by on-path elements examining transport protocols, contrasting implicit and explicit signals.  For example, TCP's state machine uses a series of well-known messages that are exchanged in the clear.  Because these are visible to network elements on the path between the two nodes setting up the transport connection, they are often used as signals by those network elements.  In transports that do not exchange these messages in the clear, on-path network elements lack those signals. Often, the removal of those signals is intended by those moving the messages to confidential channels.  Where the endpoints desire that network elements along the path receive these signals, this document recommends explicit signals be used.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8558"/>
        <seriesInfo name="DOI" value="10.17487/RFC8558"/>
      </reference>
      <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9000" quoteTitle="true" derivedAnchor="QUIC">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author initials="J." surname="Iyengar" fullname="J. Iyengar" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2021" month="May"/>
          <abstract>
            <t indent="0">This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC8999" target="https://www.rfc-editor.org/info/rfc8999" quoteTitle="true" derivedAnchor="QUIC-INVARIANTS">
        <front>
          <title>Version-Independent Properties of QUIC</title>
          <author initials="M." surname="Thomson" fullname="M. Thomson">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2021" month="May"/>
          <abstract>
            <t indent="0">This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8999"/>
        <seriesInfo name="DOI" value="10.17487/RFC8999"/>
      </reference>
      <reference anchor="RFC2113" target="https://www.rfc-editor.org/info/rfc2113" quoteTitle="true" derivedAnchor="RAv4">
        <front>
          <title>IP Router Alert Option</title>
          <author initials="D." surname="Katz" fullname="D. Katz">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1997" month="February"/>
          <abstract>
            <t indent="0">This memo describes a new IP Option type that alerts transit routers to more closely examine the contents of an IP packet.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2113"/>
        <seriesInfo name="DOI" value="10.17487/RFC2113"/>
      </reference>
      <reference anchor="RFC2711" target="https://www.rfc-editor.org/info/rfc2711" quoteTitle="true" derivedAnchor="RAv6">
        <front>
          <title>IPv6 Router Alert Option</title>
          <author initials="C." surname="Partridge" fullname="C. Partridge">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Jackson" fullname="A. Jackson">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1999" month="October"/>
          <abstract>
            <t indent="0">This memo describes a new IPv6 Hop-by-Hop Option type that alerts transit routers to more closely examine the contents of an IP datagram. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2711"/>
        <seriesInfo name="DOI" value="10.17487/RFC2711"/>
      </reference>
      <reference anchor="RFC0791" target="https://www.rfc-editor.org/info/rfc791" quoteTitle="true" derivedAnchor="RFC0791">
        <front>
          <title>Internet Protocol</title>
          <author initials="J." surname="Postel" fullname="J. Postel">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1981" month="September"/>
        </front>
        <seriesInfo name="STD" value="5"/>
        <seriesInfo name="RFC" value="791"/>
        <seriesInfo name="DOI" value="10.17487/RFC0791"/>
      </reference>
      <reference anchor="RFC1112" target="https://www.rfc-editor.org/info/rfc1112" quoteTitle="true" derivedAnchor="RFC1112">
        <front>
          <title>Host extensions for IP multicasting</title>
          <author initials="S.E." surname="Deering" fullname="S.E. Deering">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1989" month="August"/>
          <abstract>
            <t indent="0">This memo specifies the extensions required of a host implementation of the Internet Protocol (IP) to support multicasting.  Recommended procedure for IP multicasting in the Internet.  This RFC obsoletes RFCs 998 and 1054.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="5"/>
        <seriesInfo name="RFC" value="1112"/>
        <seriesInfo name="DOI" value="10.17487/RFC1112"/>
      </reference>
      <reference anchor="RFC2464" target="https://www.rfc-editor.org/info/rfc2464" quoteTitle="true" derivedAnchor="RFC2464">
        <front>
          <title>Transmission of IPv6 Packets over Ethernet Networks</title>
          <author initials="M." surname="Crawford" fullname="M. Crawford">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1998" month="December"/>
          <abstract>
            <t indent="0">This document specifies the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on Ethernet networks.  It also specifies the content of the Source/Target Link-layer Address option used in Router Solicitation, Router Advertisement, Neighbor Solicitation, Neighbor Advertisement and Redirect messages when those messages are transmitted on an Ethernet.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2464"/>
        <seriesInfo name="DOI" value="10.17487/RFC2464"/>
      </reference>
      <reference anchor="RFC5704" target="https://www.rfc-editor.org/info/rfc5704" quoteTitle="true" derivedAnchor="RFC5704">
        <front>
          <title>Uncoordinated Protocol Development Considered Harmful</title>
          <author initials="S." surname="Bryant" fullname="S. Bryant" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Morrow" fullname="M. Morrow" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author>
            <organization showOnFrontPage="true">IAB</organization>
          </author>
          <date year="2009" month="November"/>
          <abstract>
            <t indent="0">This document identifies problems that may result from the absence of formal coordination and joint development on protocols of mutual interest between standards development organizations (SDOs).  Some of these problems may cause significant harm to the Internet.  The document suggests that a robust procedure is required prevent this from occurring in the future.  The IAB has selected a number of case studies, such as Transport MPLS (T-MPLS), as recent examples to describe the hazard to the Internet architecture that results from uncoordinated adaptation of a protocol.</t>
            <t indent="0">This experience has resulted in a considerable improvement in the relationship between the IETF and the ITU-T.  In particular, this was achieved via the establishment of the "Joint working team on MPLS-TP".  In addition, the leadership of the two organizations agreed to improve inter-organizational working practices so as to avoid conflict in the future between ITU-T Recommendations and IETF RFCs.</t>
            <t indent="0">Whilst we use ITU-T - IETF interactions in these case studies, the scope of the document extends to all SDOs that have an overlapping protocol interest with the IETF.  This memo provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5704"/>
        <seriesInfo name="DOI" value="10.17487/RFC5704"/>
      </reference>
      <reference anchor="RFC3597" target="https://www.rfc-editor.org/info/rfc3597" quoteTitle="true" derivedAnchor="RRTYPE">
        <front>
          <title>Handling of Unknown DNS Resource Record (RR) Types</title>
          <author initials="A." surname="Gustafsson" fullname="A. Gustafsson">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2003" month="September"/>
          <abstract>
            <t indent="0">Extending the Domain Name System (DNS) with new Resource Record (RR) types currently requires changes to name server software.  This document specifies the changes necessary to allow future DNS implementations to handle new RR types transparently.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3597"/>
        <seriesInfo name="DOI" value="10.17487/RFC3597"/>
      </reference>
      <reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3261" quoteTitle="true" derivedAnchor="SIP">
        <front>
          <title>SIP: Session Initiation Protocol</title>
          <author initials="J." surname="Rosenberg" fullname="J. Rosenberg">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="G." surname="Camarillo" fullname="G. Camarillo">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Johnston" fullname="A. Johnston">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Peterson" fullname="J. Peterson">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R." surname="Sparks" fullname="R. Sparks">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Handley" fullname="M. Handley">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="E." surname="Schooler" fullname="E. Schooler">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2002" month="June"/>
          <abstract>
            <t indent="0">This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants.  These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3261"/>
        <seriesInfo name="DOI" value="10.17487/RFC3261"/>
      </reference>
      <reference anchor="RFC5321" target="https://www.rfc-editor.org/info/rfc5321" quoteTitle="true" derivedAnchor="SMTP">
        <front>
          <title>Simple Mail Transfer Protocol</title>
          <author initials="J." surname="Klensin" fullname="J. Klensin">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2008" month="October"/>
          <abstract>
            <t indent="0">This document is a specification of the basic protocol for Internet electronic mail transport.  It consolidates, updates, and clarifies several previous documents, making all or parts of most of them obsolete.  It covers the SMTP extension mechanisms and best practices for the contemporary Internet, but does not provide details about particular extensions.  Although SMTP was designed as a mail transport and delivery protocol, this specification also contains information that is important to its use as a "mail submission" protocol for "split-UA" (User Agent) mail reading systems and mobile environments.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5321"/>
        <seriesInfo name="DOI" value="10.17487/RFC5321"/>
      </reference>
      <reference anchor="RFC8460" target="https://www.rfc-editor.org/info/rfc8460" quoteTitle="true" derivedAnchor="SMTP-TLS-REPORTING">
        <front>
          <title>SMTP TLS Reporting</title>
          <author initials="D." surname="Margolis" fullname="D. Margolis">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Brotman" fullname="A. Brotman">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="B." surname="Ramakrishnan" fullname="B. Ramakrishnan">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Jones" fullname="J. Jones">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Risher" fullname="M. Risher">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2018" month="September"/>
          <abstract>
            <t indent="0">A number of protocols exist for establishing encrypted channels between SMTP Mail Transfer Agents (MTAs), including STARTTLS, DNS- Based Authentication of Named Entities (DANE) TLSA, and MTA Strict Transport Security (MTA-STS).  These protocols can fail due to misconfiguration or active attack, leading to undelivered messages or delivery over unencrypted or unauthenticated channels.  This document describes a reporting mechanism and format by which sending systems can share statistics and specific information about potential failures with recipient domains.  Recipient domains can then use this information to both detect potential attacks and diagnose unintentional misconfigurations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8460"/>
        <seriesInfo name="DOI" value="10.17487/RFC8460"/>
      </reference>
      <reference anchor="SNI" target="https://mailarchive.ietf.org/arch/msg/tls/1t79gzNItZd71DwwoaqcQQ_4Yxc" quoteTitle="true" derivedAnchor="SNI">
        <front>
          <title>[TLS] Accepting that other SNI name types will never work.</title>
          <author initials="A." surname="Langley" fullname="Adam Langley">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2016" month="March"/>
        </front>
      </reference>
      <reference anchor="RFC1157" target="https://www.rfc-editor.org/info/rfc1157" quoteTitle="true" derivedAnchor="SNMPv1">
        <front>
          <title>Simple Network Management Protocol (SNMP)</title>
          <author initials="J.D." surname="Case" fullname="J.D. Case">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M." surname="Fedor" fullname="M. Fedor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="M.L." surname="Schoffstall" fullname="M.L. Schoffstall">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Davin" fullname="J. Davin">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1990" month="May"/>
          <abstract>
            <t indent="0">This RFC is a re-release of RFC 1098, with a changed "Status of this Memo" section plus a few minor typographical corrections.  This memo defines a simple protocol by which management information for a network element may be inspected or altered by logically remote users. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="1157"/>
        <seriesInfo name="DOI" value="10.17487/RFC1157"/>
      </reference>
      <reference anchor="RFC7208" target="https://www.rfc-editor.org/info/rfc7208" quoteTitle="true" derivedAnchor="SPF">
        <front>
          <title>Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1</title>
          <author initials="S." surname="Kitterman" fullname="S. Kitterman">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2014" month="April"/>
          <abstract>
            <t indent="0">Email on the Internet can be forged in a number of ways.  In particular, existing protocols place no restriction on what a sending host can use as the "MAIL FROM" of a message or the domain given on the SMTP HELO/EHLO commands.  This document describes version 1 of the Sender Policy Framework (SPF) protocol, whereby ADministrative Management Domains (ADMDs) can explicitly authorize the hosts that are allowed to use their domain names, and a receiving host can check such authorization.</t>
            <t indent="0">This document obsoletes RFC 4408.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7208"/>
        <seriesInfo name="DOI" value="10.17487/RFC7208"/>
      </reference>
      <reference anchor="RFC5218" target="https://www.rfc-editor.org/info/rfc5218" quoteTitle="true" derivedAnchor="SUCCESS">
        <front>
          <title>What Makes for a Successful Protocol?</title>
          <author initials="D." surname="Thaler" fullname="D. Thaler">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="B." surname="Aboba" fullname="B. Aboba">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2008" month="July"/>
          <abstract>
            <t indent="0">The Internet community has specified a large number of protocols to date, and these protocols have achieved varying degrees of success. Based on case studies, this document attempts to ascertain factors that contribute to or hinder a protocol's success.  It is hoped that these observations can serve as guidance for future protocol work.  This memo  provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5218"/>
        <seriesInfo name="DOI" value="10.17487/RFC5218"/>
      </reference>
      <reference anchor="RFC0793" target="https://www.rfc-editor.org/info/rfc793" quoteTitle="true" derivedAnchor="TCP">
        <front>
          <title>Transmission Control Protocol</title>
          <author initials="J." surname="Postel" fullname="J. Postel">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1981" month="September"/>
        </front>
        <seriesInfo name="STD" value="7"/>
        <seriesInfo name="RFC" value="793"/>
        <seriesInfo name="DOI" value="10.17487/RFC0793"/>
      </reference>
      <reference anchor="RFC7413" target="https://www.rfc-editor.org/info/rfc7413" quoteTitle="true" derivedAnchor="TFO">
        <front>
          <title>TCP Fast Open</title>
          <author initials="Y." surname="Cheng" fullname="Y. Cheng">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Chu" fullname="J. Chu">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="S." surname="Radhakrishnan" fullname="S. Radhakrishnan">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="A." surname="Jain" fullname="A. Jain">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2014" month="December"/>
          <abstract>
            <t indent="0">This document describes an experimental TCP mechanism called TCP Fast Open (TFO).  TFO allows data to be carried in the SYN and SYN-ACK packets and consumed by the receiving end during the initial connection handshake, and saves up to one full round-trip time (RTT) compared to the standard TCP, which requires a three-way handshake (3WHS) to complete before data can be exchanged.  However, TFO deviates from the standard TCP semantics, since the data in the SYN could be replayed to an application in some rare circumstances.  Applications should not use TFO unless they can tolerate this issue, as detailed in the Applicability section.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7413"/>
        <seriesInfo name="DOI" value="10.17487/RFC7413"/>
      </reference>
      <reference anchor="RFC6066" target="https://www.rfc-editor.org/info/rfc6066" quoteTitle="true" derivedAnchor="TLS-EXT">
        <front>
          <title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
          <author initials="D." surname="Eastlake 3rd" fullname="D. Eastlake 3rd">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2011" month="January"/>
          <abstract>
            <t indent="0">This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, "The Transport Layer Security (TLS) Protocol Version 1.2".  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6066"/>
        <seriesInfo name="DOI" value="10.17487/RFC6066"/>
      </reference>
      <reference anchor="RFC5246" target="https://www.rfc-editor.org/info/rfc5246" quoteTitle="true" derivedAnchor="TLS12">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
          <author initials="T." surname="Dierks" fullname="T. Dierks">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="E." surname="Rescorla" fullname="E. Rescorla">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2008" month="August"/>
          <abstract>
            <t indent="0">This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5246"/>
        <seriesInfo name="DOI" value="10.17487/RFC5246"/>
      </reference>
      <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="TLS13">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author initials="E." surname="Rescorla" fullname="E. Rescorla">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2018" month="August"/>
          <abstract>
            <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC8170" target="https://www.rfc-editor.org/info/rfc8170" quoteTitle="true" derivedAnchor="TRANSITIONS">
        <front>
          <title>Planning for Protocol Adoption and Subsequent Transitions</title>
          <author initials="D." surname="Thaler" fullname="D. Thaler" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2017" month="May"/>
          <abstract>
            <t indent="0">Over the many years since the introduction of the Internet Protocol, we have seen a number of transitions throughout the protocol stack, such as deploying a new protocol, or updating or replacing an existing protocol.  Many protocols and technologies were not designed to enable smooth transition to alternatives or to easily deploy extensions; thus, some transitions, such as the introduction of IPv6, have been difficult.  This document attempts to summarize some basic principles to enable future transitions, and it also summarizes what makes for a good transition plan.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8170"/>
        <seriesInfo name="DOI" value="10.17487/RFC8170"/>
      </reference>
    </references>
    <section anchor="examples" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-examples">Examples</name>
      <t indent="0" pn="section-appendix.a-1">This appendix contains a brief study of problems in a range of
      Internet protocols at different layers of the stack.</t>
      <section anchor="dns" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.1">
        <name slugifiedName="name-dns">DNS</name>
        <t indent="0" pn="section-appendix.a.1-1">Ossified DNS code bases and systems resulted in new Resource Record
        Codes (RRCodes) being unusable. A new code point would take years of
        coordination between implementations and deployments before it could
        be relied upon.

	Consequently, use of the TXT record was overloaded in order to avoid
	the effort and delays involved in allocating new code points; this
	approach was used in the Sender Policy Framework <xref target="RFC7208" format="default" sectionFormat="of" derivedContent="SPF"/> and other protocols.
        
        </t>
        <t indent="0" pn="section-appendix.a.1-2">It was not until after the standard mechanism for dealing with new
        RRCodes <xref target="RFC3597" format="default" sectionFormat="of" derivedContent="RRTYPE"/> was considered
        widely deployed that new RRCodes could be safely created and used.</t>
      </section>
      <section anchor="HTTP" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.2">
        <name slugifiedName="name-http">HTTP</name>
        <t indent="0" pn="section-appendix.a.2-1">HTTP has a number of very effective extension points in addition to
        the aforementioned header fields.  It also has some examples of
        extension points that are so rarely used that it is possible that they
        are not at all usable.</t>
        <t indent="0" pn="section-appendix.a.2-2">Extension points in HTTP that might be unwise to use include the
        extension point on each chunk in the chunked transfer coding (<xref section="7.1" sectionFormat="of" target="I-D.ietf-httpbis-messaging" format="default" derivedLink="https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-messaging-19#section-7.1" derivedContent="HTTP11"/>),
        the ability to use transfer codings other than the chunked coding, and
        the range unit in a range request (<xref section="14" sectionFormat="of" target="I-D.ietf-httpbis-semantics" format="default" derivedLink="https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-semantics-19#section-14" derivedContent="HTTP"/>).</t>
      </section>
      <section anchor="ip" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.3">
        <name slugifiedName="name-ip">IP</name>
        <t indent="0" pn="section-appendix.a.3-1">The version field in IP was rendered useless when encapsulated over
        Ethernet, requiring a new EtherType with IPv6 <xref target="RFC2464" format="default" sectionFormat="of" derivedContent="RFC2464"/>, due in part to Layer 2 devices making
        version-independent assumptions about the structure of the IPv4
        header.</t>
        <t indent="0" pn="section-appendix.a.3-2">Protocol identifiers or code points that are reserved for future use
        can be especially problematic.  Reserving values without attributing
        semantics to their use can result in diverse or conflicting semantics
        being attributed without any hope of interoperability.

	An example of this is the 224/3 address space in IPv4 that <xref target="RFC0791" format="default" sectionFormat="of" derivedContent="RFC0791"/> reserved without assigning any semantics. <xref target="RFC1112" format="default" sectionFormat="of" derivedContent="RFC1112"/> partially reclaimed that reserved address space for
	use in multicast (224/4), but the remaining address space (240/4) has
	not been successfully reclaimed for any purpose.

        </t>
        <t indent="0" pn="section-appendix.a.3-3">For protocols that can use negotiation to attribute semantics to
        values, it is possible that unused code points can be reclaimed for
        active use, though this requires that the negotiation include all
        protocol participants.  For something as fundamental as addressing,
        negotiation is difficult or even impossible, as all nodes on the
        network path plus potential alternative paths would need to be
        involved.</t>
        <t indent="0" pn="section-appendix.a.3-4">IP Router Alerts <xref target="RFC2113" format="default" sectionFormat="of" derivedContent="RAv4"/><xref target="RFC2711" format="default" sectionFormat="of" derivedContent="RAv6"/> use IP options or extension
        headers to indicate that data is intended for consumption by the next-hop 
        router rather than the addressed destination.  In part, the
        deployment of router alerts was unsuccessful due to the realities of
        processing IP packets at line rates, combined with bad assumptions in
        the protocol design about these performance constraints.  However,
        this was not exclusively down to design problems or bugs, as the
        capability was also deliberately blocked at some routers.</t>
      </section>
      <section anchor="snmp" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.4">
        <name slugifiedName="name-snmp">SNMP</name>
        <t indent="0" pn="section-appendix.a.4-1">As a counter example, the first version of the Simple Network Management
Protocol (SNMP) <xref target="RFC1157" format="default" sectionFormat="of" derivedContent="SNMPv1"/> states that unparseable or unauthenticated
messages are simply discarded without response:</t>
        <blockquote pn="section-appendix.a.4-2">
          <t indent="0" pn="section-appendix.a.4-2.1">It then verifies the version number of the SNMP message. If
            there is a mismatch, it discards the datagram and performs no
            further actions.</t>
        </blockquote>
        <t indent="0" pn="section-appendix.a.4-3">When SNMP versions 2, 2c, and 3 came along, older agents did exactly
        what the protocol specifies.  Deployment of new versions was likely
        successful because the handling of newer versions was both clear and
        simple.</t>
      </section>
      <section anchor="tcp" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.5">
        <name slugifiedName="name-tcp">TCP</name>
        <t indent="0" pn="section-appendix.a.5-1">Extension points in TCP <xref target="RFC0793" format="default" sectionFormat="of" derivedContent="TCP"/>
        have been rendered difficult to use largely due to middlebox
        interactions; see <xref target="EXT-TCP" format="default" sectionFormat="of" derivedContent="EXT-TCP"/>.</t>
        <t indent="0" pn="section-appendix.a.5-2">
For instance, multipath TCP (<xref target="RFC8684" format="default" sectionFormat="of" derivedContent="MPTCP"/>) can
only be deployed opportunistically; see <xref target="MPTCP-HOW-HARD" format="default" sectionFormat="of" derivedContent="MPTCP-HOW-HARD"/>. Since MPTCP is a protocol enhancement that doesn't impair
the connection if it is blocked, network path intolerance of the extension
only results in the multipath functionality becoming unavailable.


</t>
        <t indent="0" pn="section-appendix.a.5-3">In comparison, the deployment of TCP Fast Open (<xref target="RFC7413" format="default" sectionFormat="of" derivedContent="TFO"/>) critically depends on extension
        capability being widely available.  Though very few network paths were
        intolerant of the extension in absolute terms, TCP Fast Open could not
        be deployed as a result.</t>
      </section>
      <section anchor="tls" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.6">
        <name slugifiedName="name-tls">TLS</name>
        <t indent="0" pn="section-appendix.a.6-1">Transport Layer Security (TLS) <xref target="RFC5246" format="default" sectionFormat="of" derivedContent="TLS12"/> provides examples of where a
design that is objectively sound fails when incorrectly implemented.  TLS
provides examples of failures in protocol version negotiation and extensibility.</t>
        <t indent="0" pn="section-appendix.a.6-2">Version negotiation in TLS 1.2 and earlier uses the "Highest mutually supported
version (HMSV)" scheme exactly as it is described in <xref target="RFC6709" format="default" sectionFormat="of" derivedContent="EXTENSIBILITY"/>.
However, clients are unable to advertise a new version without causing a
non-trivial proportion of sessions to fail due to bugs in server and middlebox
implementations.</t>
        <t indent="0" pn="section-appendix.a.6-3">Intolerance to new TLS versions is so severe <xref target="INTOLERANCE" format="default" sectionFormat="of" derivedContent="INTOLERANCE"/> that TLS 1.3
<xref target="RFC8446" format="default" sectionFormat="of" derivedContent="TLS13"/> abandoned HMSV version negotiation for a new mechanism.</t>
        <t indent="0" pn="section-appendix.a.6-4">The server name indication (SNI) <xref target="RFC6066" format="default" sectionFormat="of" derivedContent="TLS-EXT"/> in TLS is another
excellent example of the failure of a well-designed extensibility point.  SNI
uses the same technique for extensions that is used successfully in other parts
of the TLS protocol.  The original design of SNI anticipated the ability to
include multiple names of different types.</t>
        <t indent="0" pn="section-appendix.a.6-5">SNI was originally defined with just one type of name: a domain name.  No other
type has ever been standardized, though several have been proposed.  Despite an
otherwise exemplary design, SNI is so inconsistently implemented that any hope
for using the extension point it defines has been abandoned <xref target="SNI" format="default" sectionFormat="of" derivedContent="SNI"/>.</t>
      </section>
    </section>
    <section numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-iab-members-at-the-time-of-">IAB Members at the Time of Approval
      </name>
      <t indent="0" pn="section-appendix.b-1">
	Internet Architecture Board members at the time this document was
	approved for publication were:
      </t>
      <ul empty="true" spacing="compact" bare="false" indent="3" pn="section-appendix.b-2">
        <li pn="section-appendix.b-2.1">
          <t indent="0" pn="section-appendix.b-2.1.1"><contact fullname="Jari Arkko"/></t>
        </li>
        <li pn="section-appendix.b-2.2">
          <t indent="0" pn="section-appendix.b-2.2.1"><contact fullname="Deborah Brungard"/></t>
        </li>
        <li pn="section-appendix.b-2.3">
          <t indent="0" pn="section-appendix.b-2.3.1"><contact fullname="Ben Campbell"/></t>
        </li>
        <li pn="section-appendix.b-2.4">
          <t indent="0" pn="section-appendix.b-2.4.1"><contact fullname="Lars Eggert"/></t>
        </li>
        <li pn="section-appendix.b-2.5">
          <t indent="0" pn="section-appendix.b-2.5.1"><contact fullname="Wes Hardaker"/></t>
        </li>
        <li pn="section-appendix.b-2.6">
          <t indent="0" pn="section-appendix.b-2.6.1"><contact fullname="Cullen Jennings"/></t>
        </li>
        <li pn="section-appendix.b-2.7">
          <t indent="0" pn="section-appendix.b-2.7.1"><contact fullname="Mirja Kühlewind"/></t>
        </li>
        <li pn="section-appendix.b-2.8">
          <t indent="0" pn="section-appendix.b-2.8.1"><contact fullname="Zhenbin Li"/></t>
        </li>
        <li pn="section-appendix.b-2.9">
          <t indent="0" pn="section-appendix.b-2.9.1"><contact fullname="Jared Mauch"/></t>
        </li>
        <li pn="section-appendix.b-2.10">
          <t indent="0" pn="section-appendix.b-2.10.1"><contact fullname="Tommy Pauly"/></t>
        </li>
        <li pn="section-appendix.b-2.11">
          <t indent="0" pn="section-appendix.b-2.11.1"><contact fullname="David Schinazi"/></t>
        </li>
        <li pn="section-appendix.b-2.12">
          <t indent="0" pn="section-appendix.b-2.12.1"><contact fullname="Russ White"/></t>
        </li>
        <li pn="section-appendix.b-2.13">
          <t indent="0" pn="section-appendix.b-2.13.1"><contact fullname="Jiankang Yao"/></t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-acknowledgments">Acknowledgments</name>
      <t indent="0" pn="section-appendix.c-1"><contact fullname="Toerless Eckert"/>, <contact fullname="Wes Hardaker"/>, <contact fullname="Mirja Kühlewind"/>, <contact fullname="Eliot Lear"/>, <contact fullname="Mark Nottingham"/>, and
<contact fullname="Brian Trammell"/> made significant contributions to this document.</t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author initials="M." surname="Thomson" fullname="Martin Thomson">
        <address>
          <email>mt@lowentropy.net</email>
        </address>
      </author>
      <author initials="T." surname="Pauly" fullname="Tommy Pauly">
        <address>
          <email>tpauly@apple.com</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
