menu
  • ENGLISH
  • Новини
  • Статии
  • Проекти
  • Изтегляне
  • Относно
  • Дарение
  • последна редакция на: 2017-11-03

    Пакетирани срещу непакетирани съобщения

     

    Целта на тази статия не е да разисква темата в пълнота, а да даде най-обща представа за разликата между пакетирано и непакетирано съобщение. Това са термини, които използвам в други статии от сайта и тук можете да намерите пояснение на това, което имам предвид.

    Грубо казано, когато говоря за изпращане на непакетирано съобщение - имам предвид предаване на определен брой байтове от едно устройство към друго, като пренасяната информация съдържа единствено и само логическата стойност на съобщението.

    При пакетираните съобщения, освен логическата стойност на съобщението се пренася и допълнителна информация, която гарантира на приемащата страна, че в получените данни няма грешна или случайна информация и че пристигащите данни са изпратени специално за приемащата страна.

    Разликата между непакетирано и пакетирано съобщение, може най-лесно да се разбере с пример и схема. Вижте картинката. За целите на статията съм използвал примерна схема описваща начин за пакетиране на съобщения, част от най-популярния протокол за комуникация с фискални устройства.

    Ако с един байт кодирате един символ от азбуката и изпратите на някакво устройство поредицата байтове, с които се кодира съобщението: Hello world! То това е типично изпращане на непакетирано съобщение от 12 байта. Ако говорим за стандартен ESC/POS принтер в непротоколен режим, то той ще отпечата този текст, защото командата му по подразбиране е да отпечатва получените байтове (ако са печатируеми).

    В други случаи (например при комуникация с фискално устройство) се налага да изпратим пакетирано съобщение.

    • Изпращате точно определен байт за начало на пакетираното съобщение. Това е категоричен знак в поредицата от байтове, които принтера получава, че може би започва да получава съобщение и то по точно определен протокол (неговия);
    • След това изпращате точно определен брой байтове, които му казват, че дължината на съобщението ще бъде еди-колко-си байта;
    • След това изпращате точно определен брой байтове, които му казват, че номера на пакетираното съобщение от страна на изпращача е със стойност …;
    • След това изпращате точно определен брой байтове, които му казват, че данните в съобщението са свързани с команда номер … ;
    • След това изпращате байтовете, които кодират Hello world! (това е логическото съобщение или така наречената област за данни);
    • След това изпращате точно определен байт, които му казват, че е дошъл край на данните и останалото, което устройството ще получи, ще бъде допълнителна информация към съобщението;
    • След това изпращате точно определен брой байтове, които съдържат стойността на контролна сума - изчислението на тази сума от страна на устройството ще му докаже, че няма грешно изпратени данни в съобщението и че това не е случайно съвпадение и данните са изпратени от нещо, което знае да изпраща съобщения по точно този протокол;
    • Накрая завършвате с изпращане на точно определен байт за край на пакетираното съобщение. Фискалното устройство ще знае, че следващите байтове информация, които ще “чуе” или получи по някакъв начин, вече няма да касаят това съобщение.

    Всяка следваща поредица от байтове може да е ново съобщение или празен шум - резултат от изригване в най-близката звезда. Каквото и да следва нататък - за момента устройството е получило пакетирано съобщение към команда.

    Съвсем очевидно е, че пакетираните съобщения са с по-голям обем и съответно ще се получават/обработват по-бавно. Отделно от това - ще причинят по-големи главоболия на програмистите. Защо тогава въобще съществуват? Един от отговорите се състои в това, че това за шума от най-близката звезда не е шега. Ако сте чували съскането, което се чува от радиоапарата, когато не сте на точно определена радиостанция(честота), то в 99% от случаите Вие сте чули радио шум, който се причинява от забавянето на ускорени частици от слънцето в горните слоеве на атмосферата ни. Разбира се Вашето електронно устройство може да получи електронен шум и от множество други различни източници. Например от най-близкия мобилен телефон, който в момента изпраща данни към GSM клетката. Причините може да са наистина много, но каквито и да са, ако електронното Ви устройство не е “защитено” по някакъв начин (например хардуерно с екраниране) и интерпретира абсолютно всичко, което “чуе” по входящия си канал, то най-вероятно рано или късно ще получи поредица от байтове, които ще “означават” нещо за него и то ще изпълни команда, която никой не му е изпращал. Пакетираните съобщения са допълнителен и силен механизъм за предпазване на устройствата от нежелан шум в комуникацията с тях. На практика вероятността за изпълнение на "случайна" команда е сведена до нула.

    Ако устройството Ви се намира в защитена, екранирана мрежа и в контролирана среда - тогава нуждата от пакетиране на съобщенията намалява, но…  Няма разработчик на фискални устройства, който да е съгласен да допусне дори и теоретично да се извърши фискална транзакция вследствие на случаен шум.

    Още веднъж: При пакетираните съобщения, освен логическата стойност на съобщението се пренася и допълнителна информация, която гарантира на приемащата страна, че в получените данни няма грешна или случайна информация и че пристигащите данни са изпратени специално за приемащата страна.

    Фискалните устройства, за които пиша в цикъла от статии на този сайт използват пакетирани съобщения.

     


    Ако смятате, че нещо в тази статия е некоректно, непълно или недостатъчно - моля пишете ми, за да коригирам статията.