Следующий Предыдущий Содержание

## 29. Приложение И: Устаревшие модемы

## 29.1 Введение

Под "устаревшими" я подразумеваю модемы, значение максимальной скорости которых менее 56k. В этом приложении они сравниваются с современными модемами. Если Вам интересна история модемов или Вы собираетесь использовать "устаревший" (в указанном смысле) модем, то данный раздел будет Вам полезен. К тому же, многие современные модемы и программы продолжают поддерживать старые протоколы.

## 29.2 Существующие модемные протоколы

- Bell 103 - 300 бит/с; частотная модуляция (frequency shift keying = FSK) (1962)
- V.21 - 300 бит/с; частотная модуляция (используются другие частоты) (1964)
- V.23 - 1200/75 бит/с и 600/75 бит/с, асимметричный; 75 бит/с -- обратный канал; частотная модуляция (1964)
- Bell 212A - 1200 бит/с; квадратурная относительная фазовая модуляция (ОФМ; quadrature differential phase shift keying = QDPSK = DPSK) (1963?)
- V.22 - 1200 бит/с и 600 бит/с; ОФМ (1980)
- V.22bis - 2400 бит/с; КАМ (1984)
- V.32 - 9600 бит/с; КАМ (1984, широко не использовался)
- V.32bis - 14,4 кбит/с; КАМ (1991)
- V.34 - 28,8 кбит/с; КАМ (1994); также известен как V.fast
- V.34bis - 33,6 кбит/с; КАМ (1996)
- V.90 - 56 кбит/с; downstream - ИКМ (Modulus conversion), upstream - КАМ (1998)
- V.92 - 56 кбит/с; ИКМ в обоих направлениях (2000)

"bis" означает вторую версию стандарта (на бис! :)).
КАМ -- квадратурная амплитудная модуляция. Под словом "квадратурная" понимается "квадратурная относительная фазовая модуляция" (QDPSK). Слово "квадратура" подразумевает 4 (четыре), 4 возможных разности фаз (90 градусов каждая). 4 фазы использовались только в протоколе V.22. В следующих протоколах стали использовать большее количество значений фаз для передачи большего количества информации, но название "квадратурная" осталось. Под ним скрывается простая фазовая модуляция :)

Кроме указанных существовали (и продолжают существовать) протоколы (стандарты) для выделенных линий: Bell 201B,C (2400 бит/с), Bell 208A,B (4800 бит/с; 208B = V.27).

## 29.3 Краткий исторический обзор

### Телетайпы и простые терминалы

До 1960 года модемы, скорость которых была тогда 110 бит/с, использовались в телетайпах (это что-то вроде электрической печатной машинки, только намного более шумное :)). То, что было набрано (или прочитано с бумажной перфоленты) на одном телетайпе, могло быть распечатано на другом телетайпе, находящемся на некотором расстоянии. Компьютеры в этом не участвовали :)

В 1960 году компания AT&T представила модем со скоростью 300 бит/с (для использования в своей телефонной сети). В 1962 году она начала продажи модемов Bell 103 широкой публике. Такие медленные и дорогие модемы позднее использовались для подключения простых терминалов ввода-вывода(dumb terminal) к мейнфреймам (центральным компьютерам) по телефонным линиям и для передачи данных между самими мейнфреймами. У большинства простых терминалов не было даже дисплея -- все, что набиралось на клавиатуре, вместе с ответами от мейнфрейма распечатывалось на бумаге.

### Персональные компьютеры и BBS (ббски)

После появления персональных компьютеров (ПК) в начале 1980-х модемы стали использовать для подключения ПК к мейнфреймам. В данном случае ПК по сути использовался как простой терминал, но теперь можно было пересылать файлы. Кроме подключения к мейнфрейму модем можно было использовать и для подключения к другому ПК.

1980-е -- годы расцвета BBS (Bulletin Board System; в словаре дается перевод - "электронная доска объявлений", но у нас их, по-моему, называли и называют просто "ббсками" :) -- от перев.). BBS представляла собой обычный компьютер с модемом, настроенным на прием звонков. Любой желающий и обладающий модемом мог соединиться с BBS, чтобы скачать какие-то программы, принять участие в обсуждениях по различным темам, поиграть в игры и т.д. Подключение к BBS было чем-то вроде нынешнего посещения Интернет-сайта, но с тем отличием, что для перехода на другую BBS надо было разъединиться и набрать другой номер (и, соответственно, заплатить за этот звонок по тарифу). Многие BBS взымали ежемесячную плату, но не все -- некоторые поддерживались бескорыстными людьми и были бесплатны. Многие компании организовывали BBS для своих клиентов, чтобы предоставить свои каталоги, поддержку и пр. В начале 1990-х BBS были на подъеме. В середине 1990-х некоторые BBS стали даже предлагать доступ в Интернет. Об истории BBS можно почитать на странице Sysops' Corner: History of BBSing (Уголок сисопа: история BBS).

### Интернет

В середине 1990-х пришел Интернет (в России это произошло года на два-три позже, как обычно :) -- прим. перев.), что стало причиной постепенного исчезновения BBS к концу 1990-х. Некоторые BBS стали web-сайтами, но таковых было немного: web-сайты в то время были еще достаточно дороги, поэтому большая часть BBS попросту исчезла. BBS не могли соревноваться с Интернетом по объему хранимой информации.

В 1990-х модемы стали быстрыми, дешевыми и широко распространенными, их стали использовать для подключения к Интернету. В конце 1990-х появились еще более быстрые неаналоговые "модемы": ISDN, DSL, кабельные. О них отдельная история, не в этом HOWTO.

### Скорости

До появления протокола V.32 (скорость - 9600 бит/с) скорости модемов были от 300 до 2400 бит/с. Некоторые супербыстрые модемы использовали нестандартные протоколы и работали на гораздо более высоких скоростях (19200 бит/с). Чтобы получить такие "высокие" скорости, оба модема должны были поддерживать один и тот же обычно проприетарный протокол, а это часто означало, что модемы должны были быть от одного производителя.

До появления стандарта (протокола) коррекции ошибок V.42 и стандарта сжатия данных V.42bis (1990 год) для коррекции ошибок и сжатия данных как правило использовались стандарты MNP. В некоторых коммерческих сетях передачи данных для коррекции ошибок использовался стандарт X.PC. Сжатие и коррекция ошибок были и в некоторых модемах со скоростями до 2400 бит/с.

В период 1960-1980 гг. скорость подавляющего большинства модемов была всего лишь 300 бит/с (это соответствовало 300 бод/с). Это только 0,3 кбит/с. Современные модемы быстрее более, чем в 100 раз. Тем не менее, некоторые модели тогдашних модемов используются до сих пор (не всегда нужна высокая скорость передачи данных -- от перев.), поэтому называть такие модемы "антиквариатом" еще рано :)

## 29.4 Проприетарные протоколы и др.

Кроме протоколов, соответствующих стандартам ITU серии V (ITU -- Международный союз электросвязи, МСЭ), существуют и другие. Они в большинстве своем являлись предшественниками стандартных протоколов и позволяли модемам соединяться на более высоких скоростях по сравнению с существовавшими тогда протоколами. Чтобы это происходило, модемы на обоих концах линии должны были поддерживать один и тот же протокол. Указанные даты появления протоколов могут быть приблизительными.

- PEP (Packetized Ensemble Protocol -- пакетированный множественный протокол (?), 1985) -- 18 кбит/с (в лучшем случае)
- Turbo PEP (1994) -- 23 кбит/с
- Hayes Express 96 (Hayes, 1987) -- 9,6 кбит/с
- HST (US Robotics, 1986) -- 9,6 кбит/с
- HST (US Robotics, 1989) -- 14,4 кбит/с
- HST (US Robotics, 1992) -- 16,8 кбит/с
- V.32 terbo (AT&T, 1993) -- 19,2 кбит/с (V.32ter не был принят как стандарт)
- V.FastClass (Rockwell, 1993) -- 28,8 кбит/с (V.FastClass не является стандартом ITU)
- X2 (US Robotics, 1997) -- 57,3 кбит/с
- K56 Flex (Rockwell, 1997) -- 57,3 кбит/с

В PEP использовался весь доступный частотный диапазон, который подразделялся до 512 поддиапазонов (?). Он поддерживался Ven-Tel's Pathfinder и Telebit's Trailblazer.

## 29.5 Автободинг (autobauding; автоматическая установка скорости)

Обычно под этим термином подразумевается автоматическая установка либо скорости модем-модем, либо скорости модем-последовательный_порт.

## 29.6 Скорость модем-модем

Современные модемы согласование скорости и протокола, по которому они будут "общаться" между собой" осуществляют во время установки связи, обычно они соединяются на самой высокой из возможных скоростей. Если один из модемов не поддерживает данную скорость, то другому модему следует принять скорость и протокол, доступные первому модему. Некоторые устаревшие протоколы больше не поддерживаются современными модемами. В результате согласования одному из модемов может потребоваться установить более низкую скорость по сравнению с его максимально возможной для того, чтобы осуществить связь с противоположным модемом. Это и называется "автободингом" ("autobauding") или "автовыбором" ("automode"). Также это может называться просто "снижением скорости" ("fallback"). Хотя обычно под "снижением скорости" понимают ситуацию, когда оба модема во время соединения переходят на более низкую скорость из-за зашумленности линии. По умолчанию при выборе скорости используется автободинг. Задание фиксированной скорости модем-модем вместо автободинга осуществляется либо AT-командой, либо заданием значения регистра, обычно S37.

У первых модемов не было ни "автободинга", ни "снижения скоростей". Если у Вас один из таких модемов, то он, вероятно, будет работать нормально или даже хорошо :) , если противоположный модем, к которому Вы подключаетесь, умеет подбирать скорость и протокол под Ваш модем, т.е. является "современным" :) Проблема возникает, когда оба модема являются устаревшими и не поддерживают "автовыбор". В этом случае придется для каждого модема вручную задать одинаковую скорость и одинаковый протокол.

Но даже если у модема и был "автовыбор", то лишь из ограниченного числа скоростей (например, только 1200 или 300 бит/с). Раньше (может, где-то и сейчас :)) для приема звонков на одной скорости (скажем, 2400 бит/с) мог использоваться один телефонный номер, а на другой скорости (скажем, 1200 бит/с) -- другой. Могло быть, что для одной скорости имелось несколько телефонных номеров, а один телефонный номер мог поддерживать пару скоростей (те же 1200/300 бит/с, например). Можно также добавить, что обычно на одном телефонном номере поддерживался только один протокол связи, например только Bell 212A. Необходимость в таком разграничении телефонных номеров по скоростям и протоколам отпала с появлением современных модемов, имеющих поддержку более широкого набора скоростей и протоколов.

## 29.7 Скорость модем-последовательный_порт

### Требовалась одинаковая скорость

Для старых модемов (в основном для модемов со скоростями ниже 9600 бит/с) скорость модем-последовательный_порт должна была равняться скорости модем-модем. Так было из-за того, что у этих модемов отсутствовало "выравнивание скоростей путем буферизации" ("speed buffering"; не было буфера, в котором бы сохранялись байты, приходящие с более высокой скоростью). Можно сказать, что данные проходили сквозь модем, не задерживаясь в нем, поэтому скорости на обоих концах кабеля, соединяющего последовательный порт компьютера и последовательный порт модема, должны были задаваться равными скорости между модемами.

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

### Уравнивание скоростей

Если у модема была только одна скорость модем-модем (или ему программно или аппаратно задавалось использовать только одну скорость), то никакой проблемы не возникало -- надо было просто задать эту же скорость последовательному порту ПК. У последовательного порта модема скорость, соответственно, должна была быть такой же. Другой способ уравнять скорости -- это дать модему самому определить скорость последовательного порта ПК и самому установить равными ей скорость своего последовательного порта и скорость модем-модем. Об этом способе рассказано ниже.

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

У модема нет возможности самому посылать команды последовательному порту ПК, чтобы тот установил требуемую скорость (скорость модем-модем). Это можно сделать только с помощью программ системы. Модем определяет какую скорость использовать, основываясь на договоренности с другим модемом. Как модем сообщает системе значение скорости модем-модем?

### Использование сообщения "CONNECT" для задания скорости

Здесь описан один из способов того, как модем может сообщить скорость соединения системе. Рассмотрим случай модема, принимающего звонки от других модемов. В этом случае программа getty будет использоваться для отправкиприглашения для идентификации (login prompt) на экран терминала пользователя. Та же getty будет программой, изменяющей скорость последовательного порта. Значение скорости модем-модем программа getty будет получать от модема через сообщение "CONNECT", содержащее это значение (например, "CONNECT 2400").

Но тут может быть одна проблема. Как гарантировать, что сообщение "CONNECT", посылаемое модемом программе getty через последовательный порт, будет послано на скорости, которую имеет последовательный порт ПК? Вот как это происходит.

При первом получении строки инициализации модем определяет скорость последовательного порта компьютера и устанавливает скорость своего последовательного порта равной этому значению. После этого он может общаться с программой getty, а сообщение "CONNECT" дойдет до нее.

При определении скорости порта модем проверил "AT" в начале строке инициализации (?). У современных модемов скорость модем-последовательный_порт остается постоянной, независимо от того, какая скорость модем-модем установится при соединении с другим модемом. Но у рассматриваемых нами устаревших модемов скорость последовательной линии между модемом и ПК должна равняться скорости между модемами после установления соединения.

К примеру, getty получает от модема сообщение "CONNECT 2400" и изменяет скорость последовательного порта ПК на 2400. Модем также меняет скорость своего последовательного порта на 2400. Теперь с обоих концов последовательного кабеля установлено 2400 -- несоответствия скоростей нет. После этого getty через модемы и телефонную линию посылает приглашение для идентификации. 2400 бит/с -- это сейчас и скорость модем-модем, и скорость модем-последовательный_порт. Проблема решена. В случае Mgetty требуется настройка под "автободинг", но это требуется только для очень старых (и медленных) модемов.

Для исходящего соединения способ тот же, только роль getty должна исполнять программа для установки связи ("звонилка" :)).

### Установка скорости модем-модем по скорости последовательного порта

Другим способом уравнивания скоростей является использование возможности модема устанавливать значение скорости модем-модем равным значению скорости модем-последовательный_порт, которое он сам определяет. За данную возможность отвечают AT-команды Bn, которые также задают протокол для каждой скорости. Таким образом, при задействовании данной возможности установка скорости последовательного порта также автоматически устанавливает значение скорости модем-модем таким же. Это лишает модема "гибкости" при согласовании скоростей с другими модемами.

### Подбор скорости вручную ("ручной бодинг")

Еще одним (более топорным) способом решения проблемы уравнивания скоростей в случае соединения с удаленным узлом было изменение удаленным узлом скорости модем-модем на скорость, соответствующую скорости Вашего последовательного порта. Происходило это так: Пользователь, пытающийся войти на удаленный узел под своим именем после установления соединения, из-за несоответствия скоростей не видел приглашения для идентификации. Пользователь нажимал клавишу "break" (прерывание), чтобы до getty, запущенной на удаленной машине, по телефонной линии (через модем) дошел сигнал прерывания (break signal). Сигнал прерывания проходит всегда, даже если в линии есть несоответствие скоростей.

Удаленная getty при получении данного сигнала прерывания меняла скорость последовательного порта удаленной машины на следующее значение, указанное в ее файле настроек (интересно, в какую сторону? -- перев. подумалось :)). Удаленный модем в свою очередь делал скорость между модемами равной новой скорости удаленного последовательного порта, как ему предаврительно было задано командой ATB. Затем по линии с этой новой скоростью вновь передавалось приглашение для идентификации. Если пользователь его не видел, то он снова нажимал клавишу "break" и все повторялось для нового значения скорости (из файла настроек getty). Так продолжалось до тех пор, пока getty не установит подходящую скорость удаленного последовательного порта (равную скорости локального последовательного порта на ПК пользователя) и, соответственно, пока пользователь не увидит приглашение на своем дисплее. Надо сказать, что на клавиатурах ПК нет клавиши "break", но она была на клавиатурах терминалов. В mgetty, agetty и uugetty поддерживается этот устаревший способ, который называется "ручным бодингом" ("manual bauding"; я бы назвал его пальчиковым :) -- перев. с улыбкой).

### Неподдерживаемые скорости

Linux поддерживает не все скорости последовательного порта, поэтому возникает проблема, когда соединение устанавливается на одной из таких скоростей. Например, если соединение произошло на скорости 7200 бит/с (это и скорость модем-модем, и скорость модем-последовательный_порт), то Вы увидете только только "мусор", т.к. Linux не поддерживает 7200 бит/с на последовательном порте. При этой скорости (и любой другой неподдерживаемой) не просто будет разорвать и само соединение (повесить трубку), поскольку модему невозможно даже послать escape-последовательность +++.

### Современные модемы, буферизация

Современные модемы также могут устанавливать соединение на фиксированной скорости, как рассматриваемые нами устаревшие модемы, для этого им надо задать &Q0 N0 и S37=5 (для скорости 1200 бит/с). Некоторые из значений регистра S37 для разных моделей модемов различны. По умолчанию S37=0, при этом значении соединение будет происходить на максимальной из поддерживамых модемом скоростей.

У последовательных портов современных модемов может быть почти любая скорость, которая полностью не зависит от скорости модем-модем. Это возможно благодаря "выравниванию скоростей путем буферизации" (буду называть просто -- буферизация -- прихоть перев.) и наличию управления потоком. Буферизация означает, что у модемов есть буферы, с помощью которых компенсируется разность между скоростью модем-модем и скоростью модем-последовательный_порт. Если входящий поток по скорости превышает исходящий, то избыточные данные просто сохраняются в буфере модема. Предусмотрена и защита от переполнения буфера: в случае такой угрозы модем посылает сигнал управления потоком для прекращения передачи. Это касается обоих направлений потока. См. раздел Управление потоком.

## 29.8 До появления AT-команд

Набор AT-команд изначально был представлен компанией Hayes, но впоследствии другие производители модемов приняли его как стандарт. До появления AT-команд для настройки во многих модемах использовались dip-переключатели. Есть еще один набор команд -- набор команд CCITT V.25bis. Некоторые модемы поддерживают оба набора: и CCITT, и AT. В стандарте CCITT V.25bis также описано, как осуществляется синхронизация соединения модем-последовательный порт с использованием наборов символов ASCII или 8-битного EBCDIC (?).

## 29.9 Акустическое соединение (?) Acoustic-Coupling

Акустическое соединение -- это соединение, при котором модем (акустический) и телефон (обычный) "общаются" между собой посредством звуковых волн слышимого диапазона (?). Модем имеет микрофон и динамик, прикрепляемые прямо к телефонной трубке без всяких проводов (просто навешиваются). По сути такое соединение является "беспроводным", только вместо радиоволн используются звуковые волны :) Динамик модема размещается напротив телефонного микрофона (на трубке) так, чтобы звуковые сигналы из модема попадали прямо в телефон. Микрофон модема в свою очередь принимает сигналы от динамика трубки. Это и называется "акустическим соединением".

Основной проблемой такого соединения являются внешние шумы, которые могут создавать помехи и тем самым вызывать ошибки. Достоинством же является удобство: для подключения не надо никаких проводов. Скорости большинства модемов такого рода были в пределах всего лишь 300 бод, но попадались и более высокоскоростные :)

## 29.10 Сжатие данных и коррекция ошибок

Для коррекции ошибок раньше использовались протоколы MNP 2, 3 или 4. MNP 5 использовался для сжатия данных. Современные модемы в основном используют V.42 (коррекция ошибок) и V.42bis (сжатие). Многие модемы поддерживают и MNP, и V.42.

## 29.11 Библиография

PC Today, Sept. 2004, v.2 #9, pp 110-111: "The Rise & Fall of Dial-Up"

END OF Modem-HOWTO (и так понятно, уф :) -- перев.:)))

Следующий Предыдущий Содержание