Design Exercise: A Generic Network Protocol

I spent some idle time thinking about the topic lately, and I think that this can be a pretty good blog post. The goal is to have a generic application level network protocol for client/server and server/server communication. There are a lot of them out there, and this isn’t actually design work that I intend to implement. It is a thought exercise that run through a lot of the reasoning behind the design.
There are network protocols that are specific for a purpose, and that is reflected in a lot of hidden assumptions they have. I’m trying to conceive of a protocol that would be generic enough to be used for a wide variety of cases. Here are the key points in my thinking.