Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In TCP, the recevier every now and then acknowledges the receipt of sent packages. Therefore to achieve a specific downstream bandwidth there is always a minimum upstream bandwidth required.

What I'm looking for is a factor to calculate the needed upstream for a given downstream bandwidth. I'm aware of the fact that there are varying windows sizes and probably other factors in TCP which make this calculation harder. But maybe there is a default scenario from which one can get an approximation at least.

share|improve this question
the minimal tcp ack packet over IPv4 is 256 bits (480 for IPv6) compare this to the max packet the connection can handle... – ratchet freak Nov 12 '12 at 14:22

That is a hard question to answer because it depends on a lot of other factors. Trying to get a very specific answer would be hard and even harder, at least for me, to try to explain.

Making the assumption, that the end to end link is stable enough for the window to scale to the maximum, we could say that we need one ACK per every max window size. A typical max window size is 64KB, at least I think that is the default for Windows... it is set by a registry key.

Knowing that, now we need to know what the round trip time is because you will only receive one max window size of data per every RTT; one way for the data to get to you and one way to ACK it. Now we'll play like we are trying to calculate the needed upstream for one TCP socket over a satellite.

RTT = ~500ms
Max window size = 64KB

(64KB * 8)/.5 = Max download would be 1Mbps. The times 8 was to of course turn our byte value into bits.

BTW a lot of times you see window size referred to as buffer and you see the TCP throughput calculation given as (RxBuffer/RTT = Througput). Now we need to calculate the upstream. Hopefully with all the stuff above the answer is obvious, we need two ACKs a second to get back to the sender. Those ACKs are, 20Bs + 20Bs * 8 (IP + TCP header), 320bps a piece. So for a connection with the 500ms of RTT and a max RxBuffer of 64KB we should expect no more than 1Mbps download and 640bps upload.

I hope that sort of got you on the right track. Reading back through it I confused myself...

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .