There are many ways to get work for the miners. Bitcoind uses Getblocktemplate which replaces the old getwork command.
However most pools will use stratum or another pool server to getblocktemplate.
"Pools assign work units, similar to the current block being worked on, however at difficulty 1 (or higher depending on your hashing power), which are called shares. The idea is that you solve your mini-block, and submit it back to the pool, to show your proof of work, out of every X shares submitted, one will also solve the "real" block being worked on (by chance).
So you are in essence solving an easier problem, that can potentially solve a more difficult one, and everyone doing this over and over and over eventually do find a block."
Read
https://en.bitcoin.it/wiki/Pooled_miningand
https://mining.bitcoin.cz/