Skip to content

What makes a version negotiation mechanism successful? #8

@tfpauly

Description

@tfpauly

From https://tools.ietf.org/html/draft-iab-use-it-or-lose-it-00#section-2.1 :

[Simple version negotiation in the initial protocol] has proven to be insufficient in practice. Many protocols have
evidence of imperfect implementation of critical mechanisms of this
sort. Mechanisms that aren't used are the ones that fail most often.
The same paragraph from RFC 6709 acknowledges the existence of this
problem, but does not offer any remedy:

Looking through this, I wonder if we can make some comments on the versions negotiation mechanisms that have been successful. I think one property that stands out is that many of the most "successful" mechanisms really are relying on other, lower layers to declare versions, as opposed to having a protocol negotiate a version in-band.

For example:

  • HTTP/1.1 vs HTTP/2 uses ALPN from TLS; as long as your TLS implementation works, you don't have to have a parser that tries to read 1.1 or 2.
  • HTTP/2 to HTTP/3 use entirely different transport protocols, and also have ALPN
  • IPv4 and IPv6 have different types in Ethernet headers rather than actually using the version number in practice

The cited instances like TLS version negotiation within the protocol itself had to abandon the original mechanism.

Looking at QUIC, it has version negotiation built-in, but that's yet to be fully played out in the wild. However, the strong definition it has for Invariants means that the Invariants themselves are like a mini-protocol layer that is just about flow identification and version negotiation, upon which the actual QUIC protocol is riding.

Metadata

Metadata

Assignees

No one assigned

    Labels

    evolvabilityProtocol extensibility and greasing

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions