Ethernet CRC32 calculation - software vs algorithmic result

前端 未结 4 1781
太阳男子
太阳男子 2020-12-29 08:27

I\'m trying to calculate the Frame Check Sequence (FCS) of an Ethernet packet byte by byte. The polynomial is 0x104C11DB7. I did follow the XOR-SHIFT algorithm

4条回答
  •  萌比男神i
    2020-12-29 09:22

    There are a number of places on the Internet where you will read that the bit order must be reversed before calculating the FCS, but the 802.3 spec is not one of them. Quoting from the 2008 version of the spec:

    3.2.9 Frame Check Sequence (FCS) field
    
    A cyclic redundancy check (CRC) is used by the transmit and receive algorithms to
    generate a CRC value for the FCS field. The FCS field contains a 4-octet (32-bit)
    CRC value. This value is computed as a function of the contents of the protected
    fields of the MAC frame: the Destination Address, Source Address, Length/ Type 
    field, MAC Client Data, and Pad (that is, all fields except FCS). The encoding is
    defined by the following generating polynomial.
    
      G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 
                 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
    
    Mathematically, the CRC value corresponding to a given MAC frame is defined by 
    the following procedure:
    
    a) The first 32 bits of the frame are complemented.
    b) The n bits of the protected fields are then considered to be the coefficients
       of a polynomial M(x) of degree n – 1. (The first bit of the Destination Address
       field corresponds to the x(n–1) term and the last bit of the MAC Client Data 
       field (or Pad field if present) corresponds to the x0 term.)
    c) M(x) is multiplied by x32 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 FCS field so that the x31 term is
    the left-most bit of the first octet, and the x0 term is the right most bit of the
    last octet. (The bits of the CRC are thus transmitted in the order x31, x30,..., 
    x1, x0.) See Hammond, et al. [B37].
    

    Certainly the rest of the bits in the frame are transmitted in reverse order, but that does not include the FCS. Again, from the spec:

    3.3 Order of bit transmission
    
    Each octet of the MAC frame, with the exception of the FCS, is transmitted least
    significant bit first.
    

提交回复
热议问题