A method and apparatus for congestion control of a Transmission Control
Protocol (TCP) connection. A TCP source monitors received acknowledgments
(ACKs) and uses header information associated with the ACKs to determine
an amount of data delivered at a TCP receiver. The amount of delivered
data, divided by the time requited to deliver the data, gives a measure
of instant data rate. The instant data rate is input to a filtering and
averaging process to generate an estimate of the end-to-end bandwidth
share or data rate of the connection. For the entire duration of the
connection, the TCP source updates its estimate of the end-to-end
bandwidth share every time an ACK is received. The estimate of the
end-to-end bandwidth share is used the reset a congestion window and a
slow start threshold whenever packet loss is indicated such as whenever a
timeout expires or whenever three (3) duplicate ACKs are received.