When I'm downloading the blockchain for the first time, from whom am I downloading it from? Is it p2p through BitTorrent protocol? Is it through a central server?
Blocks are downloaded from other nodes in Bitcoin's P2P network using a custom wire protocol. For the initial synch you can imagine it as a torrent with 5000 seeders, though the Bitcoin P2P protocol is more specialised and efficient for this task than BitTorrent. 

The bottleneck is almost always CPU load on validation, rather than download speed.