Контроль правильності передачі інформації
Управління правильністю (завадозахищеністю) передачі інформації виконується за допомогою завадостійкого кодування. Розрізняють коди, що виявляють помилки, і коди, що коригують, які додатково до виявлення ще і виправляють помилки. Завадозахищеність досягається за допомогою вступу надмірності. Усунення помилок за допомогою кодів (таке управління називають Forward Error Control), що коригують, реалізують в симплексних каналах зв'язки. У дуплексних каналах досить застосування кодів, що виявляють помилки (Feedback or Backward Error Control), оскільки сигналізація про помилку викликає повторну передачу від джерела.
У дуплексних каналах використовують старт-стопне або віконне управління. При старт-стопному управлінні передавач перш ніж послати наступний пакет повідомлення повинен отримати підтвердження правильності прийому адресатом попереднього пакету. Очевидно що із-за очікування підтверджень пакети передаються із збільшеними затримками. При віконному управлінні передавач може послати групу з пакетів до отримання підтвердження правильності прийому першого пакету цієї групи. Якщо підтвердження не отримане, передавач повторює передачу пакетів, починаючи з Величина називається розміром вікна.
Простими способами виявлення помилок є доповнення передаваного пакету контрольним кодом як яке можна використовувати контрольну суму - результат складання по модулю усіх кодів інформаційної частини пакету, де - розрядність кодів. Використовується також перевірка на непарність, при якій до кожного -разрядному коду додається контрольний біт, значення якого вибирається так, щоб сума числа одиниць в двійковому коді стала парною. Проте ці способи недостатньо надійні, особливо при появі пачок помилок. Тому як надійні коди, що виявляють, застосовують циклічні коди. Прикладом коду, що коригує, є код Хемминга.
До ефективних кодів, що виявляють поодинокі, кратні помилки і пачки помилок, відносяться циклічні коди (CRC - Cyclic Redundance Code). Вони високонадійні і можуть застосовуватися при блоковій синхронізації, при якій виділення, наприклад, біта непарності було б скрутно.
Один з варіантів циклічного кодування полягає в множенні початкового коду на поліном, що утворює, а декодування - в діленні на . Якщо залишок від ділення не дорівнює нулю, то сталася помилка. Сигнал про помилку поступає на передавач, що викликає повторну передачу.
Поліном, що утворює, є двійкове представлення одного з простих множників, на які розкладається число, де означає одиницю в -му розряді, дорівнює числу розрядів кодової групи. Наприклад, якщо і те і поліном, що утворює, може бути або в двійковому коді .
Основний варіант циклічного коду, широко вживаний на практиці, відрізняється від попереднього тим, що отримання полінома, що утворює, відбувається по наступному алгоритму :
1. до початкового кодованого числа справа приписується нулів, де - число бітів в поліномі, що утворює, зменшене на одиницю;
2. над отриманим числом виконується операція, що відрізняється від ділення тим що на кожному кроці операції замість віднімання виконується порозрядна операція що "виключає АБО";
3. отриманий залишок і є CRC - надлишковий -разрядный код, який замінює в закодованому числі приписані справа нулів, тобто
На приймальному кінці над кодом виконується операція . Якщо залишок не дорівнює нулю, то при передачі сталася помилка і потрібна повторна передача коду .
Припустимо, що частота помилок (BER) рівна р=10-4. В цьому випадку вірогідність передачі 8 біт з помилкою складе 1-(1-p)8=7,9х10-4. Додавання біта парності дозволяє детектувати будь-яку помилку в одному з переданих бітах. Тут вірогідність помилки в одному з 9 біт рівна 9p(1-p)8.Вірогідність же реалізації невиявленої помилки складе 1-(1-p)9 – 9p(1-p)8 = 3,6x10-7.. Таким чином, додавання біта парності зменшує вірогідність невиявленої помилки майже в 1000 разів. Використання одного біта парності типове для асинхронного методу передачі. У синхронних каналах частіше використовується обчислення і передача бітів парності як для рядків, так і для стовпців передаваного масиву даних. Така схема дозволяє не лише реєструвати але і виправляти помилки в одному з бітів переданого блоку.
Контроль по парності досить ефективний для виявлення поодиноких і множинних помилок в умовах, коли вони є незалежними. При виникненні помилок в кластерах битий метод контролю парності неефективний і тоді прийнятніше метод обчислення циклічних сум (CRC). У цьому методі передаваний кадр ділиться на спеціально підібраний поліном, що утворює. Доповнення залишку від ділення і є контрольною сумою.
У Ethernet Обчислення crc проводиться апаратно (см також ethernet). На мал. 2.7.1. показаний приклад реалізації апаратного розрахунку CRC для полінома B(x)= 1 + x2 + x3 +x5 + x7, що утворює. У цій схемі вхідний код приходить ліворуч.
Ефективність CRC для виявлення помилок на багато порядків вище за простий контроль парності. Нині стандартизовано декілька типів поліномів, що утворюють. Для оцінних цілей можна вважати, що вірогідність невиявлення помилки у разі використання CRC, якщо помилка насправді має місце, рівна (1/2) r, де r - міра полінома, що утворює.
CRC - 12 x12 + x11 + x3 + x2 + x1 + 1
CRC - 16 x16 + x15 + x2 + 1
CRC - CCITT x16 + x12 + x5 + 1