CRC
CRC
CRCs
• Send Procedure:
1. Extend the n data bits with k zeros
2. Divide by the generator value C
3. Keep remainder, ignore quotient
4. Adjust k check bits by remainder
• Receive Procedure:
1. Divide and check for zero remainder
CRC
At the sender’s end
if the dataword has k bits ; the codeword has n bits, The size of the dataword is
augmented by adding n - k 0s to the right-hand side of the word.
The generator divides the augmented dataword by the divisor (modulo-2 division).
Modulo 2 Division:
The process of modulo-2 binary division is the same as the familiar division process we use for decimal
numbers. Just that instead of subtraction, we use XOR here.
•In each step, a copy of the divisor (or data) is XORed with the k bits of the dividend (or key).
•The result of the XOR operation (remainder) is (n-1) bits, which is used for the next step after 1 extra bit
is pulled down to make it n bits long.
•When there are no bits left to pull down, we have a result. The (n-1)-bit remainder which is appended
at the sender side.
CRCs Example1
Data bits: 100111 1 0 1 0 1 1 1 1 1
1101011111
Check bits:
C(x)=x4+x1+1
C = 10011
k=4
CRCs Example1
CRCs Example2
An example generator polynomial is of the form like x3 + x + 1. This
generator polynomial represents key 1011. Another example is
x2 + 1 that represents key 101.
CRCs Example2
Data word to be sent - 100100 Key -
1101 [ Or generator polynomial x3 + x2
+ 1] Sender Side:
Therefore, the remainder is all
zeros. Hence, the data received
has no error.
CRCs Example2
Therefore, the remainder is 001 and
hence the encoded data sent is
100100001.
Receiver Side: Code word received at
the receiver side 100100001
Therefore, the remainder is all zeros. Hence, the data received has no error.
CRCs
• Protection depend on generator
– Standard CRC-32 is 10000010
01100000 10001110 110110111
• Properties:
– HD=4, detects up to triple bit errors
– Also odd number of errors
– And bursts of up to k bits in error
– Not vulnerable to systematic errors
like checksums
Error Detection in Practice
• CRCs are widely used on links
– Ethernet, 802.11, ADSL, Cable …
• Checksum used in Internet
– IP, TCP, UDP … but it is weak
• Parity
– Is little used