3.4
Sliding Window Protocols
In the previous protocols, data
frames were transmitted in one direction only. In most practical situations,
there is a need for transmitting data in both directions. One way of achieving
full-duplex data transmission is to have two separate communication channels
and use each one for simplex data traffic (in different directions). If this is
done, we have two separate physical circuits, each with a ''forward'' channel
(for data) and a ''reverse'' channel (for acknowledgements). In both cases the
bandwidth of the reverse channel is almost entirely wasted. In effect, the user
is paying for two circuits but using only the capacity of one.
A better idea is to use the same
circuit for data in both directions. After all, in protocols 2 and 3 it was
already being used to transmit frames both ways, and the reverse channel has
the same capacity as the forward channel. In this model the data frames from A
to B are intermixed with the acknowledgement frames from A to B. By looking at
the kind field in the header of an incoming frame, the receiver can tell
whether the frame is data or acknowledgement.
Although interleaving data and
control frames on the same circuit is an improvement over having two separate
physical circuits, yet another improvement is possible. When a data frame
arrives, instead of immediately sending a separate control frame, the receiver
restrains itself and waits until the network layer passes it the next packet.
The acknowledgement is attached to the outgoing data frame (using the ack field
in the frame header). In effect, the acknowledgement gets a free ride on the
next outgoing data frame. The technique of temporarily delaying outgoing
acknowledgements so that they can be hooked onto the next outgoing data frame
is known as piggybacking.
The principal advantage of using
piggybacking over having distinct acknowledgement frames is a better use of the
available channel bandwidth. The ack field in the frame header costs only a few
bits, whereas a separate frame would need a header, the acknowledgement, and a
checksum. In addition, fewer frames sent means fewer ''frame arrival''
interrupts, and perhaps fewer buffers in the receiver, depending on how the
receiver's software is organized. In the next protocol to be examined, the
piggyback field costs only 1 bit in the frame header. It rarely costs more than
a few bits.
However, piggybacking introduces a
complication not present with separate acknowledgements. How long should the
data link layer wait for a packet onto which to piggyback the acknowledgement?
If the data link layer waits longer than the sender's timeout period, the frame
will be retransmitted, defeating the whole purpose of having acknowledgements.
If the data link layer were an oracle and could foretell the future, it would
know when the next network layer packet was going to come in and could decide
either to wait for it or send a separate acknowledgement immediately, depending
on how long the projected wait was going to be. Of course, the data link layer
cannot foretell the future, so it must resort to some ad hoc scheme, such as
waiting a fixed number of milliseconds. If a new packet arrives quickly, the
acknowledgement is piggybacked onto it; otherwise, if no new packet has arrived
by the end of this time period, the data link layer just sends a separate
acknowledgement frame.
The next three protocols are
bidirectional protocols that belong to a class called sliding window protocols.
The three differ among themselves in terms of efficiency, complexity, and
buffer requirements, as discussed later. In these, as in all sliding window
protocols, each outbound frame contains a sequence number, ranging from 0 up to
some maximum. The maximum is usually 2n - 1 so the sequence number
fits exactly in an n-bit field. The stop-and-wait sliding window protocol uses n
= 1, restricting the sequence numbers to 0 and 1, but more sophisticated
versions can use arbitrary n.
The essence of all sliding window
protocols is that at any instant of time, the sender maintains a set of
sequence numbers corresponding to frames it is permitted to send. These frames
are said to fall within the sending window. Similarly, the receiver also
maintains a receiving window corresponding to the set of frames it is permitted
to accept. The sender's window and the receiver's window need not have the same
lower and upper limits or even have the same size. In some protocols they are
fixed in size, but in others they can grow or shrink over the course of time as
frames are sent and received.
Although these protocols give the
data link layer more freedom about the order in which it may send and receive
frames, we have definitely not dropped the requirement that the protocol must
deliver packets to the destination network layer in the same order they were
passed to the data link layer on the sending machine. Nor have we changed the
requirement that the physical communication channel is ''wire-like,'' that is,
it must deliver all frames in the order sent.
The sequence numbers within the
sender's window represent frames that have been sent or can be sent but are as
yet not acknowledged. Whenever a new packet arrives from the network layer, it
is given the next highest sequence number, and the upper edge of the window is
advanced by one. When an acknowledgement comes in, the lower edge is advanced
by one. In this way the window continuously maintains a list of unacknowledged
frames. Figure 3-13 shows an example.
Figure 3-13. A sliding window of
size 1, with a 3-bit sequence number. (a) Initially. (b) After the first frame
has been sent. (c) After the first frame has been received. (d) After the first
acknowledgement has been received.
Since frames currently within the
sender's window may ultimately be lost or damaged in transit, the sender must
keep all these frames in its memory for possible retransmission. Thus, if the
maximum window size is n, the sender needs n buffers to hold the unacknowledged
frames. If the window ever grows to its maximum size, the sending data link
layer must forcibly shut off the network layer until another buffer becomes
free.
The receiving data link layer's
window corresponds to the frames it may accept. Any frame falling outside the
window is discarded without comment. When a frame whose sequence number is
equal to the lower edge of the window is received, it is passed to the network
layer, an acknowledgement is generated, and the window is rotated by one.
Unlike the sender's window, the receiver's window always remains at its initial
size. Note that a window size of 1 means that the data link layer only accepts
frames in order, but for larger windows this is not so. The network layer, in
contrast, is always fed data in the proper order, regardless of the data link
layer's window size.
Figure 3-13 shows an example with a maximum
window size of 1. Initially, no frames are outstanding, so the lower and upper
edges of the sender's window are equal, but as time goes on, the situation
progresses as shown.
Before tackling the general case,
let us first examine a sliding window protocol with a maximum window size of 1.
Such a protocol uses stop-and-wait since the sender transmits a frame and waits
for its acknowledgement before sending the next one.
Figure 3-14 depicts such a protocol. Like the
others, it starts out by defining some variables. Next_frame_to_send tells
which frame the sender is trying to send. Similarly, frame_expected tells which
frame the receiver is expecting. In both cases, 0 and 1 are the only
possibilities.
Under normal circumstances, one of
the two data link layers goes first and transmits the first frame. In other
words, only one of the data link layer programs should contain the to_physical_layer
and start_timer procedure calls outside the main loop. In the event that both
data link layers start off simultaneously, a peculiar situation arises, as
discussed later. The starting machine fetches the first packet from its network
layer, builds a frame from it, and sends it. When this (or any) frame arrives,
the receiving data link layer checks to see if it is a duplicate, just as in
protocol 3. If the frame is the one expected, it is passed to the network layer
and the receiver's window is slid up.
The acknowledgement field contains
the number of the last frame received without error. If this number agrees with
the sequence number of the frame the sender is trying to send, the sender knows
it is done with the frame stored in buffer and can fetch the next packet from
its network layer. If the sequence number disagrees, it must continue trying to
send the same frame. Whenever a frame is received, a frame is also sent back.
Now let us examine protocol 4 to see
how resilient it is to pathological scenarios. Assume that computer A is trying
to send its frame 0 to computer B and that B is trying to send its frame 0 to A.
Suppose that A sends a frame to B, but A's timeout interval is a little too
short. Consequently, A may time out repeatedly, sending a series of identical
frames, all with seq = 0 and ack = 1.
When the first valid frame arrives
at computer B, it will be accepted and frame_expected will be set to 1. All the
subsequent frames will be rejected because B is now expecting frames with
sequence number 1, not 0. Furthermore, since all the duplicates have ack = 1
and B is still waiting for an acknowledgement of 0, B will not fetch a new
packet from its network layer.
After every rejected duplicate comes
in, B sends A a frame containing seq = 0 and ack = 0. Eventually, one of these
arrives correctly at A, causing A to begin sending the next packet. No
combination of lost frames or premature timeouts can cause the protocol to
deliver duplicate packets to either network layer, to skip a packet, or to
deadlock.
However, a peculiar situation arises
if both sides simultaneously send an initial packet. This synchronization
difficulty is illustrated by Fig. 3-15. In part (a), the normal operation of
the protocol is shown. In (b) the peculiarity is illustrated. If B waits for A's
first frame before sending one of its own, the sequence is as shown in (a), and
every frame is accepted. However, if A and B simultaneously initiate
communication, their first frames cross, and the data link layers then get into
situation (b). In (a) each frame arrival brings a new packet for the network
layer; there are no duplicates. In (b) half of the frames contain duplicates,
even though there are no transmission errors. Similar situations can occur as a
result of premature timeouts, even when one side clearly starts first. In fact,
if multiple premature timeouts occur, frames may be sent three or more times.
Figure 3-15. Two scenarios for
protocol 4. (a) Normal case. (b) Abnormal case. The notation is (seq, ack,
packet number). An asterisk indicates where a network layer accepts a packet.
No comments:
Post a Comment
silahkan membaca dan berkomentar