Skip to content

Commit de26cb3

Browse files
committed
Rename Other Versions to Available Versions
1 parent 889f6cd commit de26cb3

File tree

1 file changed

+51
-49
lines changed

1 file changed

+51
-49
lines changed

draft-ietf-quic-version-negotiation.md

+51-49
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,8 @@ need to validate the 5-tuple of all handshake packets, including the converted
260260
first flight.
261261

262262
Note also that the client can disable compatible version negotiation by only
263-
including the Chosen Version in the Other Versions field of the Version
264-
Information transport parameter; see {{vers-info}}.
263+
including the Chosen Version in the Available Versions field of the Version
264+
Information; see {{vers-info}}.
265265

266266
If the server does not find a compatible version (including the client's chosen
267267
version), it will perform incompatible version negotiation instead, see
@@ -274,11 +274,11 @@ and C is compatible with D, the following scenario could occur:
274274
~~~
275275
Client Server
276276

277-
Chosen = A, Other Versions = (A, B) ----------------->
277+
Chosen = A, Available Versions = (A, B) ------------->
278278
<------------------------ Version Negotiation = (D, C)
279279

280-
Chosen = C, Other Versions = (C, D) ----------------->
281-
<----------------- Chosen = D, Other Versions = (D, C)
280+
Chosen = C, Available Versions = (C, D) ------------->
281+
<------------- Chosen = D, Available Versions = (D, C)
282282
~~~
283283
{: #fig-dual-example title="Combined Negotiation Example"}
284284

@@ -323,8 +323,8 @@ client's first flight.
323323
# Version Information {#vers-info}
324324

325325
During the handshake, endpoints will exchange Version Information, which
326-
consists of a chosen version and a list of other versions. Any version of QUIC
327-
that supports this mechanism MUST provide a mechanism to exchange Version
326+
consists of a chosen version and a list of available versions. Any version of
327+
QUIC that supports this mechanism MUST provide a mechanism to exchange Version
328328
Information in both directions during the handshake, such that this data is
329329
authenticated.
330330

@@ -336,7 +336,7 @@ contents of Version Information are shown below (using the notation from the
336336
~~~
337337
Version Information {
338338
Chosen Version (32),
339-
Other Versions (32) ...,
339+
Available Versions (32) ...,
340340
}
341341
~~~
342342
{: #fig-vi-format title="Version Information Format"}
@@ -349,29 +349,29 @@ cases, this field will be equal to the value of the Version field in the long
349349
header that carries this data; however future versions or extensions can choose
350350
to set different values in the long header Version field.
351351

352-
The contents of the Other Versions field depends on whether it is sent by the
353-
client or by the server.
352+
The contents of the Available Versions field depends on whether it is sent by
353+
the client or by the server.
354354

355-
Client-Sent Other Versions:
356-
: When sent by a client, the Other Versions field lists all the versions that
357-
this first flight is compatible with, ordered by descending preference. Note
358-
that the version in the Chosen Version field MUST be included in this list to
359-
allow the client to communicate the chosen version's preference. Note that this
360-
preference is only advisory, servers MAY choose to use their own preference
355+
Client-Sent Available Versions:
356+
: When sent by a client, the Available Versions field lists all the versions
357+
that this first flight is compatible with, ordered by descending preference.
358+
Note that the version in the Chosen Version field MUST be included in this list
359+
to allow the client to communicate the chosen version's preference. Note that
360+
this preference is only advisory, servers MAY choose to use their own preference
361361
instead.
362362

363-
Server-Sent Other Versions:
364-
: When sent by a server, the Other Versions field lists all the Fully-Deployed
365-
Versions of this server deployment, see {{server-fleet}}. Note that the version
366-
in the Chosen Version field is not necessarily included in this list, because
367-
the server operator could be in the process of removing support for this
368-
version. For the same reason, the Other Versions field MAY be empty.
369-
{: spacing="compact"}
363+
Server-Sent Available Versions:
364+
: When sent by a server, the Available Versions field lists all the
365+
Fully-Deployed Versions of this server deployment, see {{server-fleet}}. Note
366+
that the version in the Chosen Version field is not necessarily included in this
367+
list, because the server operator could be in the process of removing support
368+
for this version. For the same reason, the Available Versions field MAY be empty.
369+
{:spacing="compact"}
370370

371371
Clients and servers MAY both include versions following the pattern 0x?a?a?a?a
372-
in their Other Versions list. Those versions are reserved to exercise version
373-
negotiation (see the Versions section of {{QUIC}}), and will never be selected
374-
when choosing a version to use.
372+
in their Available Versions list. Those versions are reserved to exercise
373+
version negotiation (see the Versions section of {{QUIC}}), and will never be
374+
selected when choosing a version to use.
375375

376376

377377
# Version Downgrade Prevention {#downgrade}
@@ -391,8 +391,8 @@ If parsing the Version Information failed (for example, if it is too short or if
391391
its length is not divisible by four), then the endpoint MUST close the
392392
connection; if the connection was using QUIC version 1, that connection closure
393393
MUST use a transport error of type TRANSPORT_PARAMETER_ERROR. If an endpoint
394-
receives a Chosen Version equal to zero, or any Other Version equal to zero, it
395-
MUST treat it as a parsing failure.
394+
receives a Chosen Version equal to zero, or any Available Version equal to zero,
395+
it MUST treat it as a parsing failure.
396396

397397
Every QUIC version that supports version negotiation MUST define a method for
398398
closing the connection with a version negotiation error. For QUIC version 1,
@@ -405,17 +405,18 @@ the Version Information was missing, the client MUST close the connection with a
405405
version negotiation error.
406406

407407
If the client received and acted on a Version Negotiation packet, the client
408-
MUST validate the server's Other Versions field. The Other Versions field is
409-
validated by confirming that the client would have attempted the same version
410-
with knowledge of the versions the server supports. That is, the client would
411-
have selected the same version if it received a Version Negotiation packet that
412-
listed the versions in the server's Other Versions field, plus the negotiated
413-
version. If the client would have selected a different version, the client MUST
414-
close the connection with a version negotiation error. In particular, if the
415-
client reacted to a Version Negotiation packet and the server's Other Versions
416-
field is empty, the client MUST close the connection with a version negotiation
417-
error. These connection closures prevent an attacker from being able to use
418-
forged Version Negotiation packets to force a version downgrade.
408+
MUST validate the server's Available Versions field. The Available Versions
409+
field is validated by confirming that the client would have attempted the same
410+
version with knowledge of the versions the server supports. That is, the client
411+
would have selected the same version if it received a Version Negotiation packet
412+
that listed the versions in the server's Available Versions field, plus the
413+
negotiated version. If the client would have selected a different version, the
414+
client MUST close the connection with a version negotiation error. In
415+
particular, if the client reacted to a Version Negotiation packet and the
416+
server's Available Versions field is empty, the client MUST close the connection
417+
with a version negotiation error. These connection closures prevent an attacker
418+
from being able to use forged Version Negotiation packets to force a version
419+
downgrade.
419420

420421
As an example, let's assume a client supports hypothetical QUIC versions 10, 12,
421422
and 14 with a preference for higher versions. The client initiates a connection
@@ -424,21 +425,22 @@ attempt with version 12. Let's explore two independent example scenarios:
424425
* In the first scenario, the server supports versions 10, 13, and 14 but only 13
425426
and 14 are Fully-Deployed. The server sends a Version Negotiation packet with
426427
versions 10, 13, and 14. This triggers an incompatible version negotiation and
427-
the client initiates a new connection with version 14. Then the server's Other
428-
Versions field contains 13 and 14. In that scenario, the client would have
429-
also picked 14 if it had received a Version Negotiation packet with versions
430-
13 and 14, therefore the handshake succeeds using negotiated version 14.
428+
the client initiates a new connection with version 14. Then the server's
429+
Available Versions field contains 13 and 14. In that scenario, the client
430+
would have also picked 14 if it had received a Version Negotiation packet with
431+
versions 13 and 14, therefore the handshake succeeds using negotiated version
432+
14.
431433

432434
* In the second scenario, the server supports versions 10, 13, and 14 and they
433435
are all Fully-Deployed. However, the attacker forges a Version Negotiation
434436
packet with versions 10 and 13. This triggers an incompatible version
435437
negotiation and the client initiates a new connection with version 10. Then
436-
the server's Other Versions field contains 10, 13 and 14. In that scenario,
437-
the client would have picked 14 instead of 10 if it had received a Version
438-
Negotiation packet with versions 10, 13 and 14, therefore the client aborts
439-
the handshake with a version negotiation error.
438+
the server's Available Versions field contains 10, 13 and 14. In that
439+
scenario, the client would have picked 14 instead of 10 if it had received a
440+
Version Negotiation packet with versions 10, 13 and 14, therefore the client
441+
aborts the handshake with a version negotiation error.
440442

441-
This validation of Other Versions is not sufficient to prevent downgrade.
443+
This validation of Available Versions is not sufficient to prevent downgrade.
442444
Downgrade prevention also depends on the client ignoring Version Negotiation
443445
packets that contain the original version; see {{incompat-vn}}.
444446

@@ -620,7 +622,7 @@ is starting a QUIC version 1 connection in response to a received Version
620622
Negotiation packet, and the version_information transport parameter is missing
621623
from the server's transport parameters, then the client SHALL proceed as if the
622624
server's transport parameters contained a version_information transport
623-
parameter with a Chosen Version set to 0x00000001 and an Other Version list
625+
parameter with a Chosen Version set to 0x00000001 and an Available Version list
624626
containing exactly one version set to 0x00000001. This allows version
625627
negotiation to work with servers that only support QUIC version 1. Note that
626628
implementations which wish to use version negotiation to negotiate versions

0 commit comments

Comments
 (0)