It's natural to assume that network protocol design is a well-known science, where the designers of today's standards take care to understand the tricks and pitfalls learned from previous protocols. This talk dispells this and other myths.
This talk describes things that should be considered when designing a protocol, such as being able to manage parameters while the network continues to operate, designing to allow graceful migration to new features, scalability, and robustness. It talks about things that might seem obvious, but everyone gets wrong, like the purpose of a 'version number' in a protocol.
It talks about some of the wrong turns that have been made, such as a routing protocol (the ARPANET) that was unstable, the misconception that required inventing bridges, and how failure to put performance requirements into the standard made the bridge spanning tree algorithm unstable.