Показаны сообщения с ярлыком Bit stuffing. Показать все сообщения
Показаны сообщения с ярлыком Bit stuffing. Показать все сообщения

воскресенье, 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 ).