|
Data packets must be delivered to the
recipient in the same order in which they were transmitted to have a
reliable, connection-oriented data transfer. The protocol fails if any
data packets are lost, damaged, duplicated, or received in a different
order. An easy solution is to have a recipient acknowledge the receipt
of each packet before the next packet is sent.
If the sender must wait for an
acknowledgment after sending each packet, throughput would be low.
Therefore, most connection-oriented, reliable protocols allow more
than one packet to be outstanding on the network at one time. Because
time is available after the sender finishes transmitting the data
packet and before the sender finishes processing any received
acknowledgment, this interval is used for transmitting more data. The
number of data packets the sender is allowed to have outstanding
without having received an acknowledgment is known as the window size,
or window.
TCP uses expectational acknowledgments. Expectational acknowledgements
mean that the acknowledgment number refers to the packet that is next
expected. Windowing refers to the fact that the window size is
negotiated dynamically during the TCP session. Windowing is a
flow-control mechanism. Windowing requires that the source device
receive an acknowledgment from the destination after transmitting a
certain amount of data. The receiving TCP process reports a “window”
to the sending TCP. This window specifies the number of packets,
starting with the acknowledgment number, that the receiving TCP
process is currently prepared to receive.
With a window size of three, the source device can send three packets
to the destination. The source device must then wait for an
acknowledgment. If the destination receives the three packets, it
sends an acknowledgment to the source device, which can now transmit
three more packets. If the destination does not receive the three
packets, because of overflowing buffers, it does not send an
acknowledgment. Because the source does not receive an acknowledgment,
it knows that the packets should be retransmitted, and that the
transmission rate should be slowed.
TCP window sizes are variable during the lifetime of a connection.
Each acknowledgement contains a window advertisement that indicates
the number of bytes the receiver can accept. TCP also maintains a
congestion-control window. This window is normally the same size as
the window of the receiver. However, this window is cut in half when a
packet is lost, perhaps as a result of network congestion. This
approach permits the window to be expanded or contracted as necessary
to manage buffer space and processing. A larger window size allows
more data to be processed.
As shown in Figure
,
the sender sends three packets before expecting an ACK. If the
receiver can handle a window size of only two packets, the window
drops packet three, specifies three as the next packet, and specifies
a new window size of two. The sender sends the next two packets, but
still specifies a window size of three. This means that the sender
will still expect a three packet acknowledgement from the receiver.
The receiver replies by requesting packet five and again specifying a
window size of two.
|