- Protocol Ossification: This occurs when rigid, outdated protocol implementations inhibit the introduction and proper functioning of new versions or features. It is a significant issue in networking, where it can prevent protocols from evolving effectively due to widespread faulty or non-compliant implementations.
Examples and Challenges in TLS
- TLS Version Negotiation: The TLS protocol allows clients and servers to negotiate the version of TLS to use, beginning with a
ClientHellomessage that indicates the client’s version. - Problems with TLS 1.3 Rollout:
- Early implementations of TLS 1.3 led to failures in about 8% of connections because some servers and firewalls crashed or blocked connections if any version other than TLS 1.2 was specified.
- This widespread issue with older servers not supporting or incorrectly implementing version negotiation led to significant compatibility problems.
Implications of Ossification
- Impact on Network Protocols: Ossification is not unique to TLS but affects many other protocols with wide deployment. It poses a major design challenge, as changing or updating protocols can disrupt or break interactions with older implementations.
Affected the design of:
- TLS v1.3
- Multipath TCP
- TCP Fast Open
- TCP Selective Acknowledgements
- …
Strategies to Avoid Ossification
- GREASE (Generate Random Extensions and Sustain Extensibility):
- This strategy involves using the protocol’s extension mechanisms actively, even if through sending meaningless or dummy extensions. The goal is to ensure these mechanisms are regularly tested and remain functional.
- Version Flexibility: Regularly changing version numbers during protocol use to ensure that version negotiation features are consistently tested and remain robust.
Conclusion
- Protocol ossification significantly hinders the evolution of network protocols. It is crucial for developers and network engineers to implement and use flexible, compliant protocol designs to avoid these issues and ensure that network protocols can evolve without being constrained by legacy implementations.