I had a look at https://en.bitcoin.it/wiki/Protocol_documentation where the p2p protocol is documented. Although it states incompleteness I thought it is a good starting point to understand the protocol. To my initial understanding the protocol is based on c-structs that are directly sent over the wire. This makes implementations in other languages more complex.
Would it be possible to introduce a new protocol based on a well known communication method (for example JSON) and make a smooth transition between the protocols? For example with bridge nodes, which are using two protocols in a transition period?