Lỗi bit thường xảy ra trong frame. Mặc dù lỗi rất ít khi xảy ra, đặc biệt là trên cáp quang, tuy nhiên cần cĩ những kỹ thuật để phát hiện lỗi khi lỗi xảy ra. Một kỹ thuật được biết trong việc phát hiện lỗi khi truyền là phương pháp kiểm tra CRC (cyclic redundancy check). Nĩ được sử dụng hầu hết trong các giao thức Byte-Oriented, Bit-Oriented, CSMA/CD và FDDI.
Hai phương pháp đơn giản được sử dụng rộng rãi là: two-demensional parity và checksum. Two-demensional parity được sử dụng trong giao thức BISYNC lúc nĩ truyền các ký tự ASCII. Checksum được sử dụng bởi một vài giao thức Internet.
Ý tưởng cơ bản của CRC là thêm các thơng tin dư vào frame, thơng tin này được sử dụng để phát hiện lỗi. Ví dụ chúng ta cĩ thể truyền hai bản sao của dữ liệu, nếu hai bản sao giống nhau ở máy nhận, cĩ thể là trong trường hợp này là cả hai đều đúng. Ngược lại, nếu hai bản sao này khác nhau thì một trong hai bản sao bị sai, do đĩ phải thực hiện truyền lại.
Nhược điểm của các tiếp cận trên:
• Thêm n bit dư cho một thơng điệp n bit
• Khơng phát hiện sai nếu lỗi sai xảy ra ở cùng một vị trí.
Chúng ta cĩ thể hồn tồn cung cấp một khả năng phát hiện lỗi tốt với việc gửi k bit dư cho một thơng điệp n bit (k<<n). Ví dụ trên Ethernet, mỗi khung mang 12000 bit (1500byte) dữ liệu chỉ yêu cầu mã 32 bit CRC.
Việc thêm các bit khơng cĩ nghĩa là thêm thơng tin mới vào thơng điệp. Thay vào đĩ, chúng cĩ thể sử dụng một vài thuật tốn tối ưu tác động trực tiếp vào thơng điệp nguồn. Cả hai máy gửi và máy nhận biết chính xác thuật tốn làm gì. Máy gửi tác động thuật tốn đến thơng điệp để tạo ra bit dư, sao đĩ nĩ truyền cả thơng điệp và các bit dư. Máy nhận tác động cùng thuật tốn vào thơng điệp nhận, nếu phát hiện sai nĩ yêu cầu truyền lại hay sữa sai nếu cĩ thể.
Phát hiện lỗi chỉ là một phần của vấn đề, vấn đề tiếp theo là xử lý lỗi khi lỗi được phát hiện. Cĩ hai cách phương pháp được sử dụng lúc phát hiện một thơng điệp bị lỗi.
• Thơng báo cho máy gửi thơng điệp bị lỗi và máy gửi sẽ truyền lại. • Nếu lỗi chỉ xảy ra tại một số bit nào đĩ, một số thuật tốn sẽ phát
hiện lỗi và cho phép tạo lại một thơng điệp đúng như ban đầu thậm chí sau khi thơng điệp đã bị hỏng.
a. Two-Dimension Parity
Hình III-7. Phương pháp Two-dimesion parity
b. Internet Checksum
Thuật tốn này khơng sử dụng ở mức liên kết tuy nhiên nĩ cung cấp cùng chức năng với CRC và parity.
Ý tưởng: ta cộng tất cả các từ mà nĩ được truyền, sau đĩ truyền dữ liệu cùng với kết quả của phép cọng đĩ. Kết quả được gọi là checksum. Máy nhận thực hiện tính tốn tương tự trên dữ liệu nhận và so sánh kết quả với kết quả cheksum. Nếu kết quả sai, máy nhận biết cĩ lỗi xuất hiện. Thơng thường người ta xem dữ liệu bị checksum là các số nguyên 16 bit, cộng tất cả các số nguyên này lại và ta được được kết quả là một số 16 bit. Đĩ chính là checksum.
Ưu điểm: chỉ thêm vào 16 bit nhưng cĩ thể kiểm tra dữ liệu chiều dài bất kỳ.
Nhược điểm: nếu một cặp bit sai ở cùng một vị trí thì chúng khơng thể bị phát hiện.
Lý do sử dụng một thuật tốn này:
• Nĩ rất dễ cài đặt trong phần mềm. Kinh nghiệm trong APPANET thì sử dụng thuật tốn checksum như thế là đầy đủ.
• Thuật tốn này được bảo vệ bởi một giao thức end-to-end. Các lỗi chính hầu hết đã được phát hiện bởi các thuật tốn phát hiện lỗi mạnh mẽ như là CRC tại mức liên kết.
c. CRC
CRC là phương pháp phát hiện lỗi thoả mãn việc sử dụng một số ít nhất các bit thêm vào nhưng cĩ thể phát hiện tất cả các lỗi khi truyền. Ví dụ chỉ sử dụng 32 bit CRC cĩ thể dùng để kiểm tra dữ liệu dài hàng ngàn byte.
Hình III-8. Ví dụ minh họa phương pháp CRC
Ý tưởng:
Một thơng điệp n+1 bit cĩ thể được biễu diễn bởi một đa thức bậc n. Đa thức sử dụng giá trị của mỗi bit trong thơng điệp làm hệ số của đa thức.
Để hổ trợ cho việc tính CRC, máy gửi và máy nhận cùng sử dụng một đa thức chia. Cĩ một nhĩm các đa thức chia mà chúng là những chọn lựa rất tốt trên các các mơi trường khác nhau và sự chọn lựa thường phụ thuộc vào việc thiết kế giao thức. Ví dụ Ethenet sử dụng CRC 32.
Lúc máy gửi muốn chuyển một thơng điệp M(x) mà nĩ dài (n+1)bit, điều gì thật sự xảy ra với một thơng điệp n+1 bit và k bit thêm vào.
• Gọi P(x) là đa thức gồm thơng điệp truyền và bit dư.
• Nếu P(x) được truyền qua liên kết và khơng cĩ lỗi xuất hiện trong quá trình truyền, thì thiết bị nhận cĩ thể chia P(x) cho C(x) với phần
dư là 0. Ngược lại, nếu phần dư khác khơng thì máy nhận biết rằng cĩ lỗi xuất hiện trong khi truyền.
Nhận xét đa thức:
• Các bậc của đa thức chỉ là 0 hoặc 1.
• B(x) cĩ thể chia cho C(x) nếu bậc của nĩ cao hơn C(x).
• B(x) chỉ cĩ thể chia một lần cho C(x) nếu mũ của chúng bằng nhau. • Phần dư của B(x) chia cho C(x) cĩ thể lấy từ kết quả của việc lấy
B(x)-C(x).
• B(x) trừ C(x) thực chất là thực hiện phép XOR từng cặp hệ số.
Thuật tốn:
Cộng k bit zero vào cuối thơng điệp ta được thơng điệp T(x). Chia T(x) cho C(x) và tìm phần dư.
Trừ T(x) cho phần dư.
Mạng Ethernet và 802.5 sử dụng CRC 32, HDLC sử dụng CRC_CCITT. ATM sử dụng CRC-8, 10, 12.
Phương pháp kiễm tra lỗi này dễ dàng thi hành tại phần cứng, đơn giản chỉ là sử dụng thanh ghi và cổng XOR. Bảng 2.3 đưa ra một số đa thức sử dụng trong CRC. CRC C(x) CRC-8 x8 + x2 + x1 + 1 CRC-10 x10 + x9 + x5 + x4 + x1 + 1 CRC-12 x12 + x11 + x3 + x2 + 1 CRC-16 x16 + x15 + x2 + 1 CRC-CCITT x16 + x12 + x5 + 1 CRC-32 x32 + x26 + x23 + x22 + x16 + x12 +x11 + x10 + x8 + x7 + x5 + x4 +x2 + x +1