by weird_dave » Thu Jan 14, 2010 3:45 pm
I've been searching for the answer to this all day, I found this but have yet to understand it!
A cyclic redundancy check (CRC) is used by the transmit and receive algorithms to generate a CRC value
for the FCS field. The frame check sequence (FCS) field contains a 4-octet (32-bit) cyclic redundancy
check (CRC) value. This value is computed as a function of the contents of the source address, destination
address, length, LLC data and pad (that is, all field except the preamble, SFD, FCS, and extension). The
encoding is defined by the following generating polynomial.
G(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
Mathematically, the CRC value corresponding to a given frame is defined by the following procedure:
a) The first 32 bits of the frame are complemented.
b) The bits of the frame are then considered to be the coefficients of a polynomial M(x) of degree n-1,
where n is the number of bits in the frame. (The first bit of the Destination Address field corresponds to the
x ^(n-1) term and the last bit of the data field corresponds to the x 0 term.)
c) M(x) is multiplied by x^32 and divided by G(x), producing a remainder R(x) of degree 31.
d) The coefficients of R(x) are considered to be a 32-bit sequence.
e) The bit sequence is complemented and the result is the CRC.
The 32 bits of the CRC value are placed in the frame check sequence field so that the x^ 31 term is the leftmost
bit of the first octet, and the x^0 term is the right most bit of the last octet. (The bits of the CRC are
thus transmitted in the order x^31 , x^30 ,.., x^1 , x^0 .).