Professional Documents
Culture Documents
Topics Covered:
Logical Link Control
o Introduction
o Data Link Layer Design Issues
Framing
Error Control
Flow Control
o Error Detection and Correction
Error-Correcting Codes
Error-Detecting Codes
o Elementary Data Link Layer Protocols
o Sliding Window Protocols
Framing
The usual approach is for the data link layer to break the bit stream up into discrete frames and compute
the checksum for each frame. When a frame arrives at the destination, the checksum is recomputed. If
the newly-computed checksum is different from the one contained in the frame, the data link layer
knows that an error has occurred and takes steps to deal with it (e.g., discarding the bad frame and
possibly also sending back an error report).
Breaking the bit stream up into frames is more difficult than it at first appears. One way to achieve this
framing is to insert time gaps between frames, much like the spaces between words in ordinary text.
However, networks rarely make any guarantees about timing, so it is possible these gaps might be
squeezed out or other gaps might be inserted during transmission.
Since it is too risky to count on timing to mark the start and end of each frame, other methods have been
devised. These methods are:
1. Character count.
2. Flag bytes with byte stuffing.
3. Starting and ending flags, with bit stuffing.
Character Count
The first framing method uses a field in the header to specify the number of characters in the frame.
When the data link layer at the destination sees the character count, it knows how many characters
follow and hence where the end of the frame is. This technique is shown in Fig. (a) for four frames of
sizes 5, 5, 8, and 8 characters, respectively.
The trouble with this method is that the count can be garbled by a transmission error. For example, if the
character count of 5 in the second frame of Fig. (b) becomes a 7, the destination will get out of
synchronization and will be unable to locate the start of the next frame. Even if the checksum is
incorrect so the destination knows that the frame is bad, it still has no way of telling where the next
frame starts. Sending a frame back to the source asking for a retransmission does not help either, since
the destination does not know how many characters to skip over to get to the start of the retransmission.
For this reason, the character count method is rarely used anymore.
Byte Stuffing
The second framing method gets around the problem of resynchronization after an error by having each
frame start and end with special bytes. In the past, the starting and ending bytes were different, but in
recent years most protocols have used the same byte, called a flag byte, as both the starting and ending
delimiter, as shown in Fig. (a) as FLAG. In this way, if the receiver ever loses synchronization, it can
just search for the flag byte to find the end of the current frame. Two consecutive flag bytes indicate the
end of one frame and start of the next one.
A serious problem occurs with this method when binary data, such as object programs or floating-point
numbers, are being transmitted. It may easily happen that the flag byte's bit pattern occurs in the data.
This situation will usually interfere with the framing. One way to solve this problem is to have the
sender's data link layer insert a special escape byte (ESC) just before each ''accidental'' flag byte in the
data. The data link layer on the receiving end removes the escape byte before the data are given to the
network layer. This technique is called byte stuffing or character stuffing. Thus, a framing flag byte can
be distinguished from one in the data by the absence or presence of an escape byte before it.
Of course, the next question is: What happens if an escape byte occurs in the middle of the data? The
answer is that it, too, is stuffed with an escape byte. Thus, any single escape byte is part of an escape
sequence, whereas a doubled one indicates that a single escape occurred naturally in the data. Some
examples are shown in Fig. (b). In all cases, the byte sequence delivered after de-stuffing is exactly the
same as the original byte sequence.
A major disadvantage of using this framing method is that it is closely tied to the use of 8-bit characters.
Not all character codes use 8-bit characters. The disadvantages of embedding the character code length
in the framing mechanism became more and more obvious, so a new technique had to be developed to
allow arbitrary sized characters.
Bit Stuffing
The new technique allows data frames to contain an arbitrary number of bits and allows character codes
with an arbitrary number of bits per character. In this each frame begins and ends with a special bit
pattern, 01111110 (in fact, a flag byte). Whenever the sender's data link layer encounters five
consecutive 1s in the data, it automatically stuffs a 0 bit into the outgoing bit stream. This bit stuffing is
analogous to byte stuffing, in which an escape byte is stuffed into the outgoing character stream before a
flag byte in the data.
When the receiver sees five consecutive incoming 1 bits, followed by a 0 bit, it automatically de-stuffs
(i.e., deletes) the 0 bit. Just as byte stuffing is completely transparent to the network layer in both
computers, so is bit stuffing. If the user data contain the flag pattern, 01111110, this flag is transmitted
as 011111010 but stored in the receiver's memory as 01111110. Following Figure gives an example of
bit stuffing.
With bit stuffing, the boundary between two frames can be unambiguously recognized by the flag
pattern. Thus, if the receiver loses track of where it is, all it has to do is scan the input for flag
sequences, since they can only occur at frame boundaries and never within the data.
The last method of framing is only applicable to networks in which the encoding on the physical
medium contains some redundancy. As a final note on framing, many data link protocols use a
combination of a character count with one of the other methods for extra safety. When a frame arrives,
the count field is used to locate the end of the frame. Only if the appropriate delimiter is present at that
position and the checksum is correct is the frame accepted as valid. Otherwise, the input stream is
scanned for the next delimiter.
Error Control
Having solved the problem of marking the start and end of each frame, the next problem is: how to
make sure all frames are eventually delivered to the network layer at the destination and in the proper
order. Suppose that the sender just kept outputting frames without regard to whether they were arriving
properly. This might be fine for unacknowledged connectionless service, but would most certainly not
be fine for reliable, connection-oriented service.
The usual way to ensure reliable delivery is to provide the sender with some feedback about what is
happening at the other end of the line. Typically, the protocol calls for the receiver to send back special
control frames bearing positive or negative acknowledgements about the incoming frames. If the sender
receives a positive acknowledgement about a frame, it knows the frame has arrived safely. On the other
hand, a negative acknowledgement means that something has gone wrong, and the frame must be
transmitted again.
An additional complication comes from the possibility that hardware troubles may cause a frame to
vanish completely (e.g., in a noise burst). In this case, the receiver will not react at all, since it has no
reason to react. It should be clear that a protocol in which the sender transmits a frame and then waits
for an acknowledgement, positive or negative, will hang forever if a frame is ever lost due to, for
example, malfunctioning hardware.
This possibility is dealt with by introducing timers into the data link layer. When the sender transmits a
frame, it generally also starts a timer. The timer is set to expire after an interval long enough for the
frame to reach the destination, be processed there, and have the acknowledgement propagate back to the
sender. Normally, the frame will be correctly received and the acknowledgement will get back before
the timer runs out, in which case the timer will be canceled.
However, if either the frame or the acknowledgement is lost, the timer will go off, alerting the sender to
a potential problem. The obvious solution is to just transmit the frame again. However, when frames
may be transmitted multiple times there is a danger that the receiver will accept the same frame two or
more times and pass it to the network layer more than once. To prevent this from happening, it is
generally necessary to assign sequence numbers to outgoing frames, so that the receiver can distinguish
retransmissions from originals. The whole issue of managing the timers and sequence numbers so as to
ensure that each frame is ultimately passed to the network layer at the destination exactly once, no more
and no less, is an important part of the data link layer's duties.
Flow Control
Another important design issue that occurs in the data link layer (and higher layers as well) is what to do
with a sender that systematically wants to transmit frames faster than the receiver can accept them. This
situation can easily occur when the sender is running on a fast machine and the receiver is running on a
slow machine. The sender keeps pumping the frames out at a high rate until the receiver is completely
swamped. Even if the transmission is error free, at a certain point the receiver will simply be unable to
handle the frames as they arrive and will start to lose some. Clearly, something has to be done to prevent
this situation.
Two approaches are commonly used:
1. Feedback-based flow control: The receiver sends back information to the sender giving it
permission to send more data or at least telling the sender how the receiver is doing.
2. Rate-based flow control: The protocol has a built-in mechanism that limits the rate at which
senders may transmit data, without using feedback from the receiver.
Various feedback-based flow control schemes are known, but most of them use the same basic
principle. The protocol contains well-defined rules about when a sender may transmit the next
frame. These rules often prohibit frames from being sent until the receiver has granted permission,
either implicitly or explicitly. For example, when a connection is set up, the receiver might say:
“You may send me n frames now, but after they have been sent, do not send any more until I have
told you to continue.”
TYPES OF ERRORS
There are two types. They are,
1. Single Bit Error: It means that only one bit of a given data unit is changed from 1 to 0 or from 0 to
1.
2. Burst Bit Error: It means that two or more bits in the data unit have changed.
A burst bit does not necessarily means that the errors occur in consecutive bits
The length of the bust error is measured from the first corrupted bit to the last corrupted bit.
Some bits in between may not be corrupted.
ERROR DETECTION
For reliable communication errors must be detected and corrected. For error detection many
mechanisms are used.
REDUNDANCY
One error detection mechanism is sending every data unit twice. The receiving device then would be
able to do a bit for bit comparison between the two versions of the data. Any discrepancy would
indicate an error, and an appropriate correction mechanism could be used.
But instead of repeating the entire data stream, a shorter group of bits may be appended to the end of
each unit. This technique is called redundancy because extra bits are redundant to the information.
They are discarded as soon as the accuracy of the transmission has been determined.
Four types of redundancy checks are used in data communications. They are:
1. Vertical redundancy check (VRC)
2. Longitudinal redundancy check (LRC)
3. Cyclic redundancy check (CRC)
4. Checksum
EXAMPLE:
In odd parity, the data unit is passed through the odd parity generator. It counts the number of 1s in
the data unit. If even number of 1s, then it sets 1 in the parity bit to make the number of 1s as odd. If
the data unit having odd number of 1s then it sets in the parity bit to maintain the number of 1s as
odd. When it reaches its destination, the receiver puts all bits through an odd parity checking
function. If it counts odd number of 1s than there is no error. Otherwise there is some error.
EXAMPLE
The data is: 01010110
The VRC check: 01010111
First, a string of n-1 0s is appended to the data unit. The number of 0s is one less than the number of
bits in the divisor which is n bits. Then the newly elongated data unit is divided by the divisor
using a process called binary division. The remainder is CRC. The CRC is replaces the appended 0s at
the end of the data unit.
The data unit arrives at the receiver first, followed by the CRC. The receiver treats whole string as the
data unit and divides it by the same divisor that was used to find the CRC remainder. If the remainder
is 0 then the data unit is error free. Otherwise it having some error and it must be discarded.
Example :
CHECKSUM
The error detection method used by the higher layer protocols is called checksum. It consists of two
arts. They are,
1. Checksum Generator
2. Checksum Checker
Checksum Generator:
In the sender, the checksum generator subdivides the data unit into equal segments of n bits.
These segments are added with each other by using one’s complement arithmetic in such a way that the
total is also n bits long. That total is then complemented and appended to the end of the data unit.
Checksum Checker:
The receiver subdivides the data unit as above and adds all segments together and complements the
result. If the extended data unit is intact, the total value found by adding the data segments and the
checksum field should be zero. Otherwise the packet contains an error and the receiver rejects it.
EXAMPLE
At the sender
Data unit: 10101001 00111001
10101001
00111001
Sum 1100010
Checksum 00011101
At the receiver
1) Received data: 10101001 00111001 00011101
10101001
00111001
00011101
Sum 11111111
Complement 00000000
It means that the patter is ok.
10101111
11111001
00011101
Result 11000101
Carry 1
Sum 11000110
Complement 00111001
It means that the patter is corrupted.
Example
ERROR CORRECTION
Error correction is handled in two ways. In one, when an error is discovered, the receiver can have the
sender retransmit the entire data unit. In the other, a receiver can use an error correcting code, which
automatically corrects certain errors.
Hamming Code:
The hamming code can be applied to data units of any length and uses the relationship
between data and redundancy bits.
Positions of redundancy bits in hamming code
The combinations used to calculate each of the four r values for a seven bit data sequence are as
follows:
r1:1, 3, 5, 7, 9, 11
r2: 2, 3, 6, 7, 10, 11
r3: 4,5,6,7
r4: 8, 9, 10, 11
Here, r1 bit is calculated using all bit positions whose binary representation includes a 1 in the
rightmost position (0001, 0011, 0101, 0111, 1001, and 1011). The r2 bit is calculated using all bit
positions with a 1 in the second position (0010, 0011, 0110, 0111, 1010 and 1011), and for r3 1 at
third bit position (0100, 0101, 0110 and 0111) for r4 1 at fourth bit position (1000, 1001, 1010 and
1011).
Example:
At the sender:
Data to be sent: 1001101
Redundancy bit calculation:
During transmission:
At the receiver:
The receiver takes the transmission and recalculates four new r values using the same set of bits used
by the sender plus the relevant parity (r) bit for each set. Then it assembles the new parity values into a
binary number in order of r position (r8, r4, r2, r1).
Once the bit is identified, the receiver can reverse its value and correct the error.
Burst Bit Error Correction:
A hamming code can be designed to correct burst errors of certain length. The number of redundancy
bits required to make these corrections, however, is dramatically higher than that required for single
bit errors. To correct double bit errors, for example, we must take into consideration that the two bits
can be a combination of any two bits in the entire sequence. Three bit correction means any three bits
in the entire sequence and so on.
ERROR CONTROL
To ensure the proper sequencing and safe delivery of frames at the destination, an acknowledgment
should be sent by the destination network. Error control is implemented in such a way that every time
when an error is detected, a negative acknowledgement is returned and the specified frame is
retransmitted. This process is called automatic repeat request (ARQ).
ARQ techniques can be categorized into two types:
1. Stop and wait ARQ
2. Sliding window ARQ
a. Go-Back-N ARQ
b. Selective Repeat ARQ
DAMAGED FRAME:
When a frame is discovered by the receiver containing an error, it returns a NAK frame and the
sender retransmit the last frame.
LOST ACKNOWLEDGEMENT:
The data frame was received by the receiver but the acknowledgement was lost in transmission. The
sender waits until the timer goes off, then it retransmits the data frame. The receiver gets a duplicated
copy of the data frame. So it knows the acknowledgement was lost so it discards the second copy.
2. SLIDING WINDOW ARQ
It is used to send multiple frames per time. The number of frame is according to the window size. The
sliding window is an imaginary box which is reside on both sender and receiver side. It has two types:
a. Go-Back-N ARQ
b. Selective Repeat ARQ
a. GO-BACK-N ARQ:
In this method, if one frame is lost or damaged, all frames sent since the last frame
acknowledged or retransmitted. While transmitting a frame there can be three cases:
1. Damaged Frame
2. Lost Data Frame
3. Lost Acknowledgement
DAMAGED FRAME:
LOST FRAME:
LOST ACK:
DAMAGED FRAME:
LOST FRAME
LOST ACK
In this method, the sender can transmit several frames before needing an acknowledgment. The
receiver acknowledges only some of the frames, using a single ACK to confirm the receipt of multiple
data frames.
The sliding window refers to imaginary boxes at both the sender and receiver. This window
provides the upper limit on the number of frames that can be transmitted before requiring an
acknowledgement. To identify each frame the sliding window scheme introduces the sequence
number. The frames are numbered as 0 to n-1 and the size of the window is n-1. Here the size of
the window is 7 and the frames are numbered as 0, 1, 2, 3, 4, 5, 6, and 7.
SENDER WINDOW:
At the beginning the sender’s window contains n-1 frames. As frames are sent out the left boundary of
the window moves inward, shrinking the size of the window. Once an ACK receives the window
expands at the right side boundary to allow in a number of new frames equal to number of frames
acknowledged by that ACK.
EXAMPLE: