# Can tcp throughput be equal to bandwidth?

I have a conceptual question which I cannot understand. Can the TCP throughput be equal to the bandwidth and why? The throughput from what I have learned so far is (3/4)*congwing/RTT.

Is is fair to equalize that to the bandwidth? And is the window size we find the minimum window size?

• Did any answer help you? If so, you should accept the answer so that the question doesn't keep popping up forever, looking for an answer. Alternatively, you can provide and accept your own answer. Feb 19, 2018 at 5:48

This will be a really long answer, So here it goes. First things first the rate at which TCP will send the data is dependent on 3 things- application generating data, receive window, congestion window. The effective rate will be determined by the minimum these three.

Now for this question let us assume there is no flow and congestion control required and the application always has data to send.

Now as you pointed out, TCP uses buffers to send data. the buffer size decides the maximum of packets TCP can sent without waiting for an ack.

Now when TCP sends the any data, the packet will travel at link speed ie 100% link utilization and reach the sender. The sender will reply with an ack that again travels with link speed to reach the sender. Thus time elapsed during this activity is equal to RTT. Note that the amount of traffic sent by the TCP during this RTT time is equal to buffer size. The average utilization is given by total data set in the given time. Thus utilization is :- window size / RTT.

Now if we want to send data where average utilization equal to bandwidth then

window size / RTT = bandwidth

Thus, if we can have window size = bandwidth * RTT, then utilization is equal to bandwidth.

Now apart from the maths, Try to understand why this is the case. The TCP has to wait a time equal to RTT, before transmitting again, This is how TCP works. So the only way we can control utilization is by sending the number of packets at a time on the link. If we want to transmit at full bandwidth for continuously for RTT units of time but we cannot pump data continuously so we send bandwidth * RTT units of data together.

Thus to for utilization = bandwidth --> window size = bandwidth * RTT

• Have you considered the TCP header overhead? Mar 30, 2017 at 13:59
• No, I have tried to answer for the amount of data units on the link. Not particularly application level data or header bits added by TCP
– john
Mar 30, 2017 at 15:43
• @RonTrunk With IPv4 over Ethernet, you can see the overhead and efficiency in WP:Jumbo frame.
– Zac67
May 29, 2017 at 11:13