A very helpful AT&T tech that came out to my house ended up solving this issue for me.
- The tech measured the signal quality at the point of the phone/DSL wire coming into the outside of my home. The signal quality was just fine at that point (to my surprise)!
- The tech measured the signal quality at the phone jack inside my home where I had my router and DSL modem plugged in. The signal quality was very poor at that point.
This proved that the problem was with the wiring inside my home. (Again, this was to my surprise, as I live in a fairly new home that is, in other respects, well-constructed.)
- The tech took a look a look at the wiring down in my basement. He offered a diagnosis that the problem was due to the phone wire being run throughout the house bundled together with the electrical power wire. Apparently, per the tech, this can cause interference/"noise" on the phone line, which can adversely impact the DSL signal quality.
We ended up solving the problem by physically disconnecting, at the junction box in my basement, all of the phone lines running throughout the house except the single line leading to the jack upstairs where I had my DSL modem plugged in. (I didn't care about doing this, as I wasn't using any of the other phone jacks in the house.) This did solve the problem for me, and I now have no issues with my home DSL.
Your internet speed measurement
I think this is a measurement unit error, your internet speed is measured in kilobits while uploads and downloads tend to be measured in kilobytes, this causes confusion and pain to users who (quite rightfully) expect these things to be measured in the same way.
Your internet upstream speed is 800-950 kilobits, we divide this by 8 to get speed in kilobytes:
950 / 8 = 118.75 kilobytes
To me this sounds very much like the speed you are getting, ignoring random jumps to 200kbps which could simply be due to bursts, stalls, measurement errors or other freak occurrences.
The upshot of this is that your internet connection, computer and network are fine, the down side is that you are fully saturating your internet connection and that is making it difficult for website requests and downloaded data acknowledgments to get through.
I would recommend finding some bandwidth management software and try halving the speed you are uploading at, if suddenly everything is more responsive then your problem is well and truly a saturated internet pipe.
Why uploads kill internet speed.
Just thought I would add some details regarding why saturating your internet connection causes slow response times for normal browsing...
Almost all programs that deal with the network will be working through some kind of FIFO ("First In, First Out") buffer, which basically means that there is a queue of data to come into the machine and a queue of data going out of the machine.
Typically for all the incoming data any program that is expecting data is able to empty their incoming buffer pretty quickly and send a small "acknowledge" packet back to request the next block of data. That acknowledge gets put on the outgoing queue and, as typically there isn't much outgoing traffic makes it to the front of the outgoing queue pretty much instantaneously and so the cycle of download and acknowledge continues.
This FIFO queue becomes a problem when you start uploading. Lets say that Window might have a queue of 400 kilobytes, I don't know for sure but it seems a reasonable number these days. What that means is when you upload a small file of say 200 kilobytes then it will get pushed onto the queue and the program can continue on and assume the data has been sent or at least will be gone quite quickly, say 1-2 seconds at most, hardly noticeable really.
When you start uploading larger files though this queue becomes a bottleneck, one program filling this queue as fast as it is allowed to will mean that another program that just wants to send one small "give me this web page" request will have to wait for one full turn through the entire length of the queue which, with a 400 kilobyte queue at about 125 kilobytes bandwidth means that it will take at least 3 seconds before it gets to the front and has left the queue, it might receive a block of data back quite quickly as the downstream buffer is pretty empty but then the "send me more data" request will take another 3 seconds before it can make its way out of the queue again.
It's all the time waiting in the queue that will cause the website requests to timeout while uploading data, most sites and browsers are tuned to expect the turnaround to be under a second from the request of data to starting to receive it so having this big buffer in the way causes markedly larger delays than they expect. As that queue buffer gets larger so does the time for any request to make it through the queue and out onto the actual internet.
When you limit the bandwidth of any given program what you are effectively doing is slowing the rate that that program can put the data on the queue, this means that the queue can be emptied at a rate faster than it is being filled and prevents the queue from getting full. Any other program that puts data or a request on the queue can expect a shorter time for it to reach the front of the queue (as it is no longer anywhere near full) and so the connection seems to "just work better".
Wow, that was longer than I expected.
Best Answer
The TCP protocol, which most Internet traffic uses, uses a "sliding window" scheme to provide reliability. This means it will only send new contents (slide the window) when it receives the ACK messages indicating that part or whole of the current window has been received completely. So it requires frequent ACK messages to be send in the uplink for your download traffic to go through smoothly If the ACK messages are delayed or lost, the sender may slow down transmission and/or retransmit packets that you have already received.
By default, packets are transmitted by the OS in the order they are generated by the applications, so the ACK packets are interleaved with your upload traffic randomly. Your ISP (or your network device) controls your bandwidth use by delaying packets when your transmission speed exceeds the limit (aka throttling). This delay can happen on any packet including the delay-sensitive ACK packets.
To solve this problem, you'll need some kind of priority system to make sure the ACK packets are not throttled. There are paid software solutions for this. You can also achieve a similar effect if you limit the upload speed to a value below your allocated upload bandwidth. Alternatively, you can use applications that transmit files through UDP which does not require ACK messages.