The version number that is exchanged when establishing a connection between nodes only indicates which features are potentially supported by the nodes (a feature that can be negotiated). In order to establish what they really support, some negotiation mechanism is needed. The two I know are:
- via an additional message (sendcmpct, sendheaders, etc.)
- via service flags
Are there any others?