Cài đặt thuật toán tính CRC
1 Đề tài : Cài đặt thuật toán tính CRC TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN BỘ MÔN CÔNG NGHỆ THÔNG TIN Môn : Mạng máy tính truyền số liệu Đề tài : Cài đặt thuật toán tính CRC Nhóm Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Hà Nội 5/2010 Lời mở đầu Mạng máy tính phát sinh từ nhu cầu muốn chia sẻ, dùng chung tài nguyên cho phép giao tiếp trực tuyến (online) ứng dụng đa phương tiện mạng Tài nguyên gồm có phần mềm (dữ liệu, chương trình ứng dụng, ) tài nguyên phần cứng (máy in, máy quét, CD ROM , ) Giao tiếp trực tuyến bao gồm gửi nhận thông điệp, thư điện tử Các ứng dụng đa phương tiện phát phát thanh, truyền hình, điện thoại qua mạng, hội thảo trực tuyến, nghe nhạc, xem phim mạng Trong giáo trình Mạng máy tính truyền số liệu mà nghiên cứu, có phần quan trọng : Các vấn đề liên quan đến mạng máy tính Và đề tài mà tìm hiểu : " Cài đặt thuật toán tính CRC ", phần quan trọng liên quan đến vấn đề mạng Bài báo cáo nhóm gồm phần : Phần : Giới thiệu Phần : Nội dung Phần : Chạy chương trình Dù tìm hiểu kỹ báo cáo không tránh khỏi thiếu sót Chúng xin trân trọng tiếp thu tất ý kiến đóng góp cô bạn để hoàn thiện báo cáo Xin trân thành cảm ơn ! Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Mục lục Phần I : Giới thiệu Phần II : Nội dung II.1 Định nghĩa - CRC ? - Giới thiệu chung CRC II.2 Tư tưởng phương pháp CRC II.3 Thuật toán II.4 Tính toán CRC Cách tính CRC-8 việc kiểm soát lỗi liệu truyền II.4.2.Cách 2: Phương pháp Table-Driven II.4.1 Cách 1: Phương pháp Direct Calculation II.5 Các hàm CRC thường dùng tiêu chuẩn hóa II.6 Chương trình chạy II.7 Ứng dụng thực tế Phần III : Tổng kết Phần IV : Tài liệu tham khảo Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Phần I Giới thiệu Trong trình sử dụng máy tính, hẳn bạn không lần cảm thấy khó chịu (đặc biệt bạn tốn hàng để download tập tin quan trọng) gặp phải thông báo lỗi WinZip từ chối xả nén tập tin phép kiểm CRC thấy bại Tại phần mềm nén lại phải thực phép kiểm tra CRC xả nén tập tin? CRC (cyclic redundancy check) loại hàm băm, dùng để sinh giá trị kiểm thử, chuỗi bit có chiều dài ngắn cố định, gói tin vận chuyển qua mạng hay khối nhỏ tệp liệu Giá trị kiểm thử dùng để dò lỗi liệu truyền hay lưu vào thiết bị lưu trữ Giá trị CRC tính toán đính kèm vào liệu trước liệu truyền hay lưu trữ Khi liệu sử dụng, kiểm thử cách sinh mã CRC so khớp với mã CRC liệu CRC phổ biến, đơn giản để lắp đặt máy tính sử dụng hệ số nhị phân, dễ dàng phân tích tính đúng, phù hợp để dò lỗi gây nhiễu truyền liệu Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Phần II : Nội dung II.1 Định nghĩa CRC ? CRC loại mã phát lỗi Cách tính toán giống phép toán chia số dài thương số loại bỏ số dư kết quả, điểm khác biệt sử dụng cách tính không nhớ (carry-less arithmetic) trường hữu hạn Độ dài số dư nhỏ độ dài số chia, số chia định độ dài kết trả - Định nghĩa loại CRC đặc thù định số chia sử dụng, nhiều ràng buộc khác Giới thiệu chung CRC Mặc dù mã CRC xây dựng cách sử dụng trường hữu hạn nào, tất mã CRC thường dùng sử dụng trường hữu hạn GF(2) Đây trường hai phần tử, thường ký hiệu 1, phù hợp với kiến trúc máy tính Phần lại viết đề cập đến mã CRC thuộc dạng này, nguyên tắc khái quát Một lý quan lý giải phổ biến mã CRC phát thay đổi ngẫu nhiên liệu hiệu suất đảm bảo Điển hình, mã CRC n bit, áp dụng cho đoạn liệu có độ dài tùy ý, phát lỗi tín hiệu đơn có độ dài không n bit (nói cách khác, biến đổi đơn lẻ có chiều dài không n bit liệu), phát phần 1-2-n tất lỗi tín hiệu có độ dài dài Các lỗi kênh truyền liệu phương tiện nhớ từ dẫn đến phân Trường ĐH Kinh Tế Quốc Dân Môn : Mạng máy tính truyền số liệu Đề tài : Cài đặt thuật toán tính CRC bố không ngẫu nhiên (v.d, "bursty"), làm cho đặc tính CRC trở nên hữu dụng mã khác Multiple Parity checks Hệ thống tìm lỗi đơn giản nhất, bit parity (xet chẵn lẽ), thực mã CRC dạng tầm thường: sử dụng số chia độ dài bit 11 II.2 Tư tưởng phương pháp CRC - Cho trước đa thức (gọi đa thức sinh) G(x) với hệ số bậc cao thấp - Tìm tập bít kiểm tra Checksum thỏa mãn điều kiện : đa thức tương ứng với xâu ghép (xâu gốc checksum) phải chia hết (theo modulo 2) cho G(x) - Khi nhận tin, bên nhận kiểm tra lỗ cách lấy xâu bít nhận chia (modulo 2) cho G(x) Nếu không chia hết có nghĩa có lỗi (ngược lại chưa thể khẳng định lỗi) - Giả sử G(x) có bậc r, xâu bít gốc tương ứng với đa thức M(x) có bậc m Các bước tính Checksum sau : B1 : Thêm r bít vào cuối xâu bít cần truyền : xâu ghép gồm có m + r bít tương ứng với đa thức x^r M(x) B2 : Chia (Modulo 2) xâu bít tương ứng cho xâu bít tương ứng với G(x) B3 : Lấy xâu bit bị chia trừ (modulo 2) cho số dư Kết xâu bit truyền (xâu gốc + checksum) Ký hiệu đa thức tương ứng với T(x), rõ ràng T(x) chia hết (modulo 2) cho G(x) Thí dụ áp dụng : Cho xâu bit 1101010111, đa thức sinh G(x) = x^4+x^3+x+1, tính xâu bít truyền mạng Xâu bít gốc 1101010111 tương ứng với đa thức M(x) = x^9+x^8+x^6+x^4+x^2+x+1 Đa thức sinh G(x) = x^4+x^3+x+1 tương ứng với xâu bit 11011 X^r M(x) = 11010101110000 Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC 1000100001 11011 11010101110000 11011 11011 11011 010000 10011 0011 Checksum Kết : Checksum = 0011 Xâu bít truyền mạng : T(x) = 11010101110011 II.3 Thuật toán Bài toán: tìm chuỗi bit đầu chuỗi liệu cần truyền M với đa thức sinh P Cách làm: Đầu vào: Nhập chuỗi M dạng nhị phân( 0,1) Chuỗi P dạng nhị phân có r+1 bit ngắn chuỗi M Thao tác: Thêm r số vào sau chuỗi M, tức ta thực phép toán M.2r Tính FCS số dư phép chia M.2r cho P Ghép số dư vào đuôi chuỗi M ta chuỗi M|FCS( chuỗi ra) Đầu ra: In chuỗi M|FCS Ví dụ: Chuỗi liệu cần truyền M = 11100011 ( bit) Đa thức sinh P =110011 có bit( r=5), ta thêm số vào sau chuỗi M(x) ta chuỗi M(x).2r có dạng 1110001100000 Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Lấy chuỗi chia cho P cách sau( phép chia hiểu số lần phép trừ “nhớ” hay “mượn” phép toán nhị phân thông thường ): 1110001100000(trừ) 110011 0010111100000, dịch sang trái bit số đầu bỏ đi, thành 10111100000(trừ) 110011 01110000000, dịch trái bit, thành 1110000000(trừ) 110011 0010110000, lại dịch trái bit, thành 10110000(trừ) 110011 01111100, dịch trái bit, thành 1111100(trừ) 110011 -0011010, dịch trái bit thành 11010, số có số chữ số 5, nhỏ số chữ số P, không chia số dư Vậy FCS( hay số dư phép chia) 11010 Ghép với M ta M|FCS : 1110001111010 Đây chuỗi cần tìm II.4 Tính toán CRC Cách tính CRC-8 việc kiểm soát lỗi liệu truyền II.4.1 Cách 1: Phương pháp Direct Calculation Giả sử ta có chuỗi data sau: MSB LSB 10000000 00000001 10100011 = Data String (80 01 A3 h) Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số Đề tài : Cài đặt thuật toán tính CRC Đa thức sử dụng để tính CRC-8: g(D) = D8 + D2 + D + => 0000 0111 (Polynomial) Tư tưởng ta thực phép XOR data string polynomial Đối với chuỗi data string, ta thêm bits vào cuối (ở vị trí LSB) lần trước thực phép XOR sau Lưu ý bit Polynomial ( 0000 0111 ) align thẳng hàng với bit có giá trị data string tính từ MSB ( 0000000 00000001 10100011 00000000 ) Phép XOR có rule sau: + => + => 0 + => 1 + => Điều kiện dừng phép lặp XOR ta align polynomial với data string tính từ vị trí xuất giá trị data string đến cuối data string không đủ bit Nên kết data string phép XOR cuối CRC-8 10000000 00000001 10100011 => data string 10000000 00000001 10100011 00000000 (add bits value 0) 10000011 (polynomial) 00000011 10000001 10100011 00000000 (XOR between data string and polynomial) 10 0000111 (move polynomial to the next appear of value in data string) 01 10001111 10100011 00000000 00000111 10001000 10100011 00000000 10000011 00001011 00100011 00000000 1000 00111 0011 00011011 00000000 10 0000111 II.4.2.Cách 2: Phương pháp Table-Driven Giả sử ta có chuỗi data sau: MSB LSB 10000000 00000001 10100011 00000000 = Data String (80 01 A3 h) Khởi tạo biến byte với giá trị (8 bits 0) Thực phép XOR data string với byte vừa khởi tạo Giá trị sau XOR byte sử dụng để tra bảng tìm kiếm Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số 10 Đề tài : Cài đặt thuật toán tính CRC Cách tra sau: - Bảng có giá trị index từ 0->255 (ví dụ tên bảng tbl) nên giá trị cần tra 00010010b (18 dec) => kết trả tbl[ 18 ] 0x7E (01111110b) Dịch chuỗi data string bits bên trái Tiếp tục thực phép XOR chuỗi data string kết vừa tra bảng tìm kiếm (lưu ý so byte bên MSB) Thực tương tự byte cuối kết tra CRC-8 10000000 00000001 10100011 00000000 (data string) 00000000 (init variable) 10000000 00000001 10100011 00000000 (XOR result) 10001001 (result in lookup table) 00000001 10100011 00000000 (shift 8th bit of data string to left) 10001000 (XOR with above result lookup table) 10110001 (result in lookup table) 10100011 00000000 (shift 8th bit of data string to left) 00010010 (XOR with above result lookup table) 01111110 (result in lookup table) 00000000 (shift 8th bit of data string to left) 01111110 => CRC Cách tạo bảng tham chiếu CRC: Để tạo bảng tham chiếu CRC, ta làm sau: Tạo mảng chiều 256 phần tử Duyệt phần tử bảng, gán giá trị crc index phần tử xét Duyệt bit crc xét, bit đầu crc 0x01 dịch trái crc bit thực hiện phép bù bit với 0x07, không thực dịch trái bit mà Thực với tất bit crc Cập nhật lại giá trị crc vào bảng duyệt tiếp phần tử lại void CCRC8Dlg::isb_WiMAX_POM_gen_crc8_table() { uint16_t index_ui16;/*table index*/ uint8_t bit_ui8;/*bit counter*/ uint8_t crc_ui8;/* CRC result*/ for ( index_ui16 = 0; index_ui16 < 256; index_ui16++ ) Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số 11 Đề tài : Cài đặt thuật toán tính CRC { crc_ui8 = index_ui16; for ( bit_ui8 = 0; bit_ui8 < 8; bit_ui8++ ) { if ( crc_ui8 & 0x80 ) crc_ui8 = ( crc_ui8 [...]...11 Đề tài : Cài đặt thuật toán tính CRC { crc_ ui8 = index_ui16; for ( bit_ui8 = 0; bit_ui8 < 8; bit_ui8++ ) { if ( crc_ ui8 & 0x80 ) crc_ ui8 = ( crc_ ui8 ... uint8_t crc_ ui8;/* CRC result*/ for ( index_ui16 = 0; index_ui16 < 256; index_ui16++ ) Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số 11 Đề tài : Cài đặt thuật toán tính CRC { crc_ ui8... Castagnoli CRC- 32C sử dụng iSCSI môi trường Internet SCSI Trường ĐH Kinh Tế Quốc Dân liệu Môn : Mạng máy tính truyền số 12 Đề tài : Cài đặt thuật toán tính CRC Bảng liệt kê đa thức thuật toán đa... Trường ĐH Kinh Tế Quốc Dân Môn : Mạng máy tính truyền số liệu Đề tài : Cài đặt thuật toán tính CRC bố không ngẫu nhiên (v.d, "bursty"), làm cho đặc tính CRC trở nên hữu dụng mã khác Multiple Parity