Skip to content

Commit

Permalink
Reference VN instead of duplicating it.
Browse files Browse the repository at this point in the history
From @martinduke review. Fixes #468
  • Loading branch information
britram committed May 18, 2022
1 parent 5f1ee32 commit 4d70db6
Showing 1 changed file with 4 additions and 45 deletions.
49 changes: 4 additions & 45 deletions draft-ietf-quic-applicability.md
Original file line number Diff line number Diff line change
Expand Up @@ -872,51 +872,10 @@ realized by TLS 1.3 and described in a separate specification
{{!QUIC-TLS=RFC9001}}. This split is performed to enable
light-weight versioning with different cryptographic handshakes.

# Enabling New Versions

QUIC version 1 does not specify a version negotiation mechanism in the base spec
but {{?I-D.draft-ietf-quic-version-negotiation}} proposes an extension. This
process assumes that the set of versions that a server supports is fixed. This
complicates the process for deploying new QUIC versions or disabling old
versions when servers operate in clusters.

A server that rolls out a new version of QUIC can do so in three stages. Each
stage is completed across all server instances before moving to the next stage.

In the first stage of deployment, all server instances start accepting new
connections with the new version. The new version can be enabled progressively
across a deployment, which allows for selective testing. This is especially
useful when the new version is compatible with an old version, because the new
version is more likely to be used.

While enabling the new version, servers do not advertise the new version in any
Version Negotiation packets they send. This prevents clients that receive a
Version Negotiation packet from attempting to connect to server instances that
might not have the new version enabled.

During the initial deployment, some clients will have received Version
Negotiation packets that indicate that the server does not support the new
version. Other clients might have successfully connected with the new version
and so will believe that the server supports the new version. Therefore,
servers need to allow for this ambiguity when validating the negotiated version.

The second stage of deployment commences once all server instances are able to
accept new connections with the new version. At this point, all servers can
start sending the new version in Version Negotiation packets.

During the second stage, the server still allows for the possibility that some
clients believe the new version to be available and some do not. This state
will persist only for as long as any Version Negotiation packets take to be
transmitted and responded to. So the third stage can follow after a relatively
short delay.

The third stage completes the process by enabling authentication of the
negotiated version with the assumption that the new version is fully available.

The process for disabling an old version or rolling back the introduction of a
new version uses the same process in reverse. Servers disable validation of the
old version, stop sending the old version in Version Negotiation packets, then
the old version is no longer accepted.
# Enabling Deployment of New Versions

{{?I-D.draft-ietf-quic-version-negotiation}} proposes an extension to QUIC
that provides compatible version negotiation; see that document for details.

# Unreliable Datagram Service over QUIC

Expand Down

0 comments on commit 4d70db6

Please sign in to comment.