@@ -353,8 +353,10 @@ Long-term maintenance and interoperability can be ensured by exercising
353353extension points positively. To some extent this can be thought of as protocol
354354fuzzing. This might be difficult to exercise because varying the protocol
355355elements might change the outcome of interactions, leading to real errors.
356- However, some protocols allow elements to be be safely changed, as shown in the
357- following example.
356+ However, some protocols allow elements to be safely changed, as shown in the
357+ following examples. The principles in these two examples are not limited to
358+ the protocols mentioned, but also arise in many other protocols as well
359+ (e.g., the Session Initiation Protocol (SIP) {{?SIP=RFC3261}}).
358360
359361# # Example: QUIC frames
360362
@@ -377,6 +379,31 @@ aspects of a transmission, which may not be acceptable for a given use case. As
377379such, positive testing might be most appropriate to use in a subset of
378380connections, or phases within a connection.
379381
382+ # # Example: IPv6
383+
384+ The IPv6 protocol {{?IPV6=RFC8200}} defines the ability to use extension headers,
385+ and further defines the ability to include options in two of those headers. It
386+ also defines a recommended (but not required) order of such headers.
387+
388+ If the same headers tend to appear in the same order, and with the same size
389+ and offset most of the time, middleboxes can begin to incorrectly rely on assumptions
390+ that those will always be the case, and lead to ossification and inability to
391+ use new headers or options or differing orders in the future.
392+
393+ IPv6 did not define grease values, but a sender may vary some aspects of the
394+ protocol, such as varying the order of options within an extension header,
395+ or even including a Destination Options Header with only Pad1 or PadN options
396+ between other headers.
397+
398+ While doing such variations can discourage ossification, they might also have
399+ a negative performance impact if done indiscriminately. For example, making packets
400+ larger as a result might result in fragmentation.
401+
402+ Finally, there may be security or gateway middleboxes already deployed that
403+ incorrectly rely on assumptions about header order, size, or location in a packet.
404+ Introducing variability might then cause operational problems in such networks and
405+ result in a disincentive to use the protocol or device or application using it.
406+
380407# Considerations for Protocol Versions {#versions}
381408
382409{{TRANSITION}} discusses considerations around planning for transitioning
0 commit comments