Check out how TCP works.
For every 2 "packets" that are sent downstream to your PC, your PC sends 1 acknowledgement packet back. Normally the maximum packet size is ~1500 bytes. An acknowledgement packet is 40 bytes. The sender transmits packets in a speed related to how fast it gets incoming acknowledgments. So if fewer acknowledgments get through, the sender will limit the amount of packets it sends to your PC.
2x1500 bytes = 3000 bytes. Ack = 40 bytes. So you need roughly 1.3% of your downstream speed for upstream. So when you limit your upstream to 25 kB/sec, your downstream can be a maximum of 2MB/sec.
You see 1 MB/sec. That could be true. It's only a factor 2 off from my first guess. The reason I can only give you very rough ballpoint numbers is that encapsulation matters too. Not so much for the large downstream data packets. But for the small upstream acknowledgements, and few more bytes will have much larger impacts. To do the exact math, we need to know the technology you use (ADSL, Cable, Ethernet over Fiber, etc). But also the exact encapsulation methods. (PPPoE or PPPoA, 802.3, SNAP, etc), does your ISP use VLANs, MPLS, etc.
But the main thing you should understand: the sender is clocking his speed relative to the rate of incoming acknowledgements. Less incoming acknowledgements means the downstream data rate will go slower.
Edit: maybe you are playing MMOs. And use the "latency fix" that is popular amongst gamers ? It is a registry hack to tell Window's TCP driver to not send an acknowledgment every 2 packets, but every single packet. That would make the numbers exactly correct according to expectations.
There is an example of such a latency fix. This fix does improve the performance of your games that use TCP (in stead of UDP). But it does degrade the performance of large file-transfers.