| rfc9413.original | rfc9413.txt | |||
|---|---|---|---|---|
| EDM M. Thomson | Internet Architecture Board (IAB) M. Thomson | |||
| Internet-Draft | Request for Comments: 9413 | |||
| Intended status: Informational D. Schinazi | Category: Informational D. Schinazi | |||
| Expires: 6 August 2023 2 February 2023 | ISSN: 2070-1721 June 2023 | |||
| Maintaining Robust Protocols | Maintaining Robust Protocols | |||
| draft-iab-protocol-maintenance-12 | ||||
| Abstract | Abstract | |||
| The main goal of the networking standards process is to enable the | The main goal of the networking standards process is to enable the | |||
| long term interoperability of protocols. This document describes | long-term interoperability of protocols. This document describes | |||
| active protocol maintenance, a means to accomplish that goal. By | active protocol maintenance, a means to accomplish that goal. By | |||
| evolving specifications and implementations, it is possible to reduce | evolving specifications and implementations, it is possible to reduce | |||
| ambiguity over time and create a healthy ecosystem. | ambiguity over time and create a healthy ecosystem. | |||
| The robustness principle, often phrased as "be conservative in what | The robustness principle, often phrased as "be conservative in what | |||
| you send, and liberal in what you accept", has long guided the design | you send, and liberal in what you accept", has long guided the design | |||
| and implementation of Internet protocols. However, it has been | and implementation of Internet protocols. However, it has been | |||
| interpreted in a variety of ways. While some interpretations help | interpreted in a variety of ways. While some interpretations help | |||
| ensure the health of the Internet, others can negatively affect | ensure the health of the Internet, others can negatively affect | |||
| interoperability over time. When a protocol is actively maintained, | interoperability over time. When a protocol is actively maintained, | |||
| protocol designers and implementers can avoid these pitfalls. | protocol designers and implementers can avoid these pitfalls. | |||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| The latest revision of this draft can be found at | ||||
| https://intarchboard.github.io/draft-protocol-maintenance/draft-iab- | ||||
| protocol-maintenance.html. Status information for this document may | ||||
| be found at https://datatracker.ietf.org/doc/draft-iab-protocol- | ||||
| maintenance/. | ||||
| Discussion of this document takes place on the EDM IAB Program | ||||
| mailing list (mailto:edm@iab.org), which is archived at | ||||
| https://www.iab.org/mailman/listinfo/edm. Subscribe at | ||||
| https://www.ietf.org/mailman/listinfo/edm/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/intarchboard/draft-protocol-maintenance. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
| provisions of BCP 78 and BCP 79. | published for informational purposes. | |||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Architecture Board (IAB) | |||
| and may be updated, replaced, or obsoleted by other documents at any | and represents information that the IAB has deemed valuable to | |||
| time. It is inappropriate to use Internet-Drafts as reference | provide for permanent record. It represents the consensus of the | |||
| material or to cite them other than as "work in progress." | 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. | ||||
| This Internet-Draft will expire on 6 August 2023. | 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/rfc9413. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2023 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. | carefully, as they describe your rights and restrictions with respect | |||
| to this document. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 2. Protocol Robustness . . . . . . . . . . . . . . . . . . . . . 3 | 2. Protocol Robustness | |||
| 2.1. Fallibility of Specifications . . . . . . . . . . . . . . 5 | 2.1. Fallibility of Specifications | |||
| 2.2. Extensibility . . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Extensibility | |||
| 2.3. Flexible Protocols . . . . . . . . . . . . . . . . . . . 6 | 2.3. Flexible Protocols | |||
| 3. Applicability . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3. Applicability | |||
| 4. Harmful Consequences of Tolerating the Unexpected . . . . . . 7 | 4. Harmful Consequences of Tolerating the Unexpected | |||
| 4.1. Protocol Decay . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Protocol Decay | |||
| 4.2. Ecosystem Effects . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Ecosystem Effects | |||
| 5. Active Protocol Maintenance . . . . . . . . . . . . . . . . . 10 | 5. Active Protocol Maintenance | |||
| 5.1. Virtuous Intolerance . . . . . . . . . . . . . . . . . . 12 | 5.1. Virtuous Intolerance | |||
| 5.2. Exclusion . . . . . . . . . . . . . . . . . . . . . . . . 13 | 5.2. Exclusion | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 14 | 6. Security Considerations | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | 7. IANA Considerations | |||
| 8. Informative References . . . . . . . . . . . . . . . . . . . 14 | 8. Informative References | |||
| IAB Members at the Time of Approval . . . . . . . . . . . . . . . 16 | IAB Members at the Time of Approval | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 17 | Acknowledgments | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 17 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| There is good evidence to suggest that many important protocols are | There is good evidence to suggest that many important protocols are | |||
| routinely maintained beyond their inception. In particular, a | routinely maintained beyond their inception. In particular, a | |||
| sizeable proportion of IETF activity is dedicated to the stewardship | sizable proportion of IETF activity is dedicated to the stewardship | |||
| of existing protocols. This document first discusses hazards in | of existing protocols. This document first discusses hazards in | |||
| applying the robustness principle too broadly (see Section 2), and | applying the robustness principle too broadly (see Section 2) and | |||
| offers an alternative strategy for handling interoperability problems | offers an alternative strategy for handling interoperability problems | |||
| in deployments (see Section 5). | in deployments (see Section 5). | |||
| Ideally, protocol implementations can be actively maintained so that | Ideally, protocol implementations can be actively maintained so that | |||
| unexpected conditions are proactively identified and resolved. Some | unexpected conditions are proactively identified and resolved. Some | |||
| deployments might still need to apply short-term mitigations for | deployments might still need to apply short-term mitigations for | |||
| deployments that cannot be easily updated, but such cases need not be | deployments that cannot be easily updated, but such cases need not be | |||
| permanent. This is discussed further in Section 5. | permanent. This is discussed further in Section 5. | |||
| 2. Protocol Robustness | 2. Protocol Robustness | |||
| The robustness principle has been hugely influential in shaping the | The robustness principle has been hugely influential in shaping the | |||
| design of the Internet. As stated in the IAB document on | design of the Internet. As stated in the IAB document "Architectural | |||
| Architectural Principles of the Internet [RFC1958], the robustness | Principles of the Internet" [RFC1958], the robustness principle | |||
| principle advises to: | advises to: | |||
| | Be strict when sending and tolerant when receiving. | | Be strict when sending and tolerant when receiving. | |||
| | Implementations must follow specifications precisely when sending | | Implementations must follow specifications precisely when sending | |||
| | to the network, and tolerate faulty input from the network. When | | to the network, and tolerate faulty input from the network. When | |||
| | in doubt, discard faulty input silently, without returning an | | in doubt, discard faulty input silently, without returning an | |||
| | error message unless this is required by the specification. | | error message unless this is required by the specification. | |||
| This simple statement captures a significant concept in the design of | This simple statement captures a significant concept in the design of | |||
| interoperable systems. Many consider the application of the | interoperable systems. Many consider the application of the | |||
| robustness principle to be instrumental in the success of the | robustness principle to be instrumental in the success of the | |||
| Internet as well as the design of interoperable protocols in general. | Internet as well as the design of interoperable protocols in general. | |||
| There are three main aspects to the robustness principle: | There are three main aspects to the robustness principle: | |||
| Robustness to software defects: No software is perfect, and failures | Robustness to software defects: No software is perfect, and failures | |||
| can lead to unexpected behavior. Well-designed software strives | can lead to unexpected behavior. Well-designed software strives | |||
| to be resilient to such issues, whether they occur in the local | to be resilient to such issues, whether they occur in the local | |||
| software, or in software that it communicates with. In | software or in software that it communicates with. In particular, | |||
| particular, it is critical for software to gracefully recover from | it is critical for software to gracefully recover from these | |||
| these issues without aborting unrelated processing. | issues without aborting unrelated processing. | |||
| Robustness to attacks: Since not all actors on the Internet are | Robustness to attacks: Since not all actors on the Internet are | |||
| benevolent, networking software needs to be resilient to input | benevolent, networking software needs to be resilient to input | |||
| that is intentionally crafted to cause unexpected consequences. | that is intentionally crafted to cause unexpected consequences. | |||
| For example, software must ensure that invalid input doesn't allow | For example, software must ensure that invalid input doesn't allow | |||
| the sender to access data, change data, or perform actions that it | the sender to access data, change data, or perform actions that it | |||
| would otherwise not be allowed to. | would otherwise not be allowed to. | |||
| Robustness to the unexpected: It can be possible for an | Robustness to the unexpected: It can be possible for an | |||
| implementation to receive inputs that the specification did not | implementation to receive inputs that the specification did not | |||
| skipping to change at page 4, line 23 ¶ | skipping to change at line 137 ¶ | |||
| specification explicitly defines how a faulty message is handled. | specification explicitly defines how a faulty message is handled. | |||
| Instead, this refers to cases where handling is not defined or | Instead, this refers to cases where handling is not defined or | |||
| where there is some ambiguity in the specification. In this case, | where there is some ambiguity in the specification. In this case, | |||
| some interpretations of the robustness principle advocate that the | some interpretations of the robustness principle advocate that the | |||
| implementation tolerate the faulty input and silently discard it. | implementation tolerate the faulty input and silently discard it. | |||
| Some interpretations even suggest that a faulty or ambiguous | Some interpretations even suggest that a faulty or ambiguous | |||
| message be processed according to the inferred intent of the | message be processed according to the inferred intent of the | |||
| sender. | sender. | |||
| The facets of the robustness principle that protect against defects | The facets of the robustness principle that protect against defects | |||
| or attack are understood to be necessary guiding principles for the | or attacks are understood to be necessary guiding principles for the | |||
| design and implementation of networked systems. However, an | design and implementation of networked systems. However, an | |||
| interpretation that advocates for tolerating unexpected inputs is no | interpretation that advocates for tolerating unexpected inputs is no | |||
| longer considered best practice in all scenarios. | longer considered best practice in all scenarios. | |||
| Time and experience shows that negative consequences to | Time and experience show that negative consequences to | |||
| interoperability accumulate over time if implementations silently | interoperability accumulate over time if implementations silently | |||
| accept faulty input. This problem originates from an implicit | accept faulty input. This problem originates from an implicit | |||
| assumption that it is not possible to effect change in a system the | assumption that it is not possible to effect change in a system the | |||
| size of the Internet. When one assumes that changes to existing | size of the Internet. When one assumes that changes to existing | |||
| implementations are not presently feasible, tolerating flaws feels | implementations are not presently feasible, tolerating flaws feels | |||
| inevitable. | inevitable. | |||
| Many problems that this third aspect of the robustness principle was | Many problems that this third aspect of the robustness principle was | |||
| intended to solve can instead be better addressed by active | intended to solve can instead be better addressed by active | |||
| maintenance. Active protocol maintenance is where a community of | maintenance. Active protocol maintenance is where a community of | |||
| skipping to change at page 5, line 9 ¶ | skipping to change at line 164 ¶ | |||
| continuously improve and evolve protocol specifications alongside | continuously improve and evolve protocol specifications alongside | |||
| implementations and deployments of those protocols. A community that | implementations and deployments of those protocols. A community that | |||
| takes an active role in the maintenance of protocols will no longer | takes an active role in the maintenance of protocols will no longer | |||
| need to rely on the robustness principle to avoid interoperability | need to rely on the robustness principle to avoid interoperability | |||
| issues. | issues. | |||
| 2.1. Fallibility of Specifications | 2.1. Fallibility of Specifications | |||
| The context from which the robustness principle was developed | The context from which the robustness principle was developed | |||
| provides valuable insights into its intent and purpose. The earliest | provides valuable insights into its intent and purpose. The earliest | |||
| form of the principle in the RFC series (the Internet Protocol | form of the principle in the RFC Series (the Internet Protocol | |||
| specification [RFC0760]) is preceded by a sentence that reveals a | specification [RFC0760]) is preceded by a sentence that reveals a | |||
| motivation for the principle: | motivation for the principle: | |||
| | While the goal of this specification is to be explicit about the | | While the goal of this specification is to be explicit about the | |||
| | protocol there is the possibility of differing interpretations. | | protocol there is the possibility of differing interpretations. | |||
| | In general, an implementation should be conservative in its | | In general, an implementation should be conservative in its | |||
| | sending behavior, and liberal in its receiving behavior. | | sending behavior, and liberal in its receiving behavior. | |||
| This formulation of the principle expressly recognizes the | This formulation of the principle expressly recognizes the | |||
| possibility that the specification could be imperfect. This | possibility that the specification could be imperfect. This | |||
| contextualizes the principle in an important way. | contextualizes the principle in an important way. | |||
| Imperfect specifications are unavoidable, largely because it is more | Imperfect specifications are unavoidable, largely because it is more | |||
| important to proceed to implementation and deployment than it is to | important to proceed to implementation and deployment than it is to | |||
| perfect a specification. A protocol benefits greatly from experience | perfect a specification. A protocol benefits greatly from experience | |||
| with its use. A deployed protocol is immeasurably more useful than a | with its use. A deployed protocol is immeasurably more useful than a | |||
| perfect protocol specification. This is particularly true in early | perfect protocol specification. This is particularly true in early | |||
| phases of system design, to which the robustness principle is best | phases of system design, to which the robustness principle is best | |||
| suited. | suited. | |||
| As demonstrated by the IAB document on Successful Protocols | As demonstrated by the IAB document "What Makes for a Successful | |||
| [RFC5218], success or failure of a protocol depends far more on | Protocol?" [RFC5218], success or failure of a protocol depends far | |||
| factors like usefulness than on technical excellence. Timely | more on factors like usefulness than on technical excellence. Timely | |||
| publication of protocol specifications, even with the potential for | publication of protocol specifications, even with the potential for | |||
| flaws, likely contributed significantly to the eventual success of | flaws, likely contributed significantly to the eventual success of | |||
| the Internet. | the Internet. | |||
| This premise that specifications will be imperfect is correct. | This premise that specifications will be imperfect is correct. | |||
| However, ignoring faulty or ambiguous input is almost always the | However, ignoring faulty or ambiguous input is almost always the | |||
| incorrect solution to the problem. | incorrect solution to the problem. | |||
| 2.2. Extensibility | 2.2. Extensibility | |||
| skipping to change at page 6, line 28 ¶ | skipping to change at line 231 ¶ | |||
| extensibility mechanism can be extremely difficult, as is | extensibility mechanism can be extremely difficult, as is | |||
| demonstrated by the case study in Appendix A.3 of [EXT]. It is | demonstrated by the case study in Appendix A.3 of [EXT]. It is | |||
| better and easier to design a protocol for extensibility initially | better and easier to design a protocol for extensibility initially | |||
| than to retrofit the capability (see also [EDNS0]). | than to retrofit the capability (see also [EDNS0]). | |||
| 2.3. Flexible Protocols | 2.3. Flexible Protocols | |||
| A protocol could be designed to permit a narrow set of valid inputs, | A protocol could be designed to permit a narrow set of valid inputs, | |||
| or it could be designed to treat a wide range of inputs as valid. | or it could be designed to treat a wide range of inputs as valid. | |||
| A more flexible protocol is more complex to specify and implement: | A more flexible protocol is more complex to specify and implement; | |||
| variations - especially those that are not commonly used - can create | variations, especially those that are not commonly used, can create | |||
| potential interoperability hazards. In the absence of strong reasons | potential interoperability hazards. In the absence of strong reasons | |||
| to be flexible, a simpler protocol is more likely to successfully | to be flexible, a simpler protocol is more likely to successfully | |||
| interoperate. | interoperate. | |||
| Where input is provided by users, allowing flexibility might serve to | Where input is provided by users, allowing flexibility might serve to | |||
| make the protocol more accessible, especially for non-expert users. | make the protocol more accessible, especially for non-expert users. | |||
| HTML authoring [HTML] is an example of this sort of design. | HTML authoring [HTML] is an example of this sort of design. | |||
| In protocols where there are many participants that might generate | In protocols where there are many participants that might generate | |||
| messages based on data from other participants some flexibility might | messages based on data from other participants, some flexibility | |||
| contribute to resilience of the system. A routing protocol is a good | might contribute to resilience of the system. A routing protocol is | |||
| example of where this might be necessary. | a good example of where this might be necessary. | |||
| In BGP [BGP], a peer generates UPDATE messages based on messages it | In BGP [BGP], a peer generates UPDATE messages based on messages it | |||
| receives from other peers. Peers can copy attributes without | receives from other peers. Peers can copy attributes without | |||
| validation, potentially propagating invalid values. RFC 4271 [BGP] | validation, potentially propagating invalid values. RFC 4271 [BGP] | |||
| mandated a session reset for invalid UPDATE messages, a requirement | mandated a session reset for invalid UPDATE messages, a requirement | |||
| that was not widely implemented. In many deployments, peers would | that was not widely implemented. In many deployments, peers would | |||
| treat a malformed UPDATE in less stringent ways, such as by treating | treat a malformed UPDATE in less stringent ways, such as by treating | |||
| the affected route as having been withdrawn. Ultimately, RFC 7606 | the affected route as having been withdrawn. Ultimately, RFC 7606 | |||
| [BGP-REH] documented this practice and provided precise rules, | [BGP-REH] documented this practice and provided precise rules, | |||
| including mandatory actions for different error conditions. | including mandatory actions for different error conditions. | |||
| A protocol can explicitly allow for a range of valid expressions of | A protocol can explicitly allow for a range of valid expressions of | |||
| the same semantics, with precise definitions for error handling. | the same semantics, with precise definitions for error handling. | |||
| This is distinct from a protocol that relies on the application of | This is distinct from a protocol that relies on the application of | |||
| the robustness principle. With the former, interoperation depends on | the robustness principle. With the former, interoperation depends on | |||
| specifications that capture all relevant details; whereas - as noted | specifications that capture all relevant details, whereas | |||
| in Section 4.2 - interoperation in the latter depends more | interoperation in the latter depends more extensively on | |||
| extensively on implementations making compatible decisions. | implementations making compatible decisions, as noted in Section 4.2. | |||
| 3. Applicability | 3. Applicability | |||
| The guidance in this document is intended for protocols that are | The guidance in this document is intended for protocols that are | |||
| deployed to the Internet. There are some situations in which this | deployed to the Internet. There are some situations in which this | |||
| guidance might not apply to a protocol due to conditions on its | guidance might not apply to a protocol due to conditions on its | |||
| implementation or deployment. | implementation or deployment. | |||
| In particular, this guidance depends on an ability to update and | In particular, this guidance depends on an ability to update and | |||
| deploy implementations. Being able to rapidly update implementations | deploy implementations. Being able to rapidly update implementations | |||
| that are deployed to the Internet helps managing security risk but in | that are deployed to the Internet helps manage security risks, but in | |||
| reality some software deployments have lifecycles that make software | reality, some software deployments have lifecycles that make software | |||
| updates either rare or altogether impossible. | updates either rare or altogether impossible. | |||
| Where implementations are not updated, there is no opportunity to | Where implementations are not updated, there is no opportunity to | |||
| apply the practices that this document recommends. In particular, | apply the practices that this document recommends. In particular, | |||
| some practices - such as those described in Section 5.1 - only exist | some practices -- such as those described in Section 5.1 -- only | |||
| to support the development of protocol maintenance and evolution. | exist to support the development of protocol maintenance and | |||
| Employing this guidance is therefore only applicable where there is | evolution. Employing this guidance is therefore only applicable | |||
| the possibility of improving deployments through timely updates of | where there is the possibility of improving deployments through | |||
| their implementations. | timely updates of their implementations. | |||
| 4. Harmful Consequences of Tolerating the Unexpected | 4. Harmful Consequences of Tolerating the Unexpected | |||
| Problems in other implementations can create an unavoidable need to | Problems in other implementations can create an unavoidable need to | |||
| temporarily tolerate unexpected inputs. However, this course of | temporarily tolerate unexpected inputs. However, this course of | |||
| action carries risks. | action carries risks. | |||
| 4.1. Protocol Decay | 4.1. Protocol Decay | |||
| Tolerating unexpected input might be an expedient tool for systems in | Tolerating unexpected input might be an expedient tool for systems in | |||
| early phases of deployment, such as was the case for the early | early phases of deployment, which was the case for the early | |||
| Internet. Being lenient in this way defers the effort of dealing | Internet. Being lenient in this way defers the effort of dealing | |||
| with interoperability problems and prioritizes progress. However, | with interoperability problems and prioritizes progress. However, | |||
| this deferral can amplify the ultimate cost of handling | this deferral can amplify the ultimate cost of handling | |||
| interoperability problems. | interoperability problems. | |||
| Divergent implementations of a specification emerge over time. When | Divergent implementations of a specification emerge over time. When | |||
| variations occur in the interpretation or expression of semantic | variations occur in the interpretation or expression of semantic | |||
| components, implementations cease to be perfectly interoperable. | components, implementations cease to be perfectly interoperable. | |||
| Implementation bugs are often identified as the cause of variation, | Implementation bugs are often identified as the cause of variation, | |||
| though it is often a combination of factors. Using a protocol in | though it is often a combination of factors. Using a protocol in | |||
| ways that were not anticipated in the original design, or ambiguities | ways that were not anticipated in the original design or ambiguities | |||
| and errors in the specification are often contributing factors. | and errors in the specification are often contributing factors. | |||
| Disagreements on the interpretation of specifications should be | Disagreements on the interpretation of specifications should be | |||
| expected over the lifetime of a protocol. | expected over the lifetime of a protocol. | |||
| Even with the best intentions to maintain protocol correctness, the | Even with the best intentions to maintain protocol correctness, the | |||
| pressure to interoperate can be significant. No implementation can | pressure to interoperate can be significant. No implementation can | |||
| hope to avoid having to trade correctness for interoperability | hope to avoid having to trade correctness for interoperability | |||
| indefinitely. | indefinitely. | |||
| An implementation that reacts to variations in the manner recommended | An implementation that reacts to variations in the manner recommended | |||
| in the robustness principle enters a pathological feedback cycle. | in the robustness principle enters a pathological feedback cycle. | |||
| Over time: | Over time: | |||
| * Implementations progressively add logic to constrain how data is | * Implementations progressively add logic to constrain how data is | |||
| transmitted, or to permit variations in what is received. | transmitted or to permit variations in what is received. | |||
| * Errors in implementations or confusion about semantics are | * Errors in implementations or confusion about semantics are | |||
| permitted or ignored. | permitted or ignored. | |||
| * These errors can become entrenched, forcing other implementations | * These errors can become entrenched, forcing other implementations | |||
| to be tolerant of those errors. | to be tolerant of those errors. | |||
| A flaw can become entrenched as a de facto standard. Any | A flaw can become entrenched as a de facto standard. Any | |||
| implementation of the protocol is required to replicate the aberrant | implementation of the protocol is required to replicate the aberrant | |||
| behavior, or it is not interoperable. This is both a consequence of | behavior, or it is not interoperable. This is both a consequence of | |||
| tolerating the unexpected, and a product of a natural reluctance to | tolerating the unexpected and a product of a natural reluctance to | |||
| avoid fatal error conditions. Ensuring interoperability in this | avoid fatal error conditions. Ensuring interoperability in this | |||
| environment is often referred to as aiming to be "bug for bug | environment is often referred to as aiming to be "bug-for-bug | |||
| compatible". | compatible". | |||
| For example, in TLS [TLS], extensions use a tag-length-value format | For example, in TLS [TLS], extensions use a tag-length-value format | |||
| and can be added to messages in any order. However, some server | and can be added to messages in any order. However, some server | |||
| implementations terminated connections if they encountered a TLS | implementations terminated connections if they encountered a TLS | |||
| ClientHello message that ends with an empty extension. To maintain | ClientHello message that ends with an empty extension. To maintain | |||
| interoperability with these servers, which were widely deployed, | interoperability with these servers, which were widely deployed, | |||
| client implementations were required to be aware of this bug and | client implementations were required to be aware of this bug and | |||
| ensure that a ClientHello message ends in a non-empty extension. | ensure that a ClientHello message ends in a non-empty extension. | |||
| Overapplication of the robustness principle therefore encourages a | Overapplication of the robustness principle therefore encourages a | |||
| chain reaction that can create interoperability problems over time. | chain reaction that can create interoperability problems over time. | |||
| In particular, tolerating unexpected behavior is particularly | In particular, tolerating unexpected behavior is particularly | |||
| deleterious for early implementations of new protocols as quirks in | deleterious for early implementations of new protocols, as quirks in | |||
| early implementations can affect all subsequent deployments. | early implementations can affect all subsequent deployments. | |||
| 4.2. Ecosystem Effects | 4.2. Ecosystem Effects | |||
| From observing widely deployed protocols, it appears there are two | From observing widely deployed protocols, it appears there are two | |||
| stable points on the spectrum between being strict versus permissive | stable points on the spectrum between being strict versus permissive | |||
| in the presence of protocol errors: | in the presence of protocol errors: | |||
| * If implementations predominantly enforce strict compliance with | * If implementations predominantly enforce strict compliance with | |||
| specifications, newer implementations will experience failures if | specifications, newer implementations will experience failures if | |||
| they do not comply with protocol requirements. Newer | they do not comply with protocol requirements. Newer | |||
| implementations need to fix compliance issues in order to be | implementations need to fix compliance issues in order to be | |||
| successfully deployed. This ensures that most deployments are | successfully deployed. This ensures that most deployments are | |||
| compliant over time. | compliant over time. | |||
| * Conversely, if non-compliance is tolerated by existing | * Conversely, if non-compliance is tolerated by existing | |||
| implementations, non-compliant implementations can be deployed | implementations, non-compliant implementations can be deployed | |||
| successfully. Newer implementations then have strong incentive to | successfully. Newer implementations then have a strong incentive | |||
| tolerate any existing non-compliance in order to be successfully | to tolerate any existing non-compliance in order to be | |||
| deployed. This ensures that most deployments are tolerant of the | successfully deployed. This ensures that most deployments are | |||
| same non-compliant behavior. | tolerant of the same non-compliant behavior. | |||
| This happens because interoperability requirements for protocol | This happens because interoperability requirements for protocol | |||
| implementations are set by other deployments. Specifications and | implementations are set by other deployments. Specifications and | |||
| test suites - where they exist - can guide the initial development of | test suites -- where they exist -- can guide the initial development | |||
| implementations. Ultimately, the need to interoperate with deployed | of implementations. Ultimately, the need to interoperate with | |||
| implementations is a de facto conformance test suite that can | deployed implementations is a de facto conformance test suite that | |||
| supersede any formal protocol definition. | can supersede any formal protocol definition. | |||
| For widely used protocols, the massive scale of the Internet makes | For widely used protocols, the massive scale of the Internet makes | |||
| large-scale interoperability testing infeasible for all but a | large-scale interoperability testing infeasible for all but a | |||
| privileged few. The cost of building a new implementation using | privileged few. The cost of building a new implementation using | |||
| reverse engineering increases as the number of implementations and | reverse engineering increases as the number of implementations and | |||
| bugs increases. Worse, the set of tweaks necessary for wide | bugs increases. Worse, the set of tweaks necessary for wide | |||
| interoperability can be difficult to discover. In the worst case, a | interoperability can be difficult to discover. In the worst case, a | |||
| new implementer might have to choose between deployments that have | new implementer might have to choose between deployments that have | |||
| diverged so far as to no longer be interoperable. | diverged so far as to no longer be interoperable. | |||
| skipping to change at page 10, line 9 ¶ | skipping to change at line 404 ¶ | |||
| This has a negative impact on the ecosystem of a protocol. New | This has a negative impact on the ecosystem of a protocol. New | |||
| implementations are key to the continued viability of a protocol. | implementations are key to the continued viability of a protocol. | |||
| New protocol implementations are also more likely to be developed for | New protocol implementations are also more likely to be developed for | |||
| new and diverse use cases and are often the origin of features and | new and diverse use cases and are often the origin of features and | |||
| capabilities that can be of benefit to existing users. | capabilities that can be of benefit to existing users. | |||
| The need to work around interoperability problems also reduces the | The need to work around interoperability problems also reduces the | |||
| ability of established implementations to change. An accumulation of | ability of established implementations to change. An accumulation of | |||
| mitigations for interoperability issues makes implementations more | mitigations for interoperability issues makes implementations more | |||
| difficult to maintain and can constrain extensibility (see also the | difficult to maintain and can constrain extensibility (see also the | |||
| IAB document on the Long-Term Viability of Protocol Extension | IAB document "Long-Term Viability of Protocol Extension Mechanisms" | |||
| Mechanisms [RFC9170]). | [RFC9170]). | |||
| Sometimes what appear to be interoperability problems are symptomatic | Sometimes, what appear to be interoperability problems are | |||
| of issues in protocol design. A community that is willing to make | symptomatic of issues in protocol design. A community that is | |||
| changes to the protocol, by revising or extending specifications and | willing to make changes to the protocol, by revising or extending | |||
| then deploying those changes, makes the protocol better. Tolerating | specifications and then deploying those changes, makes the protocol | |||
| unexpected input instead conceals problems, making it harder, if not | better. Tolerating unexpected input instead conceals problems, | |||
| impossible, to fix them later. | making it harder, if not impossible, to fix them later. | |||
| 5. Active Protocol Maintenance | 5. Active Protocol Maintenance | |||
| The robustness principle can be highly effective in safeguarding | The robustness principle can be highly effective in safeguarding | |||
| against flaws in the implementation of a protocol by peers. | against flaws in the implementation of a protocol by peers. | |||
| Especially when a specification remains unchanged for an extended | Especially when a specification remains unchanged for an extended | |||
| period of time, incentive to be tolerant of errors accumulates over | period of time, the incentive to be tolerant of errors accumulates | |||
| time. Indeed, when faced with divergent interpretations of an | over time. Indeed, when faced with divergent interpretations of an | |||
| immutable specification, the only way for an implementation to remain | immutable specification, the only way for an implementation to remain | |||
| interoperable is to be tolerant of differences in interpretation and | interoperable is to be tolerant of differences in interpretation and | |||
| implementation errors. However, when official specifications fail to | implementation errors. However, when official specifications fail to | |||
| be updated then deployed implementations - including their quirks - | be updated, then deployed implementations -- including their quirks | |||
| often become a substitute standard. | -- often become a substitute standard. | |||
| Tolerating unexpected inputs from another implementation might seem | Tolerating unexpected inputs from another implementation might seem | |||
| logical, even necessary. But that conclusion relies on an assumption | logical, even necessary. However, that conclusion relies on an | |||
| that existing specifications and implementations cannot change. | assumption that existing specifications and implementations cannot | |||
| Applying the robustness principle in this way disproportionately | change. Applying the robustness principle in this way | |||
| values short-term gains over the negative effects on future | disproportionately values short-term gains over the negative effects | |||
| implementations and the protocol as a whole. | on future implementations and the protocol as a whole. | |||
| For a protocol to have sustained viability, it is necessary for both | For a protocol to have sustained viability, it is necessary for both | |||
| specifications and implementations to be responsive to changes, in | specifications and implementations to be responsive to changes, in | |||
| addition to handling new and old problems that might arise over time. | addition to handling new and old problems that might arise over time. | |||
| For example, when an implementer discovers a scenario where a | For example, when an implementer discovers a scenario where a | |||
| specification defines some input as faulty but does not define how to | specification defines some input as faulty but does not define how to | |||
| handle that input, the implementer can provide significant value to | handle that input, the implementer can provide significant value to | |||
| the ecosystem by reporting the issue and helping evolve the | the ecosystem by reporting the issue and helping to evolve the | |||
| specification. | specification. | |||
| When a discrepancy is found between a specification and its | When a discrepancy is found between a specification and its | |||
| implementation, a maintenance discussion inside the standards process | implementation, a maintenance discussion inside the standards process | |||
| allows reaching consensus on how best to evolve the specification. | allows reaching consensus on how best to evolve the specification. | |||
| Subsequently updating implementations to match evolved specifications | Subsequently, updating implementations to match evolved | |||
| ensures that implementations are consistently interoperable and | specifications ensures that implementations are consistently | |||
| removes needless barriers for new implementations. Maintenance also | interoperable and removes needless barriers for new implementations. | |||
| enables continued improvement of the protocol. New use cases are an | Maintenance also enables continued improvement of the protocol. New | |||
| indicator that the protocol could be successful [RFC5218]. | use cases are an indicator that the protocol could be successful | |||
| [RFC5218]. | ||||
| Protocol designers are strongly encouraged to continue to maintain | Protocol designers are strongly encouraged to continue to maintain | |||
| and evolve protocol specifications beyond their initial inception and | and evolve protocol specifications beyond their initial inception and | |||
| definition. This might require the development of revised | definition. This might require the development of revised | |||
| specifications, extensions, or other supporting material that evolves | specifications, extensions, or other supporting material that evolves | |||
| in concert with implementations. Involvement of those who implement | in concert with implementations. Involvement of those who implement | |||
| and deploy the protocol is a critical part of this process, as they | and deploy the protocol is a critical part of this process, as they | |||
| provide input on their experience with how the protocol is used. | provide input on their experience with how the protocol is used. | |||
| Most interoperability problems do not require revision of protocols | Most interoperability problems do not require revision of protocols | |||
| or protocol specifications, as software defects can happen even when | or protocol specifications, as software defects can happen even when | |||
| the specification is unambiguous. For instance, the most effective | the specification is unambiguous. For instance, the most effective | |||
| means of dealing with a defective implementation in a peer could be | means of dealing with a defective implementation in a peer could be | |||
| to contact the developer responsible. It is far more efficient in | to contact the developer responsible. It is far more efficient in | |||
| the long term to fix one isolated bug than it is to deal with the | the long term to fix one isolated bug than it is to deal with the | |||
| consequences of workarounds. | consequences of workarounds. | |||
| Early implementations of protocols have a stronger obligation to | Early implementations of protocols have a stronger obligation to | |||
| closely follow specifications as their behavior will affect all | closely follow specifications, as their behavior will affect all | |||
| subsequent implementations. In addition to specifications, later | subsequent implementations. In addition to specifications, later | |||
| implementations will be guided by what existing deployments accept. | implementations will be guided by what existing deployments accept. | |||
| Tolerance of errors in early deployments is most likely to result in | Tolerance of errors in early deployments is most likely to result in | |||
| problems. Protocol specifications might need more frequent revision | problems. Protocol specifications might need more frequent revision | |||
| during early deployments to capture feedback from early rounds of | during early deployments to capture feedback from early rounds of | |||
| deployment. | deployment. | |||
| Neglect can quickly produce the negative consequences this document | Neglect can quickly produce the negative consequences this document | |||
| describes. Restoring the protocol to a state where it can be | describes. Restoring the protocol to a state where it can be | |||
| maintained involves first discovering the properties of the protocol | maintained involves first discovering the properties of the protocol | |||
| as it is deployed, rather than the protocol as it was originally | as it is deployed rather than the protocol as it was originally | |||
| documented. This can be difficult and time-consuming, particularly | documented. This can be difficult and time-consuming, particularly | |||
| if the protocol has a diverse set of implementations. Such a process | if the protocol has a diverse set of implementations. Such a process | |||
| was undertaken for HTTP [HTTP] after a period of minimal maintenance. | was undertaken for HTTP [HTTP] after a period of minimal maintenance. | |||
| Restoring HTTP specifications to relevance took significant effort. | Restoring HTTP specifications to relevance took significant effort. | |||
| Maintenance is most effective if it is responsive, which is greatly | Maintenance is most effective if it is responsive, which is greatly | |||
| affected by how rapidly protocol changes can be deployed. For | affected by how rapidly protocol changes can be deployed. For | |||
| protocol deployments that operate on longer time scales, temporary | protocol deployments that operate on longer time scales, temporary | |||
| workarounds following the spirit of the robustness principle might be | workarounds following the spirit of the robustness principle might be | |||
| necessary. For this, improvements in software update mechanisms | necessary. For this, improvements in software update mechanisms | |||
| skipping to change at page 12, line 35 ¶ | skipping to change at line 517 ¶ | |||
| of attempting error recovery can ensure that faults receive | of attempting error recovery can ensure that faults receive | |||
| attention. This intolerance can be harnessed to reduce occurrences | attention. This intolerance can be harnessed to reduce occurrences | |||
| of aberrant implementations. | of aberrant implementations. | |||
| Intolerance toward violations of specification improves feedback for | Intolerance toward violations of specification improves feedback for | |||
| new implementations in particular. When a new implementation | new implementations in particular. When a new implementation | |||
| encounters a peer that is intolerant of an error, it receives strong | encounters a peer that is intolerant of an error, it receives strong | |||
| feedback that allows the problem to be discovered quickly. | feedback that allows the problem to be discovered quickly. | |||
| To be effective, intolerant implementations need to be sufficiently | To be effective, intolerant implementations need to be sufficiently | |||
| widely deployed that they are encountered by new implementations with | widely deployed so that they are encountered by new implementations | |||
| high probability. This could depend on multiple implementations | with high probability. This could depend on multiple implementations | |||
| deploying strict checks. | deploying strict checks. | |||
| Interoperability problems also need to be made known to those in a | Interoperability problems also need to be made known to those in a | |||
| position to address them. In particular, systems with human | position to address them. In particular, systems with human | |||
| operators, such as user-facing clients, are ideally suited to | operators, such as user-facing clients, are ideally suited to | |||
| surfacing errors. Other systems might need to use less direct means | surfacing errors. Other systems might need to use less direct means | |||
| of making errors known. | of making errors known. | |||
| This does not mean that intolerance of errors in early deployments of | This does not mean that intolerance of errors in early deployments of | |||
| protocols has the effect of preventing interoperability. On the | protocols has the effect of preventing interoperability. On the | |||
| contrary, when existing implementations follow clearly-specified | contrary, when existing implementations follow clearly specified | |||
| error handling, new implementations or features can be introduced | error handling, new implementations or features can be introduced | |||
| more readily as the effect on existing implementations can be easily | more readily, as the effect on existing implementations can be easily | |||
| predicted; see also Section 2.2. | predicted; see also Section 2.2. | |||
| Any intolerance also needs to be strongly supported by | Any intolerance also needs to be strongly supported by | |||
| specifications, otherwise they encourage fracturing of the protocol | specifications; otherwise, they encourage fracturing of the protocol | |||
| community or proliferation of workarounds; see Section 5.2. | community or proliferation of workarounds. See Section 5.2. | |||
| Intolerance can be used to motivate compliance with any protocol | Intolerance can be used to motivate compliance with any protocol | |||
| requirement. For instance, the INADEQUATE_SECURITY error code and | requirement. For instance, the INADEQUATE_SECURITY error code and | |||
| associated requirements in HTTP/2 [HTTP/2] resulted in improvements | associated requirements in HTTP/2 [HTTP/2] resulted in improvements | |||
| in the security of the deployed base. | in the security of the deployed base. | |||
| A notification for a fatal error is best sent as explicit error | A notification for a fatal error is best sent as explicit error | |||
| messages to the entity that made the error. Error messages benefit | messages to the entity that made the error. Error messages benefit | |||
| from being able to carry arbitrary information that might help the | from being able to carry arbitrary information that might help the | |||
| implementer of the sender of the faulty input understand and fix the | implementer of the sender of the faulty input understand and fix the | |||
| issue in their software. QUIC error frames [QUIC] are an example of | issue in their software. QUIC error frames [QUIC] are an example of | |||
| a fatal error mechanism that helped implementers improve software | a fatal error mechanism that helped implementers improve software | |||
| quality throughout the protocol lifecycle. Similarly, Extended DNS | quality throughout the protocol lifecycle. Similarly, the use of | |||
| Errors [EDE] has recently been effective in providing better | Extended DNS Errors [EDE] has been effective in providing better | |||
| descriptions of DNS resolution errors to clients. | descriptions of DNS resolution errors to clients. | |||
| Stateless protocol endpoints might generate denial-of-service attacks | Stateless protocol endpoints might generate denial-of-service attacks | |||
| if they send an error messages in response to every message that is | if they send an error message in response to every message that is | |||
| received from an unauthenticated sender. These implementations might | received from an unauthenticated sender. These implementations might | |||
| need to silently discard these messages. | need to silently discard these messages. | |||
| 5.2. Exclusion | 5.2. Exclusion | |||
| Any protocol participant that is affected by changes arising from | Any protocol participant that is affected by changes arising from | |||
| maintenance might be excluded if they are unwilling or unable to | maintenance might be excluded if they are unwilling or unable to | |||
| implement or deploy changes that are made to the protocol. | implement or deploy changes that are made to the protocol. | |||
| Deliberate exclusion of problematic implementations is an important | Deliberate exclusion of problematic implementations is an important | |||
| tool that can ensure that the interoperability of a protocol remains | tool that can ensure that the interoperability of a protocol remains | |||
| viable. While backward compatible changes are always preferable to | viable. While backward-compatible changes are always preferable to | |||
| incompatible ones, it is not always possible to produce a design that | incompatible ones, it is not always possible to produce a design that | |||
| protects the ability of all current and future protocol participants | protects the ability of all current and future protocol participants | |||
| to interoperate. | to interoperate. | |||
| Accidentally excluding unexpected participants is not usually a good | Accidentally excluding unexpected participants is not usually a good | |||
| outcome. When developing and deploying changes, it is best to first | outcome. When developing and deploying changes, it is best to first | |||
| understand the extent to which the change affects existing | understand the extent to which the change affects existing | |||
| deployments. This ensures that any exclusion that occurs is | deployments. This ensures that any exclusion that occurs is | |||
| intentional. | intentional. | |||
| skipping to change at page 14, line 11 ¶ | skipping to change at line 589 ¶ | |||
| deployments to change, this might be considered necessary. To avoid | deployments to change, this might be considered necessary. To avoid | |||
| unnecessarily excluding deployments that might take time to change, | unnecessarily excluding deployments that might take time to change, | |||
| developing a migration plan can be prudent. | developing a migration plan can be prudent. | |||
| Exclusion is a direct goal when choosing to be intolerant of errors | Exclusion is a direct goal when choosing to be intolerant of errors | |||
| (see Section 5.1). Exclusionary actions are employed with the | (see Section 5.1). Exclusionary actions are employed with the | |||
| deliberate intent of protecting future interoperability. | deliberate intent of protecting future interoperability. | |||
| Excluding implementations or deployments can lead to a fracturing of | Excluding implementations or deployments can lead to a fracturing of | |||
| the protocol system that could be more harmful than any divergence | the protocol system that could be more harmful than any divergence | |||
| that might arise from tolerating the unexpected. The IAB document on | that might arise from tolerating the unexpected. The IAB document | |||
| Uncoordinated Protocol Development Considered Harmful [RFC5704] | "Uncoordinated Protocol Development Considered Harmful" [RFC5704] | |||
| describes how conflict or competition in the maintenance of protocols | describes how conflict or competition in the maintenance of protocols | |||
| can lead to similar problems. | can lead to similar problems. | |||
| 6. Security Considerations | 6. Security Considerations | |||
| Careless implementations, lax interpretations of specifications, and | Careless implementations, lax interpretations of specifications, and | |||
| uncoordinated extrapolation of requirements to cover gaps in | uncoordinated extrapolation of requirements to cover gaps in | |||
| specification can result in security problems. Hiding the | specification can result in security problems. Hiding the | |||
| consequences of protocol variations encourages the hiding of issues, | consequences of protocol variations encourages the hiding of issues, | |||
| which can conceal bugs and make them difficult to discover. | which can conceal bugs and make them difficult to discover. | |||
| The consequences of the problems described in this document are | The consequences of the problems described in this document are | |||
| especially acute for any protocol where security depends on agreement | especially acute for any protocol where security depends on agreement | |||
| about semantics of protocol elements. For instance, use of unsafe | about semantics of protocol elements. For instance, weak primitives | |||
| security mechanisms, such as weak primitives [MD5] or obsolete | [MD5] and obsolete mechanisms [SSL3] are good examples of the use of | |||
| mechanisms [SSL3], are good examples of where forcing exclusion | unsafe security practices where forcing exclusion (Section 5.2) can | |||
| (Section 5.2) can be desirable. | be desirable. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| This document has no IANA actions. | This document has no IANA actions. | |||
| 8. Informative References | 8. Informative References | |||
| [BGP] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | [BGP] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A | |||
| Border Gateway Protocol 4 (BGP-4)", RFC 4271, | Border Gateway Protocol 4 (BGP-4)", RFC 4271, | |||
| DOI 10.17487/RFC4271, January 2006, | DOI 10.17487/RFC4271, January 2006, | |||
| <https://www.rfc-editor.org/rfc/rfc4271>. | <https://www.rfc-editor.org/info/rfc4271>. | |||
| [BGP-REH] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. | [BGP-REH] Chen, E., Ed., Scudder, J., Ed., Mohapatra, P., and K. | |||
| Patel, "Revised Error Handling for BGP UPDATE Messages", | Patel, "Revised Error Handling for BGP UPDATE Messages", | |||
| RFC 7606, DOI 10.17487/RFC7606, August 2015, | RFC 7606, DOI 10.17487/RFC7606, August 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7606>. | <https://www.rfc-editor.org/info/rfc7606>. | |||
| [EDE] Kumari, W., Hunt, E., Arends, R., Hardaker, W., and D. | [EDE] Kumari, W., Hunt, E., Arends, R., Hardaker, W., and D. | |||
| Lawrence, "Extended DNS Errors", RFC 8914, | Lawrence, "Extended DNS Errors", RFC 8914, | |||
| DOI 10.17487/RFC8914, October 2020, | DOI 10.17487/RFC8914, October 2020, | |||
| <https://www.rfc-editor.org/rfc/rfc8914>. | <https://www.rfc-editor.org/info/rfc8914>. | |||
| [EDNS0] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", | [EDNS0] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms | |||
| RFC 2671, DOI 10.17487/RFC2671, August 1999, | for DNS (EDNS(0))", STD 75, RFC 6891, | |||
| <https://www.rfc-editor.org/rfc/rfc2671>. | DOI 10.17487/RFC6891, April 2013, | |||
| <https://www.rfc-editor.org/info/rfc6891>. | ||||
| [EXT] Carpenter, B., Aboba, B., Ed., and S. Cheshire, "Design | [EXT] Carpenter, B., Aboba, B., Ed., and S. Cheshire, "Design | |||
| Considerations for Protocol Extensions", RFC 6709, | Considerations for Protocol Extensions", RFC 6709, | |||
| DOI 10.17487/RFC6709, September 2012, | DOI 10.17487/RFC6709, September 2012, | |||
| <https://www.rfc-editor.org/rfc/rfc6709>. | <https://www.rfc-editor.org/info/rfc6709>. | |||
| [HTML] "HTML", WHATWG Living Standard, 8 March 2019, | [HTML] WHATWG, "HTML - Living Standard", | |||
| <https://html.spec.whatwg.org/>. | <https://html.spec.whatwg.org/>. | |||
| [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Ed., "HTTP Semantics", STD 97, RFC 9110, | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| DOI 10.17487/RFC9110, June 2022, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9110>. | <https://www.rfc-editor.org/info/rfc9110>. | |||
| [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
| DOI 10.17487/RFC9113, June 2022, | DOI 10.17487/RFC9113, June 2022, | |||
| <https://www.rfc-editor.org/rfc/rfc9113>. | <https://www.rfc-editor.org/info/rfc9113>. | |||
| [MD5] Turner, S. and L. Chen, "Updated Security Considerations | [MD5] Turner, S. and L. Chen, "Updated Security Considerations | |||
| for the MD5 Message-Digest and the HMAC-MD5 Algorithms", | for the MD5 Message-Digest and the HMAC-MD5 Algorithms", | |||
| RFC 6151, DOI 10.17487/RFC6151, March 2011, | RFC 6151, DOI 10.17487/RFC6151, March 2011, | |||
| <https://www.rfc-editor.org/rfc/rfc6151>. | <https://www.rfc-editor.org/info/rfc6151>. | |||
| [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC0760] Postel, J., "DoD standard Internet Protocol", RFC 760, | [RFC0760] Postel, J., "DoD standard Internet Protocol", RFC 760, | |||
| DOI 10.17487/RFC0760, January 1980, | DOI 10.17487/RFC0760, January 1980, | |||
| <https://www.rfc-editor.org/rfc/rfc760>. | <https://www.rfc-editor.org/info/rfc760>. | |||
| [RFC1958] Carpenter, B., Ed., "Architectural Principles of the | [RFC1958] Carpenter, B., Ed., "Architectural Principles of the | |||
| Internet", RFC 1958, DOI 10.17487/RFC1958, June 1996, | Internet", RFC 1958, DOI 10.17487/RFC1958, June 1996, | |||
| <https://www.rfc-editor.org/rfc/rfc1958>. | <https://www.rfc-editor.org/info/rfc1958>. | |||
| [RFC3117] Rose, M., "On the Design of Application Protocols", | [RFC3117] Rose, M., "On the Design of Application Protocols", | |||
| RFC 3117, DOI 10.17487/RFC3117, November 2001, | RFC 3117, DOI 10.17487/RFC3117, November 2001, | |||
| <https://www.rfc-editor.org/rfc/rfc3117>. | <https://www.rfc-editor.org/info/rfc3117>. | |||
| [RFC5218] Thaler, D. and B. Aboba, "What Makes for a Successful | [RFC5218] Thaler, D. and B. Aboba, "What Makes for a Successful | |||
| Protocol?", RFC 5218, DOI 10.17487/RFC5218, July 2008, | Protocol?", RFC 5218, DOI 10.17487/RFC5218, July 2008, | |||
| <https://www.rfc-editor.org/rfc/rfc5218>. | <https://www.rfc-editor.org/info/rfc5218>. | |||
| [RFC5704] Bryant, S., Ed., Morrow, M., Ed., and IAB, "Uncoordinated | [RFC5704] Bryant, S., Ed., Morrow, M., Ed., and IAB, "Uncoordinated | |||
| Protocol Development Considered Harmful", RFC 5704, | Protocol Development Considered Harmful", RFC 5704, | |||
| DOI 10.17487/RFC5704, November 2009, | DOI 10.17487/RFC5704, November 2009, | |||
| <https://www.rfc-editor.org/rfc/rfc5704>. | <https://www.rfc-editor.org/info/rfc5704>. | |||
| [RFC9170] Thomson, M. and T. Pauly, "Long-Term Viability of Protocol | [RFC9170] Thomson, M. and T. Pauly, "Long-Term Viability of Protocol | |||
| Extension Mechanisms", RFC 9170, DOI 10.17487/RFC9170, | Extension Mechanisms", RFC 9170, DOI 10.17487/RFC9170, | |||
| December 2021, <https://www.rfc-editor.org/rfc/rfc9170>. | December 2021, <https://www.rfc-editor.org/info/rfc9170>. | |||
| [SSL3] Barnes, R., Thomson, M., Pironti, A., and A. Langley, | [SSL3] Barnes, R., Thomson, M., Pironti, A., and A. Langley, | |||
| "Deprecating Secure Sockets Layer Version 3.0", RFC 7568, | "Deprecating Secure Sockets Layer Version 3.0", RFC 7568, | |||
| DOI 10.17487/RFC7568, June 2015, | DOI 10.17487/RFC7568, June 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7568>. | <https://www.rfc-editor.org/info/rfc7568>. | |||
| [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [TLS] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| IAB Members at the Time of Approval | IAB Members at the Time of Approval | |||
| Internet Architecture Board members at the time this document was | Internet Architecture Board members at the time this document was | |||
| approved for publication were: | approved for publication were: | |||
| * Jari Arkko | Jari Arkko | |||
| Deborah Brungard | ||||
| * Deborah Brungard | Lars Eggert | |||
| Wes Hardaker | ||||
| * Lars Eggert | Cullen Jennings | |||
| Mallory Knodel | ||||
| * Wes Hardaker | Mirja Kühlewind | |||
| Zhenbin Li | ||||
| * Cullen Jennings | Tommy Pauly | |||
| David Schinazi | ||||
| * Mallory Knodel | Russ White | |||
| Qin Wu | ||||
| * Mirja Kuehlewind | Jiankang Yao | |||
| * Zhenbin Li | ||||
| * Tommy Pauly | ||||
| * David Schinazi | ||||
| * Russ White | ||||
| * Qin Wu | ||||
| * Jiankang Yao | ||||
| The document had broad but not unanimous approval within the IAB, | The document had broad but not unanimous approval within the IAB, | |||
| reflecting that while the guidance is valid, concerns were expressed | reflecting that while the guidance is valid, concerns were expressed | |||
| in the IETF community about how broadly it applies in all situations. | in the IETF community about how broadly it applies in all situations. | |||
| Acknowledgments | Acknowledgments | |||
| Constructive feedback on this document has been provided by a | Constructive feedback on this document has been provided by a | |||
| surprising number of people including, but not limited to: Bernard | surprising number of people including, but not limited to, the | |||
| Aboba, Brian Carpenter, Stuart Cheshire, Wes Hardaker, Joel Halpern, | following: Bernard Aboba, Brian Carpenter, Stuart Cheshire, Joel | |||
| Russ Housley, Cullen Jennings, Mallory Knodel, Mirja Kühlewind, Mark | Halpern, Wes Hardaker, Russ Housley, Cullen Jennings, Mallory Knodel, | |||
| Nottingham, Eric Rescorla, Henning Schulzrinne, Job Snijders, Robert | Mirja Kühlewind, Mark Nottingham, Eric Rescorla, Henning Schulzrinne, | |||
| Sparks, Dave Thaler, Brian Trammell, and Anne van Kesteren. Some of | Job Snijders, Robert Sparks, Dave Thaler, Brian Trammell, and Anne | |||
| the properties of protocols described in Section 4.1 were observed by | van Kesteren. Some of the properties of protocols described in | |||
| Marshall Rose in Section 4.5 of [RFC3117]. | Section 4.1 were observed by Marshall Rose in Section 4.5 of | |||
| [RFC3117]. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Martin Thomson | Martin Thomson | |||
| Email: mt@lowentropy.net | Email: mt@lowentropy.net | |||
| David Schinazi | David Schinazi | |||
| Email: dschinazi.ietf@gmail.com | Email: dschinazi.ietf@gmail.com | |||
| End of changes. 69 change blocks. | ||||
| 193 lines changed or deleted | 166 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||