Latency in the network is a big limitation. You can run a node at nearly dialup speed, but you'll be endlessly behind on the current state of the network and fairly useless at actually relaying that information to your peers. You really want to be able to process blocks in the order of a couple of hundred milliseconds, which is actually a hell of a lot of bandwidth at peak. In the worst case scenario (no pre-caching at all), 4MB of data in 100ms is 0.32Gbit, and that's not counting the TCP overhead and your actual processing of the data.
The block size for Bitcoin is 4MB, not 1MB, too.