-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
What extension mechanisms are successful? #3
Comments
Maybe the discussion should start with listing sources of ossification. |
There is already https://tools.ietf.org/html/rfc6709 however it does not talk about ossification. But I would say that the point https://tools.ietf.org/html/draft-iab-use-it-or-lose-it is also trying to address. |
@britram asked another question: are there examples of where active use have failed? |
@wbl mentioned that NTPv4 had extension codepoints that were defined over the course of 10 years. These were not widely deployed, so the extensions were not in active use over that time. Now that the extensions are being used actively, it's completely unreliable. |
Extensibility is not just about being able to carry additional information in a PDU that wasn't originally planned for. It is also about planning the reactions of implementations that do or don't implement that extension, including preventing false interoperability if needed ("versioning") or ensuring interoperability so not to create an artificial obstacle to using the extension. |
Yes. You can't just say "MUST send zero", you have to also say "MUST ignore a one if you don't know what that means". It's about being able to predict the effect of new behaviour. This can't be completely unexpected or you get unpredictable and unreliable reactions. You can, with a lot of effort, eradicate unpredictability from the undefined regions of a protocol. That's how TLS grew its extension mechanism. But it costs an awful lot. |
I think that it would make sense to collect a few examples of problems that have limited the evolvability of some protocols. Here are some examples:
|
We should probably distinguish between different classes of protocols that have different requirements in terms of extensibility. A first class are the datagram protocols like IPv4, IPv6 or UDP. For these protocols, each packet is considered as independent are there is no negotiation mechanism to decide when/how to use a given extension. A second class are the session based protocol like TCP, TLS, HTTP, and many others that open a session exchange data for some time and then close the session. For these protocols, the classical approach is to negotiate extensions during the session establishment and use the mutually agreed ones during the entire session. A third class are the signalling/routing protocols such as BGP, LDP, ... These protocols use sessions that typically last until the next reboot. Several of these protocols include graceful restart mechanisms that allow to restart a session without impacting the FIB. This graceful restart capability is probably a unique requirement of such protocols. A fourth class of protocols are the multicast protocols. When there are multiple receivers, the problem of negotiating protocol extensions becomes immediately harder. |
Most IETF protocols have some sort of extensibility, and these often are subject to ossification and loss of flexibility. Some extension mechanisms may intend to be used infrequently, but others are used less effectively than intended due to ossification.
The text was updated successfully, but these errors were encountered: