Re: Implicit acks in TCP?


Barry Margolin (barmar@think.com)
4 Mar 88 20:38:11 GMT


In article <17229@watmath.waterloo.edu> jwkhong@grand.waterloo.edu (James W. Hong) writes:
>I wonder if someone could clarify a point for me regarding acks in
>TCP. Are implicit acks allowed in TCP? What I mean by an implicit
>ack is that each request or response message serves as an implicit
>ack for the previous response or reqeust message from that client,
>respectively.

Your question indicates that you misunderstand TCP. TCP does not have
any notion of "request" and "response" messages; some higher-level
protocols, such as RPC (Remote Procedure Call), may have them, though.
TCP implements a reliable bidirectional stream of octets on top of a
lower-level unreliable datagram facility (generally IP). TCP doesn't
require that every transmission in one direction be followed by a
transmission in the other direction.

Every TCP datagram includes an explicit ack, so there can be no
"implicit" acknowledgements. However, for ease of implementation,
most implementations send an empty acknowledgement datagram as soon as
they receive a datagram. While they could wait and try to piggy-back
it on the next outgoing datagram to that host, they would also have to
set a timer so that an empty ack could be sent out sooner if no
outgoing data is sent soon. For applications where a large amount of
data is going one way and very little goes the other way (e.g. mail
transfer) this could reduce throughput, because acks would not come as
soon as the receiver was actually ready to receive more. And if the
acks are sent too late, the sender might end up retransmitting packets
that were actually received intact.

Barry Margolin
Thinking Machines Corp.

barmar@think.com
uunet!think!barmar



This archive was generated by hypermail 2.0b3 on Thu Mar 09 2000 - 14:41:30 GMT