# Class 12: Common Structures

Back to Error Detection. On to Switching and Forwarding.

Held Friday, February 18, 2000

Overview

Today we continue our discussion of error detection and error correction.

Notes

• I will be out of town all next week on a family emergency. On Monday, Mr. Stone will discuss processes in Unix and how to manage them in C. On Wednesday and Friday, Mr. Walker will provide a more in-depth view of Unix sockets. I probably won't return your assignment 2's until after I return.
• New Assignments:
• Assignment 3: Reusing Linked Lists
• Assignment 4:: The Data-Link Layer
• Read Section 1 of Stevens.
• Start reading Section 2 of Stevens.

Contents

Summary

• Framing, revisited
• Error-detecting codes
• Error-correcting codes

## Error-Detecting Codes

• How does the recipient know that the frame it received is correct?
• What kinds of errors can we get?
• Bits can flip
• Can bits be lost?
• Is it usally single bits or sequences of bits?
• The sender could send two copies. If they didn't match, the recipient could assume they were incorrect.
• Of course, if the same bit is flipped in both copies, there's no way to detect the error.
• There is also a lot of overhead, since we're sending two bits for every bit of real information.
• A simple solution is to use a parity bit. Every n bits, you count up the number of 1's and add a 1 or a 0 depending on whether the count is even or odd.
• A single parity bit catches only one odd numbers of one-bit errors.
• In particular, it misses two one-bit errors.
• It may be helpful to use two-dimensional parity, in which you arrange your data in a grid and compute parity for each row and each column.
• This technique always catches three or few one-bit errors. (Proof?)
• It is also likely to catch more errors.
• A better technique is to use a cyclic redundancy check. We treat the data as an n-degree polynomial.
• For example, 1001 is x3 + 1
• Similarly, 100100 is x5 + x2
• We choose a special k-degree polynomial for this technique.
• (The technique requires k check bits.)
• Smart mathematicians come up with t hose polynomials.
• The algorithm:
• Add k 0's to the end of the data.
• Divide by the special polynomial. The remainder must have degree k-1 or less.
• Subtract the remainder from the extended data.
• The result must be divisible by the special polynomial.
• The recipient can divide by the special polynomial. If the result is non-0, the data were corrupted.
• Since the remainder has k or fewer bits, the subtraction does not affect the original n bits.
• This catches:
• Single-bit errors, provided the polynomial contains both a degree-k term and degree -0 term.
• Any two one-bit errors, provided the polynomial contains at least three terms.
• Any odd number of one-bit errors, as long as x+1 divides the polynomial.
• Burst errors of less than k bits
• Can you explain why?
• Here are the most common CRC polynomials
• CRC-8: x8 + x2 + x1 + 1
• CRC-10: x10 + x9 + x5 + x4 + 1
• CRC-12: x12 + x11 + x3 + x2 + 1
• CRC-16: x16 + x15 + x2 + 1
• CRC-CCITT: x16 + x12 + x5 + 1
• Note: all CRC calculations are done with XOR, bit shifts, and similarly simple operations. This means that we can (and should) implement it all in hardware!

## Correcting Errors

• What do we do once we've detected an error?
• Inform the sender to get another copy
• Hope that there's enough information to resolve the error.
• Peterson and Davie tell us that it's not worth the overhead for error-correcting codes. However, it's worth spending a little time on them.
• The most common error-correcting codes rely on what is called the Hamming distance.
• The Hamming distance of two bit equal-length bit strings is the number of bits you have to flip to convert one string to the other.
• We'll draw a graph and a chart for three-bit strings.
• To correct one bit errors, we choose a set of strings such that no two strings have a Hamming distance less than three
• Each represents some sequence of bits. If there are four codes, we can represent pairs of bits.
• Convert from the sequence to the code.
• Send the code.
• Decode. If you don't have the original string, use the closest one.

## History

Thursday, 20 January 2000

• Created as a blank outline.

Friday, 18 February 2000

• Filled in the details.

Back to Error Detection. On to Switching and Forwarding.

Disclaimer Often, these pages were created "on the fly" with little, if any, proofreading. Any or all of the information on the pages may be incorrect. Please contact me if you notice errors.