As Graynomad says, you can start something as easy as:
- "S"= START
- "1" or "0" => command 1=ON, 0=OFF
- "E" => END (in my chart is F, because end in spanish is FIN...he,he,he)
It´s an easy example that I did to switch ON and OFF a led (
http://real2electronics.blogspot.com/2009/10/linksys-arduino.html)

//Mini protocolo serie
//Igor Real
int luz1= 13;
int el1;
int estado=0;
byte dato_recibido;
void setup() {
pinMode(luz1, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(12,LOW);
Serial.begin(9600);
}
void loop()
{
//trama a recibir --> S1F o S0F
//S inicio
//1 ENCENDIDO Y 0 APAGADO
//F fin
while (Serial.available() > 0)
{
//Significa que has recibido algo y lees el primer byte
dato_recibido=Serial.read();
if (dato_recibido=='S' && estado==0){
estado=1;
}
if (((dato_recibido=='1')||(dato_recibido=='0')) && estado==1){
estado=2;
if (dato_recibido=='1') el1=1;
if (dato_recibido=='0') el1=0;
}
if (dato_recibido=='F' && estado==2){
estado=0;
digitalWrite(luz1,el1);
if (el1==0) Serial.println("APAGADO");
if (el1==1) Serial.println("ENCENDIDO");
}
}
}
You can continue adding more features to your messages, for example, the slave address, timeouts if you don´t receive the next char of the message, checksum,....
As I said before, if you use CAN bus, you are going to have a very sophisticated messages and rules that it´s "transparent" for the user (the CAN controller do everything for you).
Regards,
Igor