DÒ TÌM VÀ SỬA LỖ
9.5 Kỹ thuật kiểm tra vòng – CRC (Cyclic Redundancy Check)
Kỹ thuật thứ 3 và là kỹ thuật mạn nhất trong các kỹ thuật kiểm tra dư thừa đó là kỹ thuật kiểm tra vòng – CRC. Không giống như kỹ thuật VRC và LRC dựa chủ yếu vào phần bit bổ sung, kỹ thuật CRC dựa trên phép chia nhị phân. Trong CRC, thay vì thêm các bit để cùng đạt được một tính chẵn lẻ theo mong đợi, một chuỗi các bit dư thừa được gọi là CRC hay số dư CRC, được ghép vào cuối đơn vị dữ liệu do đó đơn vị dữ liệu kết quả có thể chia hết cho số nhị phân thứ hai được xác định trước. Tại đích của nó, đơn vị dữ liệu đến được chia bởi cùng số đó. Nếu tại bước này, phép chia có số dư bằng 0, đơn vị dữ liệu được coi là còn nguyên vẹn và do đó được chấp nhận. Nếu số dư khác không có nghĩa là đơn vị dữ liệu đó đã bị hư hại trong quá trình truyền và do đó bị loại bỏ.
Các bit dư thừa được sử dụng bởi CRC lấy được từ phép chia đơn vị dữ liệu theo số chia đã xác định trước; phần dư của phép chia sẽ là CRC. Để có thể phân loại quá trình này, chúng ta bắt đầu một cách tổng quan và sau đó đi sâu vào chi tiết hơn. Hình 9.8 cung cấp cái nhìn khái quát về ba bước cơ bản Hình 9.8 Bộ tạo và bộ kiểm tra CRC
Bước thứ nhất, một chuỗi n bit được ghép vào đơn vị dữ liệu. Số n là một số nhỏ hơn số các bit trong số chia xác định trước có chiều dài n+1 bit
Bước thứ hai, đơn vị dữ liệu mới kéo dài chia cho số chia sử dụng một quá trình gọi là chia nhị phân. Phần dư của phép chia là CRC.
Bước thứ 3, CRC của n bit dẫn ra từ bước 2 thay thế các bit 0 được ghép vào cuối đơn vị dữ liệu. Chú ý là CRC có thể bao gồm tất cả các bit 0.
Đầu tiên, dữ liệu được nhận, theo đó là CRC. Bên nhận coi toàn bộ chuỗi dữ liệu đó là một đơn vị và chia nó cho cùng số chia mà đã được sử dụng trước đó để tìm ra số dư CRC.
Nếu chuỗi đến mà không có lỗi, bộ kiểm tra CRC sẽ cho kết quả đầu ra là số dư bằng 0 và đơn vị dữ liệu được qua. Nếu chuỗi đó bị thay đổi trong quá trình truyền, kết quả phép chia là một số khác 0, do đó đơn vị dữ liệu không được qua.
Bộ sinh CRC- CRC generator
Một bộ sinh CRC sử dụng phép chia modulor 2. Hình 9.9 thể hiện quát rình này. Trong bước đầu tiên, số chia 4 bit được trừ đi từ 4 bit đầu tiên của số bị chia. Mỗi bit của số chia được trừ đi tương ứng với bit của số bị chia mà không cần nhớ sang bit tiếp theo cao hơn. Trong ví dụ của chúng ta, số chia 1101 được trừ từ 4 bit của số bị chia, 1001 cho kết quả là 100 ( số 0 ở đầu của số dư được bỏ đi).
Các bít chưa được sử dụng tiếp theo từ số bị chia sau đó được chuyển xuống dưới để tạo ra số các bit trong số dư bằng với số các bit ở số chia. Do đó, theo bước tiếp theo là 1000-1101=101, vân vân.
Trong quá trình này, số chia luôn bắt đầu với bit 1; số chia được trừ từ một phần của số bị chia/số dư trước bằng nhau về độ dài; số chia chỉ có thể được trừ đi từ số bị chia/số dư mà bit trái nhất của nó bằng 1. Tại bất kỳ thời điểm nào bit trái nhất này của bị chia/số dư là 0, một chuỗi các số 0, có cùng chiều dài như số chia, thay thế số chia trong bước đó của toàn bộ quá trình. Ví dụ, nếu số chia có độ dài 4 bit, nó được thay thế bằng 4 số 0. (Chú ý rằng chúng ta đang xử lý với các mẫu bit, chứ không phải với các giá trị định lượng; 0000 không giống 0.). Hạn chế này có nghĩa rằng tại bất kỳ bước nào bên trái nhất của phép trừ sẽ là 0-0 hoặc 1-1, cả hai đều bằng 0. Vì vậy, sau phép trừ, bit bên trái nhất của số dư sẽ luôn dẫn tới 0, do đó bit này được loại bỏ và bit tiếp theo chưa được sử dụng của số bị chia được đẩy xuống để đưa ra số dư. Cần chú ý là chỉ có bit đầu tiên của số dư được loại bỏ- nếu bit tiếp theo cũng là 0, nó vẫn được giữ lại, và số bị chia/số dư cho bước tiếp theo sẽ bắt đầu với 0. Quá trình này lắp lại cho đến khi toàn bộ số bị chia được sử dụng.
Bộ kiểm tra CRC- CRC Checker
Bộ kiểm tra CRC thực hiện chức năng một cách chính xác như bộ sinh CRC. Sau khi nhận được dữ liệu được ghép với CRC, nó tương tự thực hiện phép chia modulor-2. Nếu số dư tất cả bằng 0, các bit CRC được bỏ đi và dữ liệu được chấp nhận, nếu không dòng các bit nhận được bị bỏ đi và dữ liệu được gửi lại. Hình 9.10 thể hiện quá trình tương tự của phép chia ở bên nhận. Chúng ta giải sử rằng không có lỗi xảy ra. Số chia do đó tất cả bằng 0 và dữ liệu được chấp nhận.
Các đa thức CRC
Bộ sinh CRC (số chia) thường được biểu diễn không chỉ ở dưới dạng chuỗi các bit 0 và 1 mà còn là một đa thức đại số (hình 9.11). Khuôn dạng của đa thức là hữu dụng vì hai lý do: Nó ngắn, và có thể được sử dụng để chứng minh khái niệm toán học (việc chứng minh nằm ngoài phạm vi quyền sách này).
Hình 9.11 Một đa thức
Mối quan hệ của một đa thức đối với biểu diễn nhị phân của nó được biểu hiện trong hình 9.12.
Hình 9.12 Biểu diễn dạng đa thức của một số chia
Một đa thức sẽ được lựa chọn sao cho thỏa mãn:
• Nó sẽ không được chia hết bởi x
• Nó có thể được chia hết bởi (x+1)
Điều kiện đầu tiên đảm bảo rằng tất cả các lỗi hàng loạt bit có độ dài bằng với độ dài của đa thức được dò thấy. Điều kiện thứ 2 đảm bảo rằng mọi lỗi bit hàng loạt ảnh hưởng một số lẻ các bit được dò thấy (việc chứng minh nằm ngoài phạm vi quyển sách này).
Ví dụ 9.5
Hiển nhiên là chúng ta không thể chọn x ( nhị phân 10) hay x2+x (nhị phân 110) làm đa thức bởi vì cả hai đều chia hết cho x. Tuy nhiên chúng ta có thể chọn x+1 (nhị phân 11) bởi vì nó không chia hết bởi x, nhưng lại chia hết cho x+1. Chúng ta có thể chọn x2+1 (nhị phân 101) bởi vì nó chia hết cho x+1 (phép chia nhị phân).
Các đa thức tiêu chuẩn được sử dụng phổ biến bởi các giao thức phổ biến cho tạo CRC được thể hiện trong hình 9.13. Các số 12, 16, 32 nói tới số dư CRC. Các số chia CRC là 13, 17 và 33 bit.
Hình 9.13 Các đa thức chuẩn
Hiệu quả của kỹ thuật của CRC
CRC là phương pháp dò tìm lỗi rất hiệu quả. Nếu số chia được chọn theo nguyên tắc đã nếu trước đó thì:
a. CRC có thể dò tất cả các lỗi hàng loạt bit mà ảnh hưởng một số lẻ các bit
b. CRC có thể dò tất cả các lỗi hàng loạt có chiều dài nhỏ hơn hoặc bằng bậc của đa thức.
c. CRC có thể dò tìm với khả năng tìm thấy lỗi hàng loạt bit có chiều dài lớn hơn bậc của đa thức.
Ví dụ 9.6.
Đa thức CRC-12 (x12+x11+x3+x+1) có bậc 12, sẽ dò tất cả các lỗi hàng loạt bit ảnh hưởng tới một số lẻ các bit, sẽ tìm tất cả các lỗi loạt bit có độ dài nhỏ hơn hoặc băng 12, và sẽ dò tìm tới 99.97% thời gian các lỗi loạt bit có chiều dài bằng 12 hoặc hơn.
9.6 CHECKSUM
Phương pháp dò tìm lỗi được sử dụng bởi các giao thức ở tầng cao hơn được gọi là checksum. Giống như VRC, LRC và CRC, checksum dựa trên khái niệm về dư thừa- redundancy
Bộ sinh checksum
Ở bên gửi, bộ sinh checksum chia nhỏ đơn vị dữ liệu thành các phân đoạn bằng nhau n bit (thường là 16). Các phân đoạn này được cộng vào với nhau sử dụng phép tính phần bù số học sao cho tổng số cùng là n bit. Tổng đó sau đó được lấy phần bù và được ghép vào cuối đơn vị dữ liệu gốc với vai trò là các bit
dư thừa và được gọi là trường checksum. Đơn vị dữ liệu được mở rộng được truyền qua mạng. Vì thế nếu tổng của đơn vị dữ liệu là T thì checksum sẽ là –T (xem hình 9.14 và 9.15).
Bộ kiểm tra Checksum
Bên nhận chia nhỏ đơn vị dữ liệu thành các phân đoạn như nói ở trên và thêm tất cả các phân đoạn sử dụng phần bù kết quả. Nếu đơn vị dữ liệu mở rộng toàn vẹn, giá trị tổng được tìm thấy bằng cách cộng các đơn vị dữ liệu và trường checksum sẽ bằng 0. Nếu kết quả khác không, gói tin chứa một lỗi và bên nhận loại bỏ gói này.
Hình 9.14 Checksum
Bên gửi sẽ thực hiện các bước sau:
• Đơn vị dữ liệu được chia thành k phần, mỗi phần n bit
• Tất cả các phần được cộng với nhau sử dụng phép lấy phần bù để lấy được tổng.
• Tổng được lấy phần bù và trở thành checksum.
• Checksum được gửi đi cùng với dữ liệu Hình 9.15 đơn vị dữ liệu và Checksum
Bên nhận thực hiện các bước sau:
• Đơn vị dữ liệu được chia thành k phần, mỗi phần n bit
• Tất cả các phần được cộng với nhau sử dụng phép lấy phần bù để lấy được tổng.
• Tổng đó được lấy phần bù
• Nếu kết quả bằng 0, dữ liệu được chấp nhận, bằng không chúng bị loại bỏ.
Ví dụ 9.7
Giải sử khối 16 bit được gửi đi sử dụng một checksum 8 bit 10101001 00111001
Các số được cộng với nhau sử dụng phép lấy phần bù số học: 1010100 1 0011100 1 --- Tổng 1110001 0 Checksum 0001110 1
Mẫu được gửi đi sẽ là:
10101001 00111001 00011101Ví dụ 9.8 Ví dụ 9.8
Giờ chúng ta giả sử rằng bên nhận nhận được mẫu ở ví dụ 9.7 và không có lỗi:
10101001 00111001 00011101
Khi bên nhận cộng ba phần này với nhau, sẽ có tổng toàn là số 1, sau đó lấy phần bù cho kết quả toàn 0, điều đó thể hiện là không có lỗi:
Tổng Checksum 10101001 00111001 00011101 --- 11111111 00000000 Ví dụ 9.9
Giả sử rằng có một lỗi loạt bit có chiều dài bằng 5 ảnh hưởng đến 4 bit nhau sau:
10101111 11111001 00011101
Khi bên nhận cộng 3 phần này với nhau cho kết quả:
Kết quả Nhớ Tổng Checksum 10101111 11111001 00011101 --- 1 11000101 1 --- 11000110
00111001 điều này có nghĩa là mẫu bị hư hại
Hiệu quả của kỹ thuật checksum
Checksum dò được mọi lỗi xảy đối với một số lẻ các bit, cũng như hầu hết các lỗi xảy ra đối với số chẵn các bit. Tuy nhiên, nếu một hoặc nhiều bit của một phân đoạn bị hư hại và tương ứng với bit hoặc các bit có giá trị đối ngược nhau trong một phân đoạn thứ 2 thì không giải quyết được. Nếu số cuối của một phân đoạn là 0 và nó được đổi thành 1 trong quá trình truyền, khi đó bit 1 cuối trong phân đoạn khác phải được thay đổi thành 0 bằng không lỗi đó không thể được dò thấy. Trong LRC, hai bit 0 có thể thay đổi cả thành 1 mà không sửa đổi tính chẵn lẻ bởi vì các số nhớ được loại bỏ. Checksum bảo toàn tất cả các số nhớ; vì vậy mặc dù 2 bit 0 trở thành các bit 1 không thay đổi giá trị tại vị trí của chúng, chúng sẽ thay đổi giá trị của vị trí của bit tiếp theo cao hơn. Nhưng bất kể thời thời gian nào một đảo ngược bit được cân xứng bằng một đảo ngược bit với số tương ứng của phân đoạn dữ liệu khác, do đó lỗi là không hiển minh.