2.4.3.Формування кадру та контроль за помилками

Для обміну даними між канальними сутностями використовуються кадри (Frame). Кадри вміщують не тільки інформацію про дані процесу, а й додаткову службову інформацію. Канальний рівень користується сервісами фізичного рівня, який приймає потік бітів і передає їх за призначенням, додаючи службові сигнали (наприклад синхронізуючі). Цей потік не застрахований від помилок. Кількість прийнятих бітів може бути меншою, рівною або більшою кількості переданих біт. Крім того, значення прийнятих бітів може відрізнятися від переданих. Рівень передачі даних повинен знайти і по можливості виправити ці помилки.

Передача кадрів може вестись як побітно, тобто послідовністю бітів різної довжини, так і посимвольно (побайтно) – послідовністю символів. Символ вміщує не тільки біти даних, а й службові біти (стартовий, стоповий, біти парності тощо). У першому випадку між бітами в кадрі відсутні паузи, в другому – між бітами різних символів йде певна пауза, яка обумовлена стоповими бітами.

Кадр який був відісланий приймачу може бути спотворений у результаті дій завад і не вірно прийнятий адресатом. Може виникнути ситуація, що кадр взагалі не дійде до отримувача, наприклад із-за виходу із ладу останнього. Оскільки однією з вимог промислових мереж є надійність, необхідно забезпечити контроль за доставкою кадру та його цілісністю. Такий контроль проводиться при використанні надійних сервісів з підтвердженнями. 

При отриманні даних, отримувач повинен проаналізувати їх правильність, і у випадку виявлення помилки (пошкодження даних) може відправити зворотній кадр з інформацією про помилку. У цьому випадку відправник може повторно організувати передачу кадру. Таким чином, при позитивному результаті отримання кадру, отримувач відсилає позитивне підтвердження ACK (ACKnowledgement), а при отриманні помилкового кадру – негативне підтвердження NACK (Negative Acknowledgement). Дана задача вирішується на канальному рівні, а спосіб її вирішення залежить від протоколу. Протокол описує також спосіб визначення помилки в кадрі. 

При передачі даних по фізичному каналу завади на лінії можуть спотворити один, або ще гірше, декілька бітів у кадрі. Для боротьби з помилками у мережах існують дві основні стратегії. Кожна з них передбачає додавання надлишкової інформації до даних, що передаються. Тобто до кадру добавляються допоміжні дані, які при його отриманні дозволяють отримувачу визначити помилку. Перша стратегія, яка в основному використовується для дротового зв’язку, базується на тому, що допоміжні дані тільки виявляють наявність помилки. При такому підході отримувач по надлишковим даним аналізує правильність отриманих даних, і якщо помилка присутня - робить повторний запит, або відправляє негативне підтвердження. Друга стратегія направлена на передачу надлишкових даних не тільки для ідентифікації помилки, а і для можливості відтворення помилкових даних. Цей підхід використовується в безпровідній передачі.  

Надлишкові дані, які добавляються до кадру для контролю за помилками і являються результатом певної функції над інформаційними даними, як правило називають контрольною сумою (Check Sum). Найбільш простий спосіб обрахунку контрольної суми може бути зроблений способом побітової логічної операції між кожним байтом кадру. Результат вставляється в кінець кадру, тобто в кінцевик. Як приклад -  використання виключного АБО (XOR) над усіма інформаційними байтами.

Один з поширених алгоритмів обрахунку контрольної суми наведеним вище способом – це алгоритм LRC (Longitudinal Redundancy Check). Всі байти повідомлення арифметично сумуються між собою, а результат записується в байт. Під час певного кроку сума може вийти за межі одного байта, але старші біти в сумі не враховуються (відкидаються) і результат завжди буде одно-байтним. В кінці обрахунку міняється знак результату (помножується на «-1»).    

Метод CRC (Cyclic Redundancy Check) більш складніший у використанні, але у випадках коли можливе спотворення декількох бітів інформації – він більш надійний. Контрольна сума CRC використовується у багатьох мережних протоколах, наприклад в MODBUS RTU (CRC16).

Comments