summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9170.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9170.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9170.txt')
-rw-r--r--doc/rfc/rfc9170.txt923
1 files changed, 923 insertions, 0 deletions
diff --git a/doc/rfc/rfc9170.txt b/doc/rfc/rfc9170.txt
new file mode 100644
index 0000000..b2b260a
--- /dev/null
+++ b/doc/rfc/rfc9170.txt
@@ -0,0 +1,923 @@
+
+
+
+
+Internet Architecture Board (IAB) M. Thomson
+Request for Comments: 9170
+Category: Informational T. Pauly
+ISSN: 2070-1721 December 2021
+
+
+ Long-Term Viability of Protocol Extension Mechanisms
+
+Abstract
+
+ 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.
+
+Status of This Memo
+
+ This document is not an Internet Standards Track specification; it is
+ published for informational purposes.
+
+ 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.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9170.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) 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.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Imperfect Implementations Limit Protocol Evolution
+ 2.1. Good Protocol Design Is Not Itself Sufficient
+ 2.2. Disuse Can Hide Problems
+ 2.3. Multi-party Interactions and Middleboxes
+ 3. Active Use
+ 3.1. Dependency Is Better
+ 3.2. Version Negotiation
+ 3.3. Falsifying Active Use
+ 3.4. Examples of Active Use
+ 3.5. Restoring Active Use
+ 4. Complementary Techniques
+ 4.1. Fewer Extension Points
+ 4.2. Invariants
+ 4.3. Limiting Participation
+ 4.4. Effective Feedback
+ 5. Security Considerations
+ 6. IANA Considerations
+ 7. Informative References
+ Appendix A. Examples
+ A.1. DNS
+ A.2. HTTP
+ A.3. IP
+ A.4. SNMP
+ A.5. TCP
+ A.6. TLS
+ IAB Members at the Time of Approval
+ Acknowledgments
+ Authors' Addresses
+
+1. Introduction
+
+ A successful protocol [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.
+
+ 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. [TRANSITIONS] examines the problem of protocol evolution more
+ broadly.
+
+ 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. Section 2 highlights some historical examples of
+ difficulties in transitions to new protocol features. 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. Section 4 outlines several additional
+ strategies that might aid in ensuring that protocol changes remain
+ possible over time.
+
+ 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.
+
+2. Imperfect Implementations Limit Protocol Evolution
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+2.1. Good Protocol Design Is Not Itself Sufficient
+
+ 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.
+
+ RFC 6709 [EXTENSIBILITY] contains a great deal of well-considered
+ advice on designing for extensions. It includes the following
+ advice:
+
+ | 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.
+
+ 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:
+
+ | The nature of protocol version-negotiation mechanisms is that, by
+ | definition, they don't get widespread real-world testing until
+ | *after* the base protocol has been deployed for a while, and its
+ | deficiencies have become evident.
+
+ 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.
+
+2.2. Disuse Can Hide Problems
+
+ 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.
+
+ Appendix A includes examples of disuse in a number of widely deployed
+ Internet protocols.
+
+ 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.
+
+2.3. Multi-party Interactions and Middleboxes
+
+ 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.
+
+ 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.
+
+ 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.
+
+3. Active Use
+
+ The design of a protocol for extensibility and eventual replacement
+ [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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+3.1. Dependency Is Better
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+3.2. Version Negotiation
+
+ As noted in 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.
+
+ 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 [RFC2464] required a
+ different EtherType from IPv4. This change took advantage of the
+ already diverse usage of EtherType.
+
+ Other examples of this style of design include Application-Layer
+ Protocol Negotiation ([ALPN]) and HTTP content negotiation
+ (Section 12 of [HTTP]).
+
+ This technique relies on the code point being usable. For instance,
+ the IP protocol number is known to be unreliable and therefore not
+ suitable [NEW-PROTOCOLS].
+
+3.3. Falsifying Active Use
+
+ "Grease" was originally defined for TLS [GREASE] but has been adopted
+ by other protocols such as QUIC [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.
+
+ The design in [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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+ 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.
+
+3.4. Examples of Active Use
+
+ Header fields in email [SMTP], HTTP [HTTP], and SIP [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.
+
+ As another example, the attribute-value pairs (AVPs) in Diameter
+ [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.
+
+ 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.
+
+ 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
+ [HTTP-HEADERS].
+
+3.5. Restoring Active Use
+
+ With enough effort, active use can be used to restore capabilities.
+
+ Extension Mechanisms for DNS ([EDNS]) was defined to provide
+ extensibility in DNS. Intolerance of the extension in DNS servers
+ resulted in a fallback method being widely deployed (see
+ Section 6.2.2 of [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 [DNSFLAGDAY] where the workaround was removed.
+
+ 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.
+
+4. Complementary Techniques
+
+ The protections to protocol evolution that come from active use
+ (Section 3) 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.
+
+4.1. Fewer Extension Points
+
+ 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.
+
+ 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.
+
+ Both extensions and core protocol elements use the same extension
+ points in protocols like HTTP [HTTP] and DIAMETER [DIAMETER]; see
+ Section 3.4.
+
+4.2. Invariants
+
+ Documenting aspects of the protocol that cannot or will not change as
+ extensions or new versions are added can be a useful exercise.
+ Section 2.2 of [RFC5704] defines invariants as:
+
+ | Invariants are core properties that are consistent across the
+ | network and do not change over extremely long time-scales.
+
+ Understanding what aspects of a protocol are invariant can help guide
+ the process of identifying those parts of the protocol that might
+ change. [QUIC-INVARIANTS] and Section 9.3 of [TLS13] are both
+ examples of documented invariants.
+
+ 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 (Section 3.3) might
+ be used to improve the chance that invariants are respected.
+
+ Protocol invariants need to be clearly and concisely documented.
+ Including examples of aspects of the protocol that are not invariant,
+ such as Appendix A of [QUIC-INVARIANTS], can be used to clarify
+ intent.
+
+4.3. Limiting Participation
+
+ 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.
+
+ [PATH-SIGNALS] also recommends the use of encryption and integrity
+ protection to limit participation. For example, encryption is used
+ by the QUIC protocol [QUIC] to limit the information that is
+ available to middleboxes and integrity protection prevents
+ modification.
+
+4.4. Effective Feedback
+
+ While not a direct means of protecting extensibility mechanisms,
+ feedback systems can be important to discovering problems.
+
+ The visibility of errors is critical to the success of techniques
+ like grease (see 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.
+
+ 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.
+
+ Automated feedback systems are important for automated systems, or
+ where error recovery is also automated. For instance, connection
+ failures with HTTP alternative services [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.
+
+ 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.
+
+ Automated delivery of error reports can be critical for rectifying
+ deployment errors as early as possible, as seen in [DMARC] and
+ [SMTP-TLS-REPORTING].
+
+5. Security Considerations
+
+ 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.
+
+ 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.
+
+ 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 [AGILITY]. For
+ example, preparing for the replacement of weak hash algorithms was
+ made more difficult through misuse [HASH].
+
+6. IANA Considerations
+
+ This document has no IANA actions.
+
+7. Informative References
+
+ [AGILITY] Housley, R., "Guidelines for Cryptographic Algorithm
+ Agility and Selecting Mandatory-to-Implement Algorithms",
+ BCP 201, RFC 7696, DOI 10.17487/RFC7696, November 2015,
+ <https://www.rfc-editor.org/info/rfc7696>.
+
+ [ALPN] Friedl, S., Popov, A., Langley, A., and E. Stephan,
+ "Transport Layer Security (TLS) Application-Layer Protocol
+ Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301,
+ July 2014, <https://www.rfc-editor.org/info/rfc7301>.
+
+ [ALT-SVC] Nottingham, M., McManus, P., and J. Reschke, "HTTP
+ Alternative Services", RFC 7838, DOI 10.17487/RFC7838,
+ April 2016, <https://www.rfc-editor.org/info/rfc7838>.
+
+ [DIAMETER] Fajardo, V., Ed., Arkko, J., Loughney, J., and G. Zorn,
+ Ed., "Diameter Base Protocol", RFC 6733,
+ DOI 10.17487/RFC6733, October 2012,
+ <https://www.rfc-editor.org/info/rfc6733>.
+
+ [DMARC] Kucherawy, M., Ed. and E. Zwicky, Ed., "Domain-based
+ Message Authentication, Reporting, and Conformance
+ (DMARC)", RFC 7489, DOI 10.17487/RFC7489, March 2015,
+ <https://www.rfc-editor.org/info/rfc7489>.
+
+ [DNSFLAGDAY]
+ "DNS Flag Day 2019", May 2019,
+ <https://dnsflagday.net/2019/>.
+
+ [EDNS] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms
+ for DNS (EDNS(0))", STD 75, RFC 6891,
+ DOI 10.17487/RFC6891, April 2013,
+ <https://www.rfc-editor.org/info/rfc6891>.
+
+ [EXT-TCP] Honda, M., Nishida, Y., Raiciu, C., Greenhalgh, A.,
+ Handley, M., and H. Tokuda, "Is it still possible to
+ extend TCP?", IMC '11: Proceedings of the 2011 ACM SIGCOMM
+ conference on Internet measurement conference,
+ DOI 10.1145/2068816.2068834, November 2011,
+ <https://doi.org/10.1145/2068816.2068834>.
+
+ [EXTENSIBILITY]
+ Carpenter, B., Aboba, B., Ed., and S. Cheshire, "Design
+ Considerations for Protocol Extensions", RFC 6709,
+ DOI 10.17487/RFC6709, September 2012,
+ <https://www.rfc-editor.org/info/rfc6709>.
+
+ [GREASE] Benjamin, D., "Applying Generate Random Extensions And
+ Sustain Extensibility (GREASE) to TLS Extensibility",
+ RFC 8701, DOI 10.17487/RFC8701, January 2020,
+ <https://www.rfc-editor.org/info/rfc8701>.
+
+ [HASH] Bellovin, S. and E. Rescorla, "Deploying a New Hash
+ Algorithm", Proceedings of NDSS, 2006,
+ <https://www.cs.columbia.edu/~smb/papers/new-hash.pdf>.
+
+ [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP Semantics", Work in Progress, Internet-Draft,
+ draft-ietf-httpbis-semantics-19, September 2021,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-
+ semantics-19>.
+
+ [HTTP-HEADERS]
+ Nottingham, M. and P-H. Kamp, "Structured Field Values for
+ HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021,
+ <https://www.rfc-editor.org/info/rfc8941>.
+
+ [HTTP11] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
+ Ed., "HTTP/1.1", Work in Progress, Internet-Draft, draft-
+ ietf-httpbis-messaging-19, September 2021,
+ <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-
+ messaging-19>.
+
+ [INTOLERANCE]
+ Kario, H., "Re: [TLS] Thoughts on Version Intolerance",
+ July 2016, <https://mailarchive.ietf.org/arch/msg/tls/
+ bOJ2JQc3HjAHFFWCiNTIb0JuMZc>.
+
+ [MPTCP] Ford, A., Raiciu, C., Handley, M., Bonaventure, O., and C.
+ Paasch, "TCP Extensions for Multipath Operation with
+ Multiple Addresses", RFC 8684, DOI 10.17487/RFC8684, March
+ 2020, <https://www.rfc-editor.org/info/rfc8684>.
+
+ [MPTCP-HOW-HARD]
+ Raiciu, C., Paasch, C., Barre, S., Ford, A., Honda, M.,
+ Duchene, F., Bonaventure, O., and M. Handley, "How Hard
+ Can It Be? Designing and Implementing a Deployable
+ Multipath TCP", April 2012,
+ <https://www.usenix.org/conference/nsdi12/technical-
+ sessions/presentation/raiciu>.
+
+ [NEW-PROTOCOLS]
+ Barik, R., Welzl, M., Fairhurst, G., Elmokashfi, A.,
+ Dreibholz, T., and S. Gjessing, "On the usability of
+ transport protocols other than TCP: A home gateway and
+ internet path traversal study", Computer Networks, Vol.
+ 173, pp. 107211, DOI 10.1016/j.comnet.2020.107211, May
+ 2020, <https://doi.org/10.1016/j.comnet.2020.107211>.
+
+ [PATH-SIGNALS]
+ Hardie, T., Ed., "Transport Protocol Path Signals",
+ RFC 8558, DOI 10.17487/RFC8558, April 2019,
+ <https://www.rfc-editor.org/info/rfc8558>.
+
+ [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
+ Multiplexed and Secure Transport", RFC 9000,
+ DOI 10.17487/RFC9000, May 2021,
+ <https://www.rfc-editor.org/info/rfc9000>.
+
+ [QUIC-INVARIANTS]
+ Thomson, M., "Version-Independent Properties of QUIC",
+ RFC 8999, DOI 10.17487/RFC8999, May 2021,
+ <https://www.rfc-editor.org/info/rfc8999>.
+
+ [RAv4] Katz, D., "IP Router Alert Option", RFC 2113,
+ DOI 10.17487/RFC2113, February 1997,
+ <https://www.rfc-editor.org/info/rfc2113>.
+
+ [RAv6] Partridge, C. and A. Jackson, "IPv6 Router Alert Option",
+ RFC 2711, DOI 10.17487/RFC2711, October 1999,
+ <https://www.rfc-editor.org/info/rfc2711>.
+
+ [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791,
+ DOI 10.17487/RFC0791, September 1981,
+ <https://www.rfc-editor.org/info/rfc791>.
+
+ [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
+ RFC 1112, DOI 10.17487/RFC1112, August 1989,
+ <https://www.rfc-editor.org/info/rfc1112>.
+
+ [RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet
+ Networks", RFC 2464, DOI 10.17487/RFC2464, December 1998,
+ <https://www.rfc-editor.org/info/rfc2464>.
+
+ [RFC5704] Bryant, S., Ed., Morrow, M., Ed., and IAB, "Uncoordinated
+ Protocol Development Considered Harmful", RFC 5704,
+ DOI 10.17487/RFC5704, November 2009,
+ <https://www.rfc-editor.org/info/rfc5704>.
+
+ [RRTYPE] Gustafsson, A., "Handling of Unknown DNS Resource Record
+ (RR) Types", RFC 3597, DOI 10.17487/RFC3597, September
+ 2003, <https://www.rfc-editor.org/info/rfc3597>.
+
+ [SIP] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston,
+ A., Peterson, J., Sparks, R., Handley, M., and E.
+ Schooler, "SIP: Session Initiation Protocol", RFC 3261,
+ DOI 10.17487/RFC3261, June 2002,
+ <https://www.rfc-editor.org/info/rfc3261>.
+
+ [SMTP] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321,
+ DOI 10.17487/RFC5321, October 2008,
+ <https://www.rfc-editor.org/info/rfc5321>.
+
+ [SMTP-TLS-REPORTING]
+ Margolis, D., Brotman, A., Ramakrishnan, B., Jones, J.,
+ and M. Risher, "SMTP TLS Reporting", RFC 8460,
+ DOI 10.17487/RFC8460, September 2018,
+ <https://www.rfc-editor.org/info/rfc8460>.
+
+ [SNI] Langley, A., "[TLS] Accepting that other SNI name types
+ will never work.", March 2016,
+ <https://mailarchive.ietf.org/arch/msg/
+ tls/1t79gzNItZd71DwwoaqcQQ_4Yxc>.
+
+ [SNMPv1] Case, J., Fedor, M., Schoffstall, M., and J. Davin,
+ "Simple Network Management Protocol (SNMP)", RFC 1157,
+ DOI 10.17487/RFC1157, May 1990,
+ <https://www.rfc-editor.org/info/rfc1157>.
+
+ [SPF] Kitterman, S., "Sender Policy Framework (SPF) for
+ Authorizing Use of Domains in Email, Version 1", RFC 7208,
+ DOI 10.17487/RFC7208, April 2014,
+ <https://www.rfc-editor.org/info/rfc7208>.
+
+ [SUCCESS] Thaler, D. and B. Aboba, "What Makes for a Successful
+ Protocol?", RFC 5218, DOI 10.17487/RFC5218, July 2008,
+ <https://www.rfc-editor.org/info/rfc5218>.
+
+ [TCP] Postel, J., "Transmission Control Protocol", STD 7,
+ RFC 793, DOI 10.17487/RFC0793, September 1981,
+ <https://www.rfc-editor.org/info/rfc793>.
+
+ [TFO] Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, "TCP
+ Fast Open", RFC 7413, DOI 10.17487/RFC7413, December 2014,
+ <https://www.rfc-editor.org/info/rfc7413>.
+
+ [TLS-EXT] Eastlake 3rd, D., "Transport Layer Security (TLS)
+ Extensions: Extension Definitions", RFC 6066,
+ DOI 10.17487/RFC6066, January 2011,
+ <https://www.rfc-editor.org/info/rfc6066>.
+
+ [TLS12] Dierks, T. and E. Rescorla, "The Transport Layer Security
+ (TLS) Protocol Version 1.2", RFC 5246,
+ DOI 10.17487/RFC5246, August 2008,
+ <https://www.rfc-editor.org/info/rfc5246>.
+
+ [TLS13] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [TRANSITIONS]
+ Thaler, D., Ed., "Planning for Protocol Adoption and
+ Subsequent Transitions", RFC 8170, DOI 10.17487/RFC8170,
+ May 2017, <https://www.rfc-editor.org/info/rfc8170>.
+
+Appendix A. Examples
+
+ This appendix contains a brief study of problems in a range of
+ Internet protocols at different layers of the stack.
+
+A.1. DNS
+
+ 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
+ [SPF] and other protocols.
+
+ It was not until after the standard mechanism for dealing with new
+ RRCodes [RRTYPE] was considered widely deployed that new RRCodes
+ could be safely created and used.
+
+A.2. HTTP
+
+ 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.
+
+ Extension points in HTTP that might be unwise to use include the
+ extension point on each chunk in the chunked transfer coding
+ (Section 7.1 of [HTTP11]), the ability to use transfer codings other
+ than the chunked coding, and the range unit in a range request
+ (Section 14 of [HTTP]).
+
+A.3. IP
+
+ The version field in IP was rendered useless when encapsulated over
+ Ethernet, requiring a new EtherType with IPv6 [RFC2464], due in part
+ to Layer 2 devices making version-independent assumptions about the
+ structure of the IPv4 header.
+
+ 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 [RFC0791] reserved
+ without assigning any semantics. [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.
+
+ 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.
+
+ IP Router Alerts [RAv4][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.
+
+A.4. SNMP
+
+ As a counter example, the first version of the Simple Network
+ Management Protocol (SNMP) [SNMPv1] states that unparseable or
+ unauthenticated messages are simply discarded without response:
+
+ | It then verifies the version number of the SNMP message. If there
+ | is a mismatch, it discards the datagram and performs no further
+ | actions.
+
+ 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.
+
+A.5. TCP
+
+ Extension points in TCP [TCP] have been rendered difficult to use
+ largely due to middlebox interactions; see [EXT-TCP].
+
+ For instance, multipath TCP ([MPTCP]) can only be deployed
+ opportunistically; see [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.
+
+ In comparison, the deployment of TCP Fast Open ([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.
+
+A.6. TLS
+
+ Transport Layer Security (TLS) [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.
+
+ Version negotiation in TLS 1.2 and earlier uses the "Highest mutually
+ supported version (HMSV)" scheme exactly as it is described in
+ [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.
+
+ Intolerance to new TLS versions is so severe [INTOLERANCE] that TLS
+ 1.3 [TLS13] abandoned HMSV version negotiation for a new mechanism.
+
+ The server name indication (SNI) [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.
+
+ 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 [SNI].
+
+IAB Members at the Time of Approval
+
+ Internet Architecture Board members at the time this document was
+ approved for publication were:
+
+ Jari Arkko
+ Deborah Brungard
+ Ben Campbell
+ Lars Eggert
+ Wes Hardaker
+ Cullen Jennings
+ Mirja Kühlewind
+ Zhenbin Li
+ Jared Mauch
+ Tommy Pauly
+ David Schinazi
+ Russ White
+ Jiankang Yao
+
+Acknowledgments
+
+ Toerless Eckert, Wes Hardaker, Mirja Kühlewind, Eliot Lear, Mark
+ Nottingham, and Brian Trammell made significant contributions to this
+ document.
+
+Authors' Addresses
+
+ Martin Thomson
+
+ Email: mt@lowentropy.net
+
+
+ Tommy Pauly
+
+ Email: tpauly@apple.com