Tài liệu Phát hiện và sửa lỗi được thiết lập ở lớp kết nối dữ liệu: CHƯƠNG 9
PHÁT HIỆN VÀ SỬA LỖI
Mạng cần có khả năng truyền dữ liệu một cách chính xác. Một hệ thống không bảo đảm được tính năng này thì không sử dụng được. Trong quá trình truyền thì dữ liệu luôn bị tác động bởi nhiều yếu tố như nhiễu, Vì vậy hệ thống cần có độ tin cậy tốt với cơ chế phát hiện và sửa lỗi.
Việc phát hiện và sửa lỗi được thiết lập ở lớp kết nối dữ liệu hoặc lớp vận chuyển trong mô hình OSI.
CÁC DẠNG LỖI
Khi tín hiệu điện từ trường đi từ điểm này sang điểm khác, sẽ chịu các tác động nhiễu chưa dự báo được từ nhiệt, từ và các dạng khác của điện. Nhiễu loạn này có thể làm thay đổi hình dạng hay độ rộng của tín hiệu. Nếu tín hiệu mang các dữ liệu mã nhị phân, thì yếu tố này có thể làm thay đổi ý nghĩa của dữ liệu. Trong lỗi một bit, thì 0 biến thành 1 và 1 biến thành 0. Trong lỗi bệt (nhiều bit), thì nhiều bị có thể bị thay đổi. Thí dụ, một bệt nhiễu xung trogn truyền dẫn với tốc độ dữ liệu 1200 bps có thể làm thay đổi toàn bộ hay một số bit trong 12 bit thông tin (xem...
22 trang |
Chia sẻ: hunglv | Lượt xem: 2690 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Phát hiện và sửa lỗi được thiết lập ở lớp kết nối dữ liệu, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 9
PHÁT HIỆN VÀ SỬA LỖI
Mạng cần có khả năng truyền dữ liệu một cách chính xác. Một hệ thống không bảo đảm được tính năng này thì không sử dụng được. Trong quá trình truyền thì dữ liệu luôn bị tác động bởi nhiều yếu tố như nhiễu, Vì vậy hệ thống cần có độ tin cậy tốt với cơ chế phát hiện và sửa lỗi.
Việc phát hiện và sửa lỗi được thiết lập ở lớp kết nối dữ liệu hoặc lớp vận chuyển trong mô hình OSI.
CÁC DẠNG LỖI
Khi tín hiệu điện từ trường đi từ điểm này sang điểm khác, sẽ chịu các tác động nhiễu chưa dự báo được từ nhiệt, từ và các dạng khác của điện. Nhiễu loạn này có thể làm thay đổi hình dạng hay độ rộng của tín hiệu. Nếu tín hiệu mang các dữ liệu mã nhị phân, thì yếu tố này có thể làm thay đổi ý nghĩa của dữ liệu. Trong lỗi một bit, thì 0 biến thành 1 và 1 biến thành 0. Trong lỗi bệt (nhiều bit), thì nhiều bị có thể bị thay đổi. Thí dụ, một bệt nhiễu xung trogn truyền dẫn với tốc độ dữ liệu 1200 bps có thể làm thay đổi toàn bộ hay một số bit trong 12 bit thông tin (xem hình 1)
Lỗi một bit: tức là chỉ có một bit bị sai trong một đơn vị dữ liệu (byte, ký tự, đơn vị dữ liệu, hay gói) là bị thay đổi từ 1 xuống 0 hay từ 0 xuống 1. Hình 2 cho thấy ảnh hưởng của sai một bit đối với đơn vị dữ liệu. Để hiểu được tác động này, giả sử mỗi nhóm 8 bit là một ký tự ASCII có thêm một bit 0 ở cuối. Trong hình, 00000010 (ASCII STX) được gởi đi, tức là bắt đầu văn bản text (STX: start of text), như khi nhận thì là 0001010 (ASCII LF), lại có nghĩa là xuống dòng (LF:line feed; xem thêm bản mã ASCII)
Lỗi một bit thường ít xuất hiện trong phương thức truyền nối tiếp. Thí dụ, xét trường hợp máy phát gởi dữ liệu với tốc độ 1 Mbps, tức là mỗi bit tồn tại trong 1/1.000.000 giây, hay 1 ms. Khi sai một bit, thì nhiễu phải xuất hiện trong thời gian 1 ms, như thế là rất hiếm, nhiễu thường có độ rộng hơn nhiều.
Tuy nhiên, lỗi một bit có thể xuất hiện khi ta gởi dữ liệu dùng phương pháp song song. Thí dụ, dùng 8 dây dẫn để gởi 8 bit, để gởi đồng thời, như thế khi một dây bit nhiễu thì có một bit có thể bị sai. Trường hợp này cũng xuất hiện trong truyền dẫn song song bên trong máy tính, giữa CPU và bộ nhớ.
Lỗi bệt: có hai hoặc nhiều bit sai trong đơn vị dữ liệu đã thay đổi từ 1 thành 0 hay từ 0 thành 1.
Hình 3 cho thấy ảnh hưởng của nhiễu bệt lên đơn vị dữ liệu. Trong trường hợp này, thì 0100010001000011 được gởi đi, như nhận được 0101110101000011. Chú ý là nhiễu bệt không có nghĩa là các bit bị lỗi lần lượt, mà có nghĩa là bệt trong khoảng từ bit sai đầu tiên cho đến bit cuối. Một số bit bên trong bệt có thể không bị sai.
Nhiễu bệt thường xuất hiện trong truyền nối tiếp. Độ dài của nhiễu thường dài hơn độ rộng của bit, tức là khi nhiễu tác động thì ảnh hưởng được lên nhiều bit. Số bit bị ảnh hưởng tùy thuộc vào tốc độ dữ liệu và độ rộng nhiễu. Thí dụ, nếu ta gởi dữ liệu với tốc độ 1 Kbps, thì nhiễu với độ rộng 10 ms có thể ảnh hưởng lên 10 bit; nhưng khi ta gởi dữ liệu với tốc độ 1 Mbps, thì nhiễu này gây ảnh hưởng lên 10.000 bit.
PHÁT HIỆN LỖI
Khi ta biết được dạng lỗi, thì ta có ghi nhận được hay không? Nếu ta có bản copy của dữ liệu truyền để só ánh, thì dễ dàng. Nhưng nếu ta không biết được dữ liệu gốc, thì rõ ràng ta chỉ có thể biết được khi giải mả bản tin để biết rằng ý nghĩa đã bị sai, điều này đòi hỏi phải có một cơ chế để phát hiện lỗi, để có biện pháp xử lý thích hợp.
Mã thừa (Redundancy)
Một cơ chế phát hiện lỗi phải được thực hiện bằng cách gởi cùng lúc với các đơn vị dữ liệu. Thiết bị thu sẽ có thể so sánh từng bit với hai dạng của dữ liệu. Bất kỳ một sựu không nhất quán nào sẽ cho thấy lỗi, và cho phép thiết lập một cơ chế sữa lỗi, tuy nhiên cơ chế này nhất thiết phải tương đối đơn giản và hiệu quả, không làm gia tăng thời gian truyền cũng như làm tăng độ phức tạp của thiết bị.
Ý tưởng thêm các thông tin phụ vào trong bản tin chỉ nhằm mục đích giúp kiểm tra lỗi, nên thay vì gởi đi một bản tin dài, thường thì ta chỉ thêm vào một đoạn bit ngắn vào cuối mỗi đơn vị dữ liệu. Kỹ thuật này được gọi là mã thừa do các bit thêm vào không có ý nghĩa về thông tin, chúng sẽ được loại ra sau khi đã xác định xong độ chính xác của quá trình truyền.
Hình 4 cho thấy quá trình dùng bit thừa để kiểm tra tính chính xác của đơn vị dữ liệu. Sau khi dòng bit được tạo ra, thì được đưa qua một thiết bị để phân tích và gắn thêm vào mã thừa thích hợp dùng kiểm tra. Đơn vị dữ liệu sau khi đuợc thêm vào nhiều bit (trường hợp hình vẽ là 7) trở nên lớn hơn và đi qua đường truyền đến máy thu. Máy thu cho bản tin này qua phần kiểm tra, nếu các bit nhận được thỏa mãn các tiêu chuẩn dùng kiểm tra thì phẩn dự liệu trong đơ vị dữ liệu được chấp nhận và các bit dư được loại đi.
Có bốn dạng kiểm tra dùng mã thừa trong thông tin dữ liệu; VRC (vertical redundancy check), LRC (longitudinal redundancy check), CRC (cyclic redundancy check) và checksum. Ba dạng đầu, VRC, LRC, và CRC thường được thiết lập trong lớp vật lý để dùng trong lớp kết nối dữ liệu. Dạng checksum thường được dùng trong các lớp trên (hình 5)
9.3 VRC (VERTICAL REDUNDANCY CHECK)
Cơ chế đơn giản và thường được dùng nhất trong phát hiện lỗi là VRC, còn được gọi là kiểm tra parity (chẵn/lẻ). Trong kỹ thuật này, một bit thừa, gọi là bit parity được gắn thêm vào các đơn vị dữ liệu sao cho tổng số bit 1 trong đơn vị dữ liệu (bao gồm bit parity) là một số chẵn (even).
Giả sử ta muốn truyền đơn vị dữ liệu nhị phân 1100001 [ASCII là a 97]; xem hình 6. Ta thấy tổng số số 1 là 3, tức là một số lẻ. Trước khi truyền, ta cho đơn vị dữ liệu qua bộ tao parity, để gắn thêm vào đơn vị dữ liệu một bit 1, làm tổng số bit 1 thành 4, là số chẵn. Hệ thống truyền dữ liệu với parity bit này vào đường truyền. Thiết bị thu, sau khi nhận sẽ đưa đơn vit dữ liệu sang hàm kiểm tra parity chẵn. Nếu dữ liệu nhận được có tổng số số 1 là chẵn thì chấp nhận, nếu không, thì loại toàn đơn vị dữ liệu.
Chú ý là để đơn giản, ta đã thảo luận về parity chẵn, thực ra một số hệ thống có thể dùng phương pháp parity -lẻ. Nguyên tắc thì giống nhau, tuy phép tính khác.
Thí dụ 1:
Giả sử ta muốn truyền từ “world” trong mã ASCII, thì năm ký tự này được mã hóa như sau:
Bốn ký tự đầu có số bit một là chẵn, nên có bit parity là 0, còn ký tự cuối có số bit 1 là lẻ nên có bit parity là 1 (các bit parity được gạch dưới)
Thí dụ 2:
Giả sử ký tự tạo được từ thí dụ 1 được máy thu nhận được như sau:
Máy thu đếm số bit 1 và nhận ra có số bit một là chẵn và lẻ, phát hiện có lỗi, nên loại bản tin và yêu cầu gởi lại.
Hiệu năng:
VRC có thể phát hiện tất cả các dạng lỗi 1 bit. Đồng thời cũng có thể phát hiện các lỗi bệt bao lâu mà tổng số bit thay đổi là lẻ(1, 3, 5, v,v....) trong mỗi đơn vị dữ liệu. Thí dụ, xét dữ liệu 1000111011, nếu có ba bit thay đổi thì kết quả sẽ là lẻ và máy thu phát hiện ra được: 1111111011: 9 0110 0111011:7 1000011011:5.
Trường hợp hai bit bị lỗi: 1110111011:8 1100011011:6 1000011010:4
Máy thu không phát hiện được ra lỗi và chấp nhận.
9.4 LRC (LONGITUDINAL REDUNDANCY CHECK)
LCR là khối bit được sắp xếp thành bảng (hàng và cột). Thí dụ, thay vì gởi đi một khối 32 bit, ta tổ chức chúng thành bốn hàng và tám cột như hình 7. tiếp đến, tính bit parity cho mỗi cột và tạo một cột mới gồm tám bit, và là bit parity của toàn khối. Chú ý là bit parity đầu tiên được tính từ tất cả các bit đầu trong khối, tương tự cho bit hai...
Thí dụ 3:
Gỉa sử khối bit truyền đi là:
Tuy nhiên, có nhiễu bệt độ dài tám bit xuất hiện, làm một số bit bị lỗi:
Khi máy thu kiểm tra LRC, một số bit không theo đúng parity chẵn và toàn khối bị loại (các giá trị sai được in đậm)
Hiệu năng:
LCR cho phép gia tăng khả năng phát hiện nhiễu bệt. Trong thí dụ vừa qua, ta thấy được là LCR với n bit thì có khả năng phát hiện dễ dàng nhiễu bệt n bit. Bệt nhiễu với độ dài lớn hơn n bit cũng có nhiều khả năng được LCR phát hiện. Tuy nhiên khi hai bit cùng sai ở hai vị trí giống nhau thì LRC không phát hiện được.
Thí dụ, hai đơn vị dữ liệu: 11110000 và 11000011. Nếu bit đầu và bit cuối của hai đơn vị đều bit lỗi, tức là dữ liệu nhận được là 01110001 và 01000010 thì LCR không thể phát hiện được lỗi.
9.5 CRC (CYCLIC REDUNDANCY CHECK):
Dạng thứ 3 và cũng là dạng mạnh nhất là CRC. Không giống như VRC và LCR, đều dựa trên phép cộng, CRC dùng phép chia nhị phân. Trong CRC, thay vì cộng các bit để có parity, trường hợp này dùng một chuỗi bit thừa, gọi là CRC hay dư số CRC, và gắn thêm vào phần cuối của đơn vị dữ liệu sao cho đơn vị dữ liệu mới là số chia chính xác của dữ liệu trước. Nơi nhận, đơn vị dữ liệu được chia với cùng số chia (divisor). Đến đây, nếu không có dư số, thì dữ liệu được xem là không bị lỗi và được chấp nhận. Trường hợp có dư số tức là đơn vị dữ liệu nhận được đã bị lỗi và nên bị loại.
Các bit thừa trong CRC có được bằng cách chia đơn vị dữ liệu với một số chia (divisor) cho trước và dư số là CRC. Yêu cầu đối với CRC gồm hai yếu tố: phải có số bit nhỏ hơn 1 so với divisor, và được gắn vào cuối chuỗi dữ liệu thì phải làm cho chuỗi dử liệu mới chia được cho divisor.
Lý thuyết và ứng dụng của phương pháp phát hiện lỗi dùng CRC thì dễ hiểu. Tuy nhiên, khó khăn nhất là tìm CRC. Phần tiếp theo đây ta sẽ dần dần tìm hiểu về phương pháp này:
Đầu tiên, gắn thêm n bit 0 vào đơn vị dữ liệu, số n này nhỏ hơn một so với (n+1) bit của bộ chia (divisor).
Bước hai, dữ liệu mới này được chia cho bộ chia dùng phép chia nhị phân. Kết quả có được chính là CRC.
Bước ba, CRC với n bit của bước hai thay thế các bit 0 găn ở cuối đơn vị dữ liệu. Chú ý là CRC có thể chứa toàn bit 0.
Đơn vị dữ liệu đến máy thu với phần đầu là dữ liệu, tiếp đến là CRC. Máy thu xem toàn chuỗi này là một đơn vị và đem chia chuỗi cho cùng bộ chia đã được dùng tạo CRC.
Khi chuỗi đến máy thu là không lỗi, thì bộ kiểm tra CRC có số dư là 0 và chấp nhận đơn vị dữ liệu này. Khi chuỗi bị thay đổi trong quá trình truyền, thì số dư sẽ khác không và bộ thu không chấp nhận đơn vị này.
Bộ tạo CRC
Bộ CRC dùng phép chia modulo – 2 như vẽ trong hình 9. Trong bước đầu, bộ chia bốn bitt được trừ đi. Mỗi bit trong bộ chia được trừ với các bit tương ứng mà không anh hưởng đến bit kế tiếp. Trong thí dụ này, bộ chia 1101, được trừ từ bốn bit của bộ divident, 1001, có được 100 (bit 0 đầu bị bỏ qua).
Bước kế tiếp, lấy 1000 – 1101
Trong quá trình này, bộ chia luôn bắt đầu với bit 1; và hệ thống thực hiện phép chia theo cách trừ nhị phân không có số nhớ (tức là 0 – 0 = 0; 1 – 1 = 0; 0 – 1 = 1; 1 – 0 =1).
Bộ kiểm tra CRC
Bộ này hoạt động giống hệt như bộ phát. Sau khi nhận được giữa liệu có gắn thêm phần CRC, mạch thực hiện lại phép chia modulo – 2. Nếu kết quả là 0, cắt bỏ phần CRC và nhận dữ liệu; ngược lại thì loại bỏ dữ liệu và yêu cầu gởi lại. Hình 10 mô tả quá trình này, vớ giả sử là không có lỗi, dư số là 0 và dữ liệu được chấp nhận.
Các đa thức:
Bộ tạo CRC (bộ chia) thường không chỉ là chuỗi các bit 1 và 0, nhưng tạo ra từ đa thức đại số (như hình 11). Các đa thức này tiện lợi vì hai lý do: Chúng thường ngắn, và thường được dùng để chứng minh các ý niệm toán học trong quá trình CRC).
Quan hệ giữa chuỗi đa thức với biểu diễn nhị phân được minh họa ở hình 12.
Một đa thức sinh của bộ chia cần được chọn theo các đặc tính sau:
Không được chia hết cho thức x
Chia đúng cho đa thức (x + 1)
Điều kiện đầu nhằm bảo đảm là tất cả các nhiễu bệt có độ dài bằng bậc của đa thức sinh đều được phát hiện. Điều kiện thứ hai bảo đảm là tất cả các nhiễu bệt ảnh hưởng lên thứ tự bit lẻ được phát hiện.
Thí dụ 4:
Rõ ràng là ta không thể chọn x (số nhị phân 10) hay x2 + x (số nhị phân 110) làm đa thức được vì chúng chia hết cho x. Tuy nhiên, ta có thể chọn x+1 (tương ứng 11) do không chia hết cho x, mà chia hết cho (x+1), cũng như ta có thể chọn x2 + 1 (số nhị phân 101) do chia hết cho (x+1).
Các đa thức chuẩn dùng trong bộ chia CRC được minh họa trong hình 13. Các số 12, 16, và 32 có liên quan đến kích thước của dư số CRC. Bộ chia CRC tương ứng là 13, 17 và 33 bit.
Hiệu năng:
CRC là phương pháp phát hiện lỗi rất hiệu quả nếu bộ chia được chọn theo các luật vừa nêu do:
CRC có thể phát hiện tất cả các nhiễu bệt ảnh hưởng lên các bit có thứ tự lẻ.
CRC có thể phát hiện các nhiễu bệt có độ dài bé hơn hay bằng bậc của đa thức.
CRC có thể phát hiện với xác suất cao các nhiễu bệt có độ dài lớn hơn bậc của đa thức.
Thí dụ 5:
CRC – 12 (x12+x11+x3+x+1) có bậc 12, có thể phát hiện tất cả các nhiễu bệt ảnh hưởng lên các bit lẻ, và cũng có thể phát hiện tất cả các nhiễu bệt có độ dài lớn hơn hay bằng 12, và phát hiện đến 99,97% các nhiễu bệt có độ dài lớn hơn 12 hay dài hơn nữa.
9.6 CHECKSUM
Phương pháp phát hiện lỗi ở giao lớp lớp cao hơn và giống như các phương pháp VRC, LRC, và CRC thì phương pháp này cũng dựa trên yếu tố thừa (redundancy).
Bộ tạo Checksum:
Tại máy phát, bộ này chia các đơn vị dữ liệu thành các phân đoạn bằng nhau với n bit (thường là 16). Các phân đoạn này được cộng với nhau dùng phương pháp bù 1 để có kết quả cũng có độ dài n bit. Giá trị tổng này được lấy bù và gắn vào đươi của dữ liệu gốc như là giá trị thừa, và được gọi là trường checksum. Các đơn vị dữ liệu mở rộng này được truyền qua mạng. Như thế, nếu tổng của đơn vị dữ liệu là T, thì checksum là - T (xem hình 14 và 15).
The sender follows these steps :
■ The unit is divided into k sections, each of n bits.
■ All sections are added together using one’s complement to get the sum.
■ The sum is complemented and becomes the check sum.
■ The check sum is sent with the data.
The receiver follows these steps :
■ The unit is divided into k sections, each of n bits.
■ All sections are added together using one’s complement to get the sum.
■ The sum is complemented.
■ If the result is zero, the data are accepted : otherwise, they are rejected.
Bộ kiểm tra checksum:
Máy thu chia nhỏ đơn vị dữ liệu thành các phân đoạn và lấy các giá trị bù. Nếu đơn vị dữ liệu là còn nguyên, thì giá trị tổng có được từ phép cộng các phân đoạn dữ liệu và checksum sẽ là 0. Nếu kết quả khác không, thì gói có chứa lỗi và máy thu loại bỏ đơn vị dữ liệu này.
Thí dụ 6:
Giả sử khối 16 bit sau được gởi đi dùng checksum 8 bit
Số này được cộng với phần bù một , để có:
Thí dụ 7:
Giả sử máy thu nhận được mẫu sau của thí dụ 7 và không có lỗi, thì
Khi máy thu cộng ba phân đoạn lại, thì sẽ có tổng là các giá trị 1, tức là sau khi lấy bù, có giá trị 0, cho thấy không có lỗi.
Thí dụ 8:
Giả sử có nhiễu bệt với độ dài 5 ảnh hưởng lên 4 bit
Khi máy thu cộng ba đoạn này lại, thì có giá trị khác không, nên không nhận:
Hiệu năng:
Checksum phát hiện được tất cả các lỗi bit lẻ cùng như hầu hết các bit chẵn. Tuy nhiên, nếu một hay nhiều bit trong phân đoạn bị hỏng và bit tương ứng hay bit có giá trị đảo trong phân đoạn thứ hai cũng bị lỗi, thì khi lấy tổng, không nhận ra thay đổi và máy thu không phát hiện lỗi được. Nếu bit cuối trong một phân đoạn là 0 và bi đổi thành 1 khi truyền, thì ta không thể phát hiện ra lỗi nếu bit 1 cuối của phân đoạn thứ hai cũng chuyển thành 0.
9.7 SỬA LỖI
Các cơ chế vừa trình bày chỉ có thể phát hiện, nhưng không thể sửa lỗi. Có hai phương pháp sửa lỗi là: Thứ nhất, khi phát hiện một lỗi, máy thu phải yêu cầu máy phát chuyển lại toàn bộ đơn vị dữ liệu; cách thứ hai máy thu dùng các mã sửa lỗi, để sử tự động một số lỗi.
Về mặt lý thuyết, thì có có thể sửa chửa tự động bất kỳ số nhị phân nào. Các mã sửa lỗi, thường rất phức tạp hơn so với mã phát hiện lỗi và cần nhiều bit dư hơn nữa. Số bit cần thiết để sửa lỗi nhiều bit hay lỗi bệt thường rất lớn và không phải lúc nào cũng hiệu quả. Nên , thông thường hầu hết các phương pháp sửa lỗi đều giới hạn ở một, hai hoặc ba bit mà thôi.
SỬA LỖI ĐƠN
Ý niệm đơn giản và dễ hiểu nhất. Như đã biết thì lỗi bit đơn có thể được phát hiện bằng cách thêm các bit dư (parity) vào trong đơn vị dữ liệu (VRC). Một bit được thêm vào có thể phát hiện lỗi một bit trong nhiều chuỗi bit do phải phân biệt hai điều kiện: lỗi và không có lỗi. Mỗi bit có hai trạng thái (0 và 1) nên đủ điều kiện để phát hiện lỗi ở cấp độ này.
Nhưng nếu muốn sửa lổi đơn thì phải làm sao? Hai trạng thái là đủ để phát hiện lỗi nhưng chưa đủ để sửa lỗi. Lỗi xuất hiện khi máy thu đọc bit 1 thành 0 và bit 0 thành 1. Để sửa lỗi thì máy thu chỉ cần đảo ngược lại giá trị bit bit sai. Tuy nhiên, điều quan trọng là phải biết được bit nào bị sai. Như thế, bí mật trong sửa lỗi là phương pháp định vị được bit sai này.
Thí dụ, khi cần sửa lỗi một bit trong ký tự ASCII, thì mã sửa lỗi phải xác định bit nào bị thay đổi trong bảy bit. Trường hợp này, cần phân biệt được giữa tám trạng thái khác nhau: không lỗi, lỗi ở vị trí 1, lỗi ở vị trí 2, và tiếp tục cho đến vị trí 7. Như thế cần thiết phải có đủ số bit dư để biểu diễn được tám trạng thái này.
Đầu tiên, ta nhận thấy là với 3 bit là đủ do có thể biểu diễn được tám trạng thái (từ 000 đến 111) và như thế thì có thể chỉ ra được tám khả năng khác nhau. Tuy nhiên, việc gì xảy ra nếu lỗi lại rơi vào các bit dư này? Bảy bit trong ký tự ASCII cộng với 3 bit dư sẽ tạo ra 10 bit. Với ba bit là đủ, tuy nhiên cần có thêm các bit phụ cho tất cả các tình huống có thể xảy ra.
9.7.1 Các bit dư
Để tính số bit dư (r) cần có để có thể sửa lỗi một số bit dữ liệu (m), ta cần tìm ra quan hệ giữa m và r. Trong hình 16 cho thấy m bit dữ liệu và r bit dư. Độ dài của mã có được là m+r.
Nếu tổng số các bit trong một đơn vị được truyền đi là m+r, thì r phải có khả năng chỉ thị ít nhất m+r+1 trạng thái khác nhau. Trong đó, một trạng thái là không có lỗi và m+r trạng thái chỉ thị vị trí của lỗi trong mỗi vị trí m+r.
Điều đó, tức là m+r+1 trạng thái phải được r bit phát hiện ra được; và r bit có chể chỉ được 2r trạng thái khác nhau. Như thế, 2r phải lớn hơn hay bằng m+r+1:
2r ³ m+r+1.
Giá trị của r có thể được xác định từ cách gắn vào trong giá trị của m (chiều dài ban đầu của đơn vị dữ liệu cần gởi đi). Thí dụ, nếu giá trị của m là 7 (trường hợp 7 bit của mã ASCII), thì gía trị bé nhất của r cần thỏa mãn phương trình là 4:
24 ³ 7+4+1.
Bảng B.1 cho thấy một số khả năng của các giá trị m và r tương ứng.
Số lượng bit dữ liệu (m)
Số lượng bit dư (r)
Tổng số bit (m+r)
1
2
3
2
3
5
3
3
6
4
3
7
5
4
9
6
4
10
7
4
11
Mã Hamming
Ta đã xem xét số lượng bit cần thiết để phủ toàn bộ trạng thái bit lỗi có thể có khi truyền. Nhưng điều còn lại là phải xử lý như thế nào để biết được trạn thái đang xuất hiện? R.W.Hamming cung cấp một giải pháp thực tiển.
Định vị của các bit dư
Mã Hamming có thể được áp dụng vào đơn vị dữ liệu có chiều dài bất kỳ dùng quan hệ giữa dữ liệu và các bit dư đã được khảo sát trước đây. Thí dụ, mã 7 bit ASCII cần có bốn bit dư được thêm vào phần cuối đơn vị dữ liệu hay phân bố vào bên trong các bit gốc. Trong hình 17, các bit này được đặt ở các vị trí 1, 2, 4 và 8 (vị trí của chuổi 11 bit được sắp xếp theo số lũy thừa của 2). Để hiểu rõ hơn, ta gọi các bit này lần lượt là r1, r2, r4 và r8.
Trong mã Hamming, mỗi bit r là bit VRC của một tổ hợp các bit; r1 là bit VRC của một tổ hợp bit; r2 là một bit trong một tổ hợp bit khác và cứ thế tiếp tục. Tổ hợp được dùng để tính toán mỗi giá trị trong bốn bit r này trong chuỗi bảy bit được tính toán như sau:
r1: bit 1, 3, 5, 7, 9, 11
r2: bit 2, 3, 6, 7, 10, 11
r4: bit 4, 5, 6, 7
r8: bit 8, 9, 10, 11
Mỗi bit dữ liệu có thể tính đến trong nhiều hơn một lần tính VRC. Thí dụ, trong chuỗi trên, mội bit dữ liệu gốc được tính đến trong ít nhất hai tập, trong khi r chỉ được tính một lần.
Để tìm các mẫu trong chiến lược tính toán này, hảy xem cách biểu diễn của mỗi vit trí bit. Bit r1 được tính dùng tất cả các vị trí bit có cách biểu diễn nhị phân có 1 trong vị trí tận cùng bên phải. Bit r2 được tính dùng tất cả các vị trí bit có cách biểu diễn nhị phân có 1 trong vị trí thứ hai bên phải và tiếp tục như vẽ trong hình 18.
Tính toán các giá trị r
Hình 19 minh họa các thiết lập mã Hamming trong ký tự ASCII. Bước đầu tiên, ta đặt mỗi bit của ký tự gốc vào vị trí thích hợp trong đơn vị 11 bit. Trong bước kế tiếp, ta tính các parity chẵn với nhiều tổ hợp bit khác nhau. Giá trị parity của mỗi tổ hợp là giá trị bit r tương ứng.Thí dụ, giá trị của r1 được tính để cung cấp parity chẵn cho tổ hợp các bit 3, 5, 7, 9 và 11. Giá trị của r2 được tính để cung cấp parity bit cho các bit 3, 6, 7, 10 và 11, và cứ thế tiếp tục. Mã 11 bit sau cùng được gởi đi qua đường truyền.
Phát hiện và sửa lỗi
Giả sử trong lúc đó tín hiệu truyền đi được tiếp nhận, trong đó bit thứ 7 đã thay đổi từ 1 đến 0 (theo hình 20).
Máy thu nhận và tính lại bốn VRC mới dùng cùng tập các bit được máy phát dùng cùng với parity bit r có liên quan với mỗi tập (xem hình 21). Tiếp đến, máy thu ghép nối các giá trị parity mới vào trong số nhị phân lần lượt theo của vị trí r (r8, r4, r2, r1). Trong thí dụ trên, bước này cung cấp cho ta số nhị phân 0111 (7 theo giá trị thập phân), đây là vị trí chính xác của bit bit lỗi.
Sau khi nhận dạng xong bit lỗi, thì chỉ việc đảo ngược giá trị bit này đề có bit đúng.
SỬA LỖI BỆT
Mã Hamming có thể được thiết kế để sửa các lỗi bệt có chiều dài nhất định. Số bit du cần thiết để sửa các lỗi này, thường rất lớn so với trường hợp sửa lỗi bit đơn. Để sửa lỗi hai bit, ta cần phải tính là có hai bit cần được tổ hợp với hai bit bất kỳ trong toàn chuỗi. Sửa lỗi ba bit tức là phải giải quyết ba bit trong toàn chuỗi, v.v.., Từ đó, cần thiết phải có các phương pháp khác nhằm thiết kế mã Hamming trong sửa lỗi nhiều bit, điều này chưa bàn ở đây.
TỪ KHÓA VÀ Ý NIỆM
Burst error
Checksum
CRC (cyclic redundancy check)
Error error correction error detection error handling
Even parity
Hamming code
LRC (longitudinal redundancy check)
Odd parity
One’s complement
Parity bit parity check
Redundancy
Single – bit error
VRC (vertical redundancy check)
TÓM TẮT
Lỗi truyền dẫn thường được phát hiện tại lớp vật lý trong mô hình OSI
Lỗi truyền dẫn thường được sửa trong lớp kết nối dữ liệu trong mô hình OSI
Lỗi có thể được chia ra thành:
Lỗi một bit: chỉ sai một bit trong đơn vị dữ liệu
Bệt: sai hai hay nhiều bit trong đơn vị dữ liệu
Redundancy là ý niệm nhằm gởi thêm các bit dư dùng trong phát hiện lỗi
Có bốn phương pháp kiểm tra lỗi thông thường là:
VRC (vertical redundancy check)
LRC (longitudinal redundancy check)
CRC (cylic redundancy check)
Checksum
Trong VRC, một parity bit được thêm vào đơn vị dữ liệu
VRC chỉ có thể phát hiện một bit và các bit lẻ bị lỗi; không thể phát hiện số bit chẵn.
Trong LRC, có một dữ liệu thừa theo sau một đơn vị dữ liệu n bit
CRC, phương pháp mạnh nhất trong phương pháp kiểm tra lỗi dùng bit dư, có cơ sở là phép chia nhị phân
Checksum được dùng trong giao thức cấp cao hơn (TCP/IP) để phát hiện lỗi
Để tính checksum, thì cần:
Chia dữ liệu thành nhiều phần nhỏ
Cộng các phần này lại dùng phương pháp bù một
Lấy bù của tổng cuối cùng, đây chính là checksum
Tại máy thu, khi dùng phương pháp checksum, dữ liệu và checksum phải được cộng lại thành giá trị 0 khi không có lỗi
Mã Hamming là phương pháp sửa lỗi một bit dùng các bit thừa. Số bit là hàm của độ dài đơn vị dữ liệu
Trong mã Hamming, một đơn vị dữ liệu m bit thì dùng công thức để xác định r, số bit dư cần có.
BÀI LUYỆN TẬP
* CÂU HỎI ÔN TẬP
Cho biết khác biệt giữa lỗi một bit và lỗi bệt (burst error) ?
Trình bày ý niệm redundancy trong phát hiện lỗi?
Cho biết bốn dạng kiểm tra redundancy dùng trong thông tin dữ liệu?
Phương pháp phát hiện đơn vị dữ liệu bị hỏng bằng cách dùng bit parity?
Sự khác biệt giữa parity chẵn và parity lẻ ?
Trình bày về phương pháp VRC và cho biết dạng lỗi không phát hiện được?
Quan hệ giữa VRC và LRC?
Trình bày về phương pháp LRC và cho biết dạng lỗi không phát hiện được?
Bộ phát CRC kết nối với đơn vị dữ liệu như thế nào?
Cho biết quan hệ giữa kích thước CRC remainder và CRC generator?
Bộ CRC checker phát hiện lỗi như thế nào?
Cho biết về điều kiện để dùng đa thức trong bộ CRC generator?
Ưu điểm của CRC so với LRC?
Cho biết các phương pháp phát hiện lỗi trong các giao thức lớp trên?
Phép tính dùng để cộng các segment trong bộ checksum generator và checker?
Trình bày các bước tạo checksum?
Bộ checksum checker phát hiện lỗi ra sao?
Checksum không phát hiện được lỗi dạng nào?
Công thức tình số bit redundancy cần thiết để sửa lỗi bit, biết số bit dữ liệu?
Mục đích của mã Hamming là gì?
* CÂU HỎI TRẮC NGHIỆM
Phát hiện lỗi được dùng trong lớp nào của mô hình OSI:
vật lý
kết nối dữ liệu
mạng
tất cả đều sai
Phương pháp phát hiện lỗi nào bao gồm bit parity tại mỗi đơn vị dữ liệu cùng với parity bit của toàn đơn vị dữ liệu:
VRC
LRC
CRC
Checksum
Cho biết phương pháp nào dùng phép bù :
VRC
LRC
CRC
checksum
Cho biết phương pháp dùng chỉ một bit dư trong đơn vị dữ liệu
VRC
LRC
CRC
checksum
Phương pháp nào có liên quan đến ý niệm đa thức
VRC
LRC
CRC
checksum
phát biểu nào mô tả lỗi một bit
một bit bị đảo
một bit bị đảo trong một đơn vị dữ liệu
một bit bị đảo trong một lần truyền
tất cả đều đúng
Trong mã ASCII, ký tự G (100 0111) được gởi đi nhưng nhận lại được ký tự D(100 0100), thì đó là dạng lỗi gì:
lỗi một bit
lỗi nhiều bit
bệt
khôi phục được
Trong mã ASCII, ký tự H (1001000) được gởi đi nhưng nhận lại được ký tự I(100 1001) , thì đó là dạng lỗi gì:
lỗi một bit
lỗi nhiều bit
bệt
khôi phục được
Trong phương pháp CRC, CRC có nghĩa là gì:
bộ chia
thương số (kết quả phép chia)
số bit chia
số dư
Trong phương pháp CRC, bộ chia có kích thước so với CRC như thế nào:
cùng kích thước
nhỏ hơn một bit
lớn hơn một bit
lớn hơn hai bit
Nếu đơn vị dữ liệu là 111111, bộ chia là 1010, và dư số là 110, hãy cho biết giá trị số bị chia (divident) tại máy thu?
111111011
111111110
1010110
110111111
Nếu đơn vị dữ liệu là 111111, bộ chia là 1010, và dư số là 110, cho biết số bị chia (divident) tại máy phát?
111111000
1111110000
111111
1111111010
Khi dùng phương pháp parity lẻ trong phát hiện lỗi trong mã ASCII, thì số bit 0 trong một ký tự 8 bit là:
chẵn
lẻ
không chẵn, không lẻ
42
Tại máy thu, khi không có lỗi thì tổng của checksum và dữ liệu là:
–0
+0
phần bù của checksum
phần bù của dữ liệu
Mã Hamming là phương pháp dùng để:
phát hiện lỗi
sửa lỗi
đóng gói lỗi
a và b
Trong CRC, không có lỗi khi thương số (quotient) tại máy thu là:
bằng với dư số tại máy phát
bằng không
khác không
là thương số (quotient) của máy phát
Trong CRC, thương số tại máy phát sẽ trở thành:
số bị chia (dividend)
bộ chia tại máy thu
bị loại bỏ
là số dư
Phương pháp phát hiện lỗi nào dùng bit parity:
VRC
LRC
CRC
a và b
Phương pháp phát hiện lỗi nào có thể phát hiện lỗi một bit được:
VRC
LRC
CRC
tất cả các dạng trên
Phương pháp phát hiện lỗi nào có thể phát hiện lỗi bệt được:
VRC
LRC
CRC
b và c
Tính chiều dài LRC, có 10 nhóm, mỗi nhóm là 8 bit, thì số bit trong LRC là:
10
8
18
80
Trong bộ phát CRC, phải thêm yếu tố nào vào đơn vị dữ liệu trước khi tiến hành phép chia:
các bit 0
các bit 1
đa thức
dư số CRC
Trong bộ phát CRC, phải thêm yếu tố nào vào đơn vị dữ liệu sau khi tiến hành phép chia:
các bit 0
các bit 1
đa thức
dư số CRC
Trong bộ kiểm tra CRC, điều gì cho biết là dữ liệu đã bị lỗi:
chuỗi các bit 0
chuỗi các bit 1
chuỗi liên tiếp các bit 1 và 0
dư số khác không
* BÀI TẬP
Cho biết ảnh hưởng lớn nhất của bệt nhiễu 2 –ms lên dữ liệu truyền với tốc độ:
1500 bps
12.000 bps
96.000 bps
Giả sử ta dùng parity chẵn (VRC), cho biết parity trong các đơn vị dữ liệu sau:
1001011
0001100
1000000
1110111
Máy thu nhận được mẫu bit 01101011. Hệ thống dùng VRC parity chẵn, cho biết mẫu có nhận đúng không?
Tìm LRC của khối các bit sau:
10011001 01101111
Cho chuỗi 10 bit 1010011110 và bộ chia là 1011, tìm CRC, kiểm tra lai kết quả
Có dư số là 111, đơn vị dữ liệu là 10110011, và bộ chia là 1001, cho biết đơn vị dữ liệu có lỗi không?
Tìm checksum của các chuỗi bit sau. Giả sử dùng các phân đoạn 16 bit
1001001110010011
1001100001001101
Tìm phần bù của 1110010001110011.
Cộng 11100011 và 00011100 và lấy phần bù. Giải thích kết quả
Trong các đơn vị dữ liệu sau, tìm số dư tối thiểu cần có để có thể sửa lỗi bit đơn:
12
16
24
64
Tạo mã Hamming cho chuỗi bit 10011101?
Tìm VRC và LRC của các chuỗi bit sau dùng parity bit chẵn:
¬ 0011101 1100111 1111111 0000000
Bộ phát gởi 01110001; máy thu 01000001. Nếu chỉ dùng VRC, cho biết máy thu có thể phát hiện lỗi được không?
Khối bit sau dùng LRC, cho biết các bit có lỗi?
¬ 10010101 01001111 11010000 11011011
Hệ thống dùng LRC với khối 8 byte. Cho biết số bit dư phải gởi đi trong mỗi khối? Cho biết tỉ số bit hữu ích trên tổng số bit?
Bộ chia là 101101, cho biết CRC có độ dài là bao nhiêu?
Tìm giá trị nhị phân tương đương cho đa thức: x8+x3+x+1.
Các file đính kèm theo tài liệu này:
- Chuong 9.doc