Ethereum transactions are also messages. The difference is that transactions are signed messages, because they were signed by a human with a private key.
Ethereum contracts create 'unsigned messages' and humans create 'signed messages'.
When a contract calls
.transfer(), it can transfer some amount of Ether. This is an unsigned message, but it is also called an 'internal transaction'. An example:
In this transaction, the human owner of
0xc459... called a function in contract
0xe70b... by creating a signed message. Then, the contract called
.send() to create an unsigned message to transfer some Ether to
Signed messages are stored physically in the blockchain, on the hard drives of Ethereum nodes. Unsigned messages are not necessarily stored, they are implied by the execution flow of a contract function call.
Signed messages are 'transactions' and are created by humans
Unsigned messages are 'internal transactions' and are created by contracts using a function call