
The TCP/IP Guide - Version 3.0 (Contents) ` 908 _ © 2001-2005 Charles M. Kozierok. All Rights Reserved.
3. Receive
Ack &
Reply, Send
Ack
141 141 360 321 200
4. Send Part
1 of File
241 441 200 141 360
The client receives the server's response. It sees the
Acknowledgment Number of 141 and knows bytes 1
to 140 were successfully received. It increases its
SND.UNA to 141, effectively “sliding the send
window” by 140.
The client also accepts the 80 bytes of data the
server sent, increasing its RCV.NXT pointer by 80.
Assuming it has no more data to sent, it sends back
a TCP segment that is a pure acknowledgment of
the server's response. This segment has no data,
and an Acknowledgment Number value of 321.
While the client was receiving its response, the
server's TCP was supplied with a 280 byte file to be
sent to the client. It cannot send this all in one
segment however. The current value of
SND.UNA+SND.WND is 441, while SND.NXT is
321. Thus, the server's usable window contains 120
bytes of data. It creates a TCP segment with this
much data and a Sequence Number of 321. It
increases the SND.NXT pointer to 441. The server
has now filled the send window.
Note that the server does not have to wait for an
acknowledgement to the reply it sent in step #2. This
is a key factor in TCP’s ability to ensure high
throughput.
5. Receive
Part 1 of
File, Send
Ack
141 141 360 441 200
6. Receive
Ack for
Reply
321 441 200 141 360
The client receives the first 120-byte part of the file
the server was sending. It increases the RCV.NXT
pointer to 441 and sends an acknowledgment back
with an Acknowledgment Number of 441. Again, if it
had another request to make of the server it could
include it here, but we'll assume it does not.
The server receives the client's acknowledgment of
its earlier 80-byte response (sent in step #2). It
increases its SND.UNA to 321. Since it just received
acknowledgment of 80 bytes (and the client's
window didn't change), the server's usable window
is now 80 bytes. However, as we will see in the
section on TCP performance, sending small
segments like this can lead to performance issues.
Let's say the server has been programmed to not
send segments under 100 bytes when it has a lot of
data to transmit. It decides to wait.
(wait) 141 141 360 441 200
7. Receive
Ack for Part
1 of File
441 441 200 141 360
The client waits for the rest of the file. The server receives the acknowledgment for the first
part of the file. It increases SND.UNA to 441. This
now restores the full 200 byte window.
Table 160: TCP Transaction Example With Send and Receive Pointers (Page 2 of 3)
Client Server
Process
Step
SND.
UNA
SND.
NXT
SND.
WND
RCV.
NXT
RCV.
WND
Process
Step
SND.
UNA
SND.
NXT
SND.
WND
RCV.
NXT
RCV.
WND
Description Description