The Bitcoin client protocol is well documented in the Bitcoin Wiki, but I can't find much on the protocol used by pools and miners. Is it described anywhere?
When there were no pools, all of the first mining clients interfaced directly with Bitcoin. They connected to Bitcoin's JSON-RPC interface and used the getwork RPC method to get the required work. Getting work from a pool is the same as getting work from Bitcoin. The client connects to the pool over HTTP, often using the same HTTP authentication that Bitcoin's JSON-RPC interface uses; the client sends a JSON-RPC getwork message; and the pool sends back a JSON-RPC getwork response.
Many pools nowadays support some extensions to the getwork protocol that Bitcoin does not.
1Since this answer was written there are two new protocols; Stratum and gbt (getblocktemplate). Stratum seems the most popular, and getwork is being phased out by most clients and servers. Sep 7, 2013 at 9:23