Основные используемые коды
Широко используются двоичные коды:
EBCDIC (Extended Binary Coded Decimal Interchange Code) — символы кодируются восемью битами; популярен благодаря его использованию в IBM;
ASCII (American Standards Committee for Information Interchange) — семибитовый двоичный код.
Оба этих кода включают битовые комбинации для печатаемых символов и некоторых распространенных командных слов типа NUL, CR, АСК, NAK и др.
Для кодировки русского текста нужно вводить дополнительные битовые комбинации. Семибитовая кодировка здесь уже недостаточна. В восьмибитовой кодировке нужно под русские символы отводить двоичные комбинации, не занятые в общепринятом коде, чтобы сохранять неизменной кодировку латинских букв и других символов. Так возникли кодировка КОИ-8, затем при появлении персональных ЭВМ альтернативная кодировка и при переходе к Windows кодировка 1251. Множество используемых кодировок существенно усложняет проблему согласования почтовых программ в глобальных сетях.
Асинхронное и синхронное кодирование
Для правильного распознавания позиций символов в передаваемом сообщении получатель должен знать границы передаваемых элементов сообщения. Для этого необходима синхронизация передатчика и приемника. Использование специального дополнительного провода для сигналов синхронизации (в этом случае имеем битовую синхронизацию) слишком дорого, поэтому используют другие способы синхронизации.
В асинхронном режиме применяют коды, в которых явно выделены границы каждого символа (байта) специальными стартовым и стоповым символами. Подобные побайтно выделенные коды называют байт-ориентированными, а способ передачи - байтовой синхронизацией. Однако это увеличивает число битов, не относящихся собственно к сообщению.
В синхронном режиме синхронизм поддерживается во время передачи всего информационного блока без обрамления каждого байта. Такие коды называют бит-ориентированными. Для входа в синхронизм нужно обозначать границы лишь всего передаваемого блока информации с помощью специальных начальной и конечной комбинаций байтов (обычно это двубайтовые комбинации). В этом случае синхронизация называется блочной (фреймовой).
Для обрамления текстового блока (текст состоит только из печатаемых символов) можно использовать символы, отличающиеся от печатаемых. Для обрамления двоичных блоков применяют специальный символ (обозначим его DLE), который благодаря стаффингу становится уникальным. Уникальность заключается в том, что если DLE встречается внутри блока, то сразу вслед за ним вставляется еще один DLE. Приемник будет игнорировать каждый второй идущий подряд символ DLE. Если же DLE встречается без добавления, то это граница блока.
Манчестерское кодирование
Передаваемые данные представляются электрическими сигналами. Возможны коды RZ (Retum-to-zero), использующие двуполярные сигналы для изображения 1 и 0, и коды NRZ (non-retum-to-zero) — коды без возвращения к нулю.
Для кодирования информации наибольшее распространение получили самосинхронизирующиеся коды, так как при этом отпадает необходимость иметь дополнительную линию для передачи синхросигналов между узлами сети. В ЛВС чаще других применяют манчестерский код, одна из разновидностей которого пояснена на рис.1. Самосинхронизация обеспечивается благодаря формированию синхроимпульсов из перепадов, имеющихся в каждом такте манчестерского кода.
Рис. 1. Манчестерское кодирование
Представленная на рис.1 разновидность манчестерского кода используется при байт-ориентированном кодировании, при котором каждый байт, состоящий из 1 и 0, обрамляется символами j и k. В этом случае станция, получившая полномочия, начинает передавать серию сигналов jkjkjk... для того, чтобы станция-получатель могла войти в синхронизм с передающей станцией. После нескольких пар jk начинают передаваться байты самого сообщения. Различение четырех возможных значений сигнала выполняется в соответствии с правилами кодирования, представленными в нижней части рисунка.
В случае бит-ориентированного кода после входа в синхронизм не нужно обрамлять байты символами j и k, т.е. используется двузначное кодирование. Чаще используется код, в котором 1 представляется положительным перепадом, а 0 - отрицательным.