You are on page 1of 3

CRC-32-IEEE802.

3 là một loại mã CRC phổ biến được sử dụng trong nhiều ứng dụng, đặc biệt là trong
viễn thông và mạng máy tính. Dưới đây là các tính năng chính của CRC-32-IEEE802.3:
1. Độ dài: Mã CRC-32-IEEE802.3 có độ dài 32 bit (4 byte). Điều này có nghĩa là giá trị CRC được
tính toán từ dữ liệu sẽ có độ dài 32 bit.
2. Phát hiện lỗi: Một trong những tính năng quan trọng nhất của mã CRC là khả năng phát hiện
lỗi trong quá trình truyền dữ liệu. CRC-32-IEEE802.3 được thiết kế để phát hiện một loạt các
lỗi như lỗi đơn, lỗi kép và lỗi nhiễu ngẫu nhiên. Độ dài 32 bit của mã CRC này cung cấp khả
năng phát hiện lỗi tốt với xác suất lỗi rất thấp.
3. Đa dạng và phổ biến: CRC-32-IEEE802.3 là một chuẩn mã CRC rất phổ biến và được sử dụng
rộng rãi trong các tiêu chuẩn và giao thức mạng. Nó được sử dụng trong các giao thức như
Ethernet, ZIP, PNG và nhiều ứng dụng khác.
4. Hiệu suất tính toán: Mã CRC-32-IEEE802.3 được thiết kế để có hiệu suất tính toán cao. Thuật
toán tính toán CRC-32-IEEE802.3 sử dụng các phép toán bitwise như XOR, AND và shift để xử
lý dữ liệu một cách hiệu quả.
5. Sự tương thích: CRC-32-IEEE802.3 tương thích với các chuẩn và thiết bị hỗ trợ mã CRC-32.
Điều này cho phép dữ liệu được kiểm tra tính toàn vẹn và phát hiện lỗi trong môi trường giao
tiếp có sự tương thích đa dạng.

Định nghĩa cổ điển của CRC sẽ sử dụng đa thức không phản xạ, làm dịch chuyển CRC sang
trái. Nếu kích thước từ được sử dụng để tính toán lớn hơn CRC, thì bạn sẽ cần một thao tác ở cuối để
xóa các bit cao đã được chuyển vào (ví dụ: đối với & 0xffffCRC 16 bit).
Bạn có thể lật toàn bộ, sử dụng đa thức phản xạ và dịch chuyển sang phải thay vì sang
trái. Điều đó mang lại các thuộc tính CRC giống nhau, nhưng các bit từ thông báo được vận hành hiệu
quả từ bit ít quan trọng nhất đến bit quan trọng nhất, thay vì bit quan trọng nhất đến ít quan trọng
nhất. Vì bạn đang dịch chuyển sang phải, các bit không liên quan sẽ bị loại bỏ khỏi đáy và không cần
thao tác bổ sung. Đây có thể là một trong những động lực ban đầu để sử dụng triển khai nhanh hơn
và nhỏ gọn hơn một chút.
Đôi khi, thông số kỹ thuật từ phần cứng ban đầu là các bit được xử lý từ mức thấp nhất đến
mức quan trọng nhất, do đó, bạn phải sử dụng phiên bản được phản ánh.
CRC Reversed Polynomial và CRC Reflected là hai phương pháp khác nhau trong tính toán giá
trị kiểm tra dư CRC. Dưới đây là sự phân biệt và cách sử dụng của hai phương pháp này:
1. CRC Reversed Polynomial:
 CRC Reversed Polynomial sử dụng đa thức CRC đảo ngược, trong đó các hệ số của đa
thức CRC chuẩn được đảo ngược theo thứ tự.
 Cách sử dụng: Trong quá trình tính toán CRC, dữ liệu được xử lý bit theo bit, và các
phép XOR được thực hiện giữa các bit dữ liệu và các bit của đa thức CRC đảo ngược.
2. CRC Reflected:
 CRC Reflected là phương pháp dịch ngược các bit trong quá trình tính toán giá trị
kiểm tra dư CRC.
 Cách sử dụng: Trong quá trình tính toán CRC, dữ liệu và đa thức CRC được dịch
ngược bit theo một quy tắc cụ thể. Sau đó, các phép XOR được thực hiện giữa các bit
dữ liệu và các bit của đa thức CRC đã được dịch ngược.
Cả hai phương pháp này có thể được sử dụng để tăng cường tính toàn vẹn dữ liệu và phát hiện
lỗi trong quá trình truyền. Việc lựa chọn phương pháp phụ thuộc vào quy ước được sử dụng trong
ứng dụng cụ thể.

Đa thức nghịch đảo

Đa thức phản ánh là đa thức phản ánh. Vì vậy, hệ số ít quan trọng nhất trở thành quan
trọng nhất và theo cách khác. Nói cách khác, một đa thức nghịch đảo được tạo ra từ
một đa thức bằng cách gán hệ số x n cho x 0 , x n-1 cho x 1 , v.v.
Biểu diễn dựa trên biểu diễn Koopman, nhưng được phản ánh ('LSB trước').

THẬN TRỌNG: Đôi khi đa thức nghịch đảo được gọi là đa thức đảo ngược. Điều này
có thể dễ dàng bị nhầm lẫn với biểu diễn đảo ngược của đa thức như được mô tả
trong chương 7.2 . Tuy nhiên đây là hai điều khác nhau.

Ví dụ: Giữ nguyên đa thức CRC-16 0x1021 có biểu diễn nhị phân 1 0001 0000 0010
0001.
Biểu diễn Koopman là 1000 1000 0001 0000 1 .
Đảo ngược (hoặc phản ánh) kết quả đa thức trong 0000 1000 0001 0001 = 0x0811.

Thực tế là các đa thức đảo ngược 'tốt như' các đa thức mà chúng là các đa thức đối
ứng đề cập đến các thuộc tính phát hiện lỗi của chúng.
Thật không may, các đa thức như vậy làm cho mọi thứ trở nên phức tạp hơn một chút:
giá trị CRC được tính toán của một đa thức KHÔNG giống với giá trị CRC được tính
toán của đa thức đối ứng của nó đối với cùng một dữ liệu thông báo!

Vì LSB và MSB được hoán đổi, bạn có thể nghĩ đến việc xử lý các đa thức đảo ngược
khi chúng được chuyển từ phía bên kia sang thanh ghi dịch chuyển CRC: Trong ví dụ
về thanh ghi dịch chuyển CRC ở chương 3dữ liệu đầu vào được dịch chuyển từ bên
phải. Nếu đa thức đảo ngược được sử dụng, bạn có thể nhận được kết quả CRC tương
tự khi dịch chuyển dữ liệu đầu vào từ bên trái. Trên thực tế, toàn bộ quá trình xử lý
sau đó chỉ được nhân đôi.
Trong gói tải xuống C# được liên kết ở trên cùng, có một triển khai 'được phản ánh'
cho mỗi lớp CRC: Thuật toán CRC được phản ánh như vậy tạo ra kết quả CRC giống
nhau khi sử dụng đa thức đảo ngược giống như triển khai tiêu chuẩn bằng cách sử
dụng đa thức không đảo ngược bằng cách 'phản chiếu ' chế biến.

Ví dụ sau đây sẽ minh họa cách dịch bit để tính toán CRC. Giả sử chúng ta có dữ liệu
là "110101" và đa thức CRC là "1011" (theo định dạng binh phương).

1. Dịch trái (Left Shift):


 Bắt đầu với bit trái nhất của dữ liệu: "1".
 Dịch bit sang trái một vị trí: "101010".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "0", không thực hiện phép XOR.
2. Dịch trái (Left Shift):
 Tiếp tục với bit tiếp theo của dữ liệu: "1".
 Dịch bit sang trái một vị trí: "010100".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "0", không thực hiện phép XOR.
3. Dịch trái (Left Shift):
 Tiếp tục với bit tiếp theo của dữ liệu: "0".
 Dịch bit sang trái một vị trí: "101000".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "1", thực hiện phép XOR với đa thức CRC: "101000
XOR 1011 = 100011".
4. Dịch trái (Left Shift):
 Tiếp tục với bit tiếp theo của dữ liệu: "1".
 Dịch bit sang trái một vị trí: "000110".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "0", không thực hiện phép XOR.
5. Dịch trái (Left Shift):
 Tiếp tục với bit tiếp theo của dữ liệu: "0".
 Dịch bit sang trái một vị trí: "001100".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "1", thực hiện phép XOR với đa thức CRC: "001100
XOR 1011 = 001111".
6. Dịch trái (Left Shift):
 Tiếp tục với bit cuối cùng của dữ liệu: "1".
 Dịch bit sang trái một vị trí: "011110".
 Kiểm tra bit sau khi dịch sang trái:
 Bit sau khi dịch là "0", không thực hiện phép XOR.

Kết quả cuối cùng là "011110", chính là giá trị kiểm tra dư CRC của dữ liệu ban đầu
"110101" khi tính theo đa thức CRC "1011".

You might also like