The netsynth project aims to create a networked modular synthesizer using the CAN bus. Here is my proposed version of the netsynth protocol.
The message identifer address space is split into two halves.
The higher priority half is dedicated to signals. Signal messages are all periodic. Signal identifiers contain the nickname and port of the source node.
The lower priority half consists of commands and their responses. Commands and responses are organized into pairs. The command id and response id of an associated pair have the same most significant 4 bits. The command has a least significant bit of 1, while the response has a least significant bit of 0. The nickname of the command identifies the destination node, while the nickname of the response identifies the source node. Both messages are event based.