What happens to a transaction once generated? I'm trying to understand how bitcoin works technically. I understand the blockchain, digital signatures etc ... I'm more interested in what happens to a transaction once it's "created".

Suppose Bitcoin only contains one transaction per block (to simplify). Basically: 


someone create a transaction using its wallet
this transaction must be validated (check inputs, digital signature etc ... 
a proof of work must be computed on the block hash
the the block is added to the blockchain


So I know miners are responsible to come with the proof of work. My questions are:


how does one node broadcast a transaction to miners ? Is it part of the P2P protocol ? 
does miner check the transaction (digital signature, available inputs etc ...) ?
does miner directly submit blocks to the blockchain ?


This part is still confusing to me any help pointers to article would be great :)

Update:

In a P2P network, nodes are not connected to every other nodes. So let's say the network looks like this:

node1 &lt;-&gt; node2 &lt;-&gt; node3 (1 and 2 are directly connected and 2 and 3 are directly connected. 1 and 3 are connected through 2)

When node1 wants to broadcast a transaction for validation, it will only broadcast it to node2. Then node2 can eventually broadcast it to node3 to give him the chance to validate node1's transaction. 

But, because we are in an untrusted network, nothing prevent node2 to validate the transaction without never transmitting it to node3 and thus, keeping mining fees for himself. 

We could also imagine that node1 never broadcast it's unconfirmed transaction, do the mining work himself and only broadcast the validated block so it get "merged" into the blockchain. 

How does Bitcoin deal with this situation ?
Regarding your update:

It's true that when a node receives a transaction, there is nothing forcing them to relay it.  They can just sit on it if they want.

But the network won't look like the picture you drew.  If Node1 actually wants his transaction to be confirmed, he wants to distribute it to as many other nodes as possible.  In particular, if Node2 is the only miner that knows about the transaction, then it can't be confirmed until Node2 successfully mines a block.  Assuming that Node2 only controls some fraction of the network's total mining power, this may take a (very) long time.  Node1 would prefer for his transaction to be included in the next block to be miner, no matter who mines it.

So for that reason, Node1 won't send the transaction only to Node2, but to many different nodes.  Bitcoin Core, for instance, will by default try to connect to at least 8 different nodes. If at least a few of those nodes are honest, they will relay the transaction to many more nodes, and so on. This also means that Node2 has less incentive to be greedy; it only helps to be greedy if no other miners know about the transaction (or very few), and Node2 knows this is not likely to be the case.  On the other hand, if Node2 is a miner, then she has a slight incentive not to be greedy: having invested in Bitcoin mining equipment, Node2 has an interest in having Bitcoin keep a high value, which will only happen if people continue to use it, and having their transactions confirmed fast would tend to encourage that.  So at some point, the incentives fall on the side of not being greedy.

(Keep in mind, too, that not all nodes are miners.  Many nodes on the Bitcoin network are run by people who don't do any mining, and just run a full node for fun, or to support the network altruistically, or because they installed Bitcoin Core with default settings and don't really know or care what it's actually doing.)

As for your second scenario, if Node1 is a miner himself, he can certainly keep its own transactions to include in his own blocks, rather than transmitting them on the network.  This also means that he won't have to pay fees for that transaction (or, equivalently, that he pays the fees back to himself).  There are two tradeoffs: (1) as mentioned above, the transaction will take longer to be confirmed; (2) if there is a high volume of transactions on the network, enough to keep all blocks filled, then by including his own transaction in his block, Node2 is giving up the ability to include someone else's transaction which would pay him a fee.  So it's up to Node1 to decide what is best for him. But this has no impact on anyone else, so it isn't really a problem for the network either way.