@@ -162,34 +162,39 @@ values they send.
162
162
163
163
# Considerations for Increasing Protocol Variability {#variability}
164
164
165
- While greasing is one method to maintain protocol extensibility by falsifying
166
- active use of a protocol's extensions points, it does not ensure that an
167
- extension point has positive use. A protocol may define a wide-ranging extension
168
- capability but if senders do not use it, then interoperability problems might
169
- exist and remain hidden, leading to ossification until a real use case emerges .
170
-
171
- Variation of protocol extension points with positive use in mind can help
172
- exercise protocols and ensure long-term maintenance and interoperability. This
173
- can be thought of, to some extent, as protocol fuzzing. It can be a difficult
174
- area to exercise because varying the protocol elements may change the actual
175
- outcome of interactions, leading to real errors. However, some elements can be
176
- safely changed, as the following examples describe .
165
+ Greasing can maintain protocol extensibility by falsifying active use of it's
166
+ extensions points. However , it does not ensure positive use. A protocol may
167
+ define a wide-ranging extension capability that remains unused in the absence of
168
+ real use cases. This can lead to ossification that does not expect extensions,
169
+ leading to interoperability problems later on .
170
+
171
+ Long-term maintenance and interoperability can be ensured by exercising
172
+ extension points positively. To some extent this can be thought of as protocol
173
+ fuzzing. This might be difficult to exercise because varying the protocol
174
+ elements might change the outcome of interactions, leading to real errors.
175
+ However, some protocols allow elements to be be safely changed, as shown in the
176
+ following examples.
177
177
178
178
# # Example: QUIC frames
179
179
180
180
QUIC packets contain frames. Receivers might build expectations on the
181
181
longitudinal aspects of packets or frames - size, ordering, frequency, etc. A
182
182
sender can quite often manipulate these parameters and stay compliant to the
183
- requirements of the QUIC protocol. For example, QUIC streams are an ordered
184
- reliable byte stream that is serialized as a sequence of STREAM frames with a
185
- length and offset. Receivers are expected to reassemble frames into an ordered
186
- reliable byte stream such that an application reading from a stream can be
187
- abstracted from matters of the transport later. A sender that purposefully
188
- reorders STREAM frames will help exercise the reassembly features of the
189
- receiver. It is not expected that this would cause a functional failure in the
190
- application layer. However, it may introduce delays or stream head-of-line
191
- blocking that affect the performance aspects of a transmission, which may not be
192
- acceptable for a given use case.
183
+ requirements of the QUIC protocol.
184
+
185
+ QUIC streams are an ordered reliable byte stream that is serialized as a
186
+ sequence of STREAM frames with a length and offset. Receivers are expected to
187
+ reassemble frames, which could arrive in any order, into an ordered reliable
188
+ byte stream that is readable by applications.
189
+
190
+ A form of positive testing is for a sender to unpredictably order the STREAM
191
+ frames that it transmits. For example, varying the sequence order of offset
192
+ values. This allows to exercise the QUIC reassembly features of the receiver
193
+ with the expectation that no failure would occur. However, doing this may
194
+ introduce delay or stream head-of-line blocking that affects the performance
195
+ aspects of a transmission, which may not be acceptable for a given use case. As
196
+ such, positive testing might be most appropriate to use in a subset of
197
+ connections, or phases within a connection.
193
198
194
199
# Considerations for Protocol Versions {#versions}
195
200
0 commit comments