воскресенье, 12 июня 2011 г.

bit stuffing (вставка бита) для синхронного канала и character stuffing (вставка байта) для асинхронного канала в PPP

Интересно, каким образом сетевые устройства определяют где начинается фрейм, а где заканчивается. Понятное дело, что флаги в начале фрейма, содержащие определенную последовательность битов с этим как-то справляются. Но как же тогда решается проблема с тем, что данные с той же последовательностью бит как у флага могут встречаться в середине фрейма? Если взять PPP, то поскольку он построен поверх HDLC, то у него флаг 01111110.

PPP может работать на синхронных и асинхронных последовательных (serial) каналах, что определяет тип stuffing-a.

Синхронный канал - это тот канал, на котором при связи двух устройств используется два сигнала: один синхронизирующий, а второй передающий. Пульс на первом сигнале говорил о том, когда нужно считывать бит на втором.

Асинхронный канал - это тот канал, который позволяет прямо в процессе передачи контролировать ее скорость, а точнее частоту считывания бодов. Присутствует всего 1 сигнал. Пульс для считывания определяется получающим устройством - он его задает с помощью:
- автоматического определения скорости передачи данных в бодах (Authomatic baud rate detection, или autobaud, ABR), которое позволяет, анализируя синхронизирующее слово (syncword), определить эту скорость. Поскольку PPP основано на HDLC, то в данном случае специального синхронизирующего слова не надо, поскольку HDLC является самосинхронизирующимся кодом. Это означает, что любое слово кода четко определяет свои границы. То есть, если совместить два слова кода подряд в строку, то никакая подстрока этой строки, начиная со второго символа и заканчивая предпоследним, не будет верным кодовым словом.
- затем, определив скорость, с помощью фазовой автоподстройки частоты (Phase-locked loop) и задаются локально временные импульсы для последующего считывания данных.

Оборудование для поддержки синхронного канала более дорогое и сложное, но это компенсируется меньшим количеством накладных расходов на синхронизацию, а значит и большей производительностью каналов.
Асинхронными являются в первую очередь аналоговые телефонные линии, также часто каналы T3, которые включают в себя несколько синхронных каналов T1, взаимодействие между которыми в асинхронном режиме.
Синхронные - это цифровые каналы, как ISDN, в некоторых случаях T3 тоже является синхронным (технология SYNTRAN).

В синхронных каналах используется bit stuffing, поскольку считывание данных идет побитового. Поскольку в HDLC флаг = 01111110, то встает вопрос, как избавить данные, от вкрапления той же последовательности бит. После последовательности из пяти единиц в отправляемых данных вставляется ноль при отправлении, а при получении - эти биты изымаются. То есть, если в данных последовательность 0111110 -> 01111100 , если 0111111 -> 01111101.

В асинхронных каналах считывание чаще всего происходит по длине кодового слова, в первую очередь при синхронизации, поэтому bit stuffing неудобен. При character stuffing во фрейме последовательность бит, равная флаг 01111110 ( = 0x7E в 16-ричной системе счисления), заменяется на 0x7D-5E. 7D еще называют экранирующим символом (escape character) в PPP. Если же в поле данных встречается 0x7D, то оно заменяется на 0x7D-5D. На принимающей стороне все это декодируется обратно. Казалось бы, почему бы просто после всех нефлаговых 7E не добавлять какой-то байт? Такая сложность связана с тем, что после получения синхронизирующего флага 7E получатель уже должен быть готов получать новый фрейм, а не анализировать, идет ли после него дальше определенный байт.


суббота, 11 июня 2011 г.

Отличие bit-oriented от byte-oriented протоколов

Bit-oriented (бит-ориентированный) протокол -
разделяет данные на 2м уровне с помощью некоторой последовательности битов, определенной для данного протокола - например, 01111110 для  протокола HDLC (high-level data-link control). Это позволяет посылать данные любой длины. После отправляемого блока данных ставится такой флаг. Устройство-получатель, зафиксировав такой флаг, узнает, что это конец данных. При этом в протоколе указывается, что делать, если надо передать данные, содержащие последовательность битов таких же, как флаг. 


Например, для HDLC хотим передать как данные 01111110 - в этом случае, после 5 подряд идущих единиц данных добавляется 0. То есть, в данных вместо 01111110 будет 011111010. Этот метод называется bit stuffing - по сути, вставка неинформативных битов в данные с целью отличить их от синхронизирующих данных ( в нашем случае флага 01111110).


Кроме HDLC, бит-ориентированным является Ethernet, ESF (Extended Super Frame) и многие другие. Хотя Ethernet в некоторых источниках называют frame-oriented (ориентированным на фреймы), но основной идеи отделения данных с помощью флагов, про которые написано выше, это не меняет. В Ethernet фрейме часть с такой последовательностью битов называется ограничитель начала фрейма (Start Frame Delimiter).


Byte-oriented (байт-ориентированный) протокол - 
разделение данных канального уровня происходит с помощью некоторого строго определенного байта ( или character по-другому). 
Иногда byte-oriented протокол называют еще character-oriented протокол. 
Минус его в том, что нельзя передать любое количество битов, а только число, кратное размеру байта. Также эти character зарезервированы и соответственно в блоке данных их передавать нельзя.


Сейчас байт-ориентированные протоколы фактически не используются. Из тех, что использовали - старые протоколы BISYNC (Binary Synchronous Communication) и EBCDIC (Extended Binary Coded Decimal Interchange Code ).

bit interleaving (чередование битов) в TDM

Для чего он нужен? Использование этого метода в TDM ( time-division multiplexing) позволяет следить за изменением битов в потоке данных при передаче по каналу.
В случае какого-то сбоя этот метод позволяет определить в каком месте он вышел. И в зависимости от того, применяется ли корректировка ошибок или нет, позволяет исправить значения измененных при передаче битов, или послать запрос на конкретный блок информации.
При обычной передаче данных при TDM -  слоты (ячейки) заполняются по очереди и при потере данных из такого слота - в лучшем случае при сборке информация на нужном канале передачи это будет определено и потребуется пересылка всего слота, а в худшем - отвалится соединение.

Плюс - повышение пропускной способности за счет уменьшение количества пересылок данных

Минус - повышение времени задержки. 

В случае коррекции ошибок (обычно  при включенной опции interleaving включена и коррекция ошибок) размер пересылаемых данных увеличивается, так как для коррекции необходимо увеличить размер слова (последовательность данных, которая будет рассматриваться как единое целое при декодировании). Увеличение происходит из-за того, что мы должны иметь возможность отличить возможное слово от невозможного, увеличив расстояние (математическое) между возможными словами. Чем больше ошибок мы хотим исправлять, тем больший избыток данных надо будет пересылать. Но особенность канала в том, что проблемы появляются не всегда и затрагивают обычно идущие подряд биты. При bit interleaving подряд будут идти биты из разных каналов. То есть, при краткой вспышке помех будет затронута всего по 1-2 биту из каждого канала. Следовательно, на приемнике надо будет исправить всего одну-две ошибки для каждого канала. 
Этого нельзя добиться при обычной передаче данных, так как вспышка затронет широкую полосу данных из одного канала. Поэтому декодирование будет бессмысленно, что приведет к повторной пересылке данных.

Технология TDM используется в ISDN, ATM - то есть в телекоммуникационных сетях, которые нужны в первую очередь для передачи голоса и видео, где нужно гарантировать скорость и качество. 

Еще добавлю, что bit interleaving постепенно теряет актуальность из-за того, что качество каналов неустанно растет и ошибки при передаче встречаются все реже и реже.