An Ethereum transaction - as in, what you pass to sendRawTransaction() - consists of the following fields, in order and RLP-encoded (note that the field names are not part of the encoded data):

nonce - transaction sequence number fr the sending account

- transaction sequence number fr the sending account gasprice - price you are offering to pay

- price you are offering to pay startgas - maximum amount of gas allowed for the transaction

- maximum amount of gas allowed for the transaction to - destination address (account or contract address)

- destination address (account or contract address) value - eth to transfer to the destination, if any

- eth to transfer to the destination, if any data - all of the interesting stuff goes here

- all of the interesting stuff goes here v - along with r and s makes up the ECDSA signature

- along with and makes up the ECDSA signature r

s

Any payload, whether raw data or a contract function signature and parameters, is encoded into the data field.

Some references:

Transaction (python)

rlp.Serializable (python)

ECDSA parameters