Введение
Командный язык для модема.
The Hayes command set (also known as the AT command set) is a specific command language originally developed by Dale Heatherington and Dennis Hayes for the Hayes Smartmodem 300 baud modem in 1981. The command set consists of a series of short text strings which can be combined to produce commands for operations such as dialing, hanging up, and changing the parameters of the connection. The vast majority of dial up modems use the Hayes command set in numerous variations. The command set covered only those operations supported by the earliest 300 bit/s modems. When new commands were required to control additional functionality in higher speed modems, a variety of one off standards emerged from each of the major vendors. These continued to share the basic command structure and syntax, but added any number of new commands using some sort of prefix character – & for Hayes and USR, and \ for Microcom, for instance. Many of these were re standardized on the Hayes extensions after the introduction of the SupraFAXModem 14400 and the market consolidation that followed. The term "Hayes compatible" was
Набор команд Хейса (также известный как набор AT-команд) — это специализированный командный язык, первоначально разработанный Дейлом Хитерингтоном и Деннисом Хейсом для модема Hayes Smartmodem 300 бод в 1981 году. Набор команд состоит из серии коротких текстовых строк, которые можно комбинировать для формирования команд для выполнения таких операций, как набор номера, завершение соединения и изменение параметров подключения. Подавляющее большинство dial-up модемов используют набор команд Хейса в различных вариациях. Изначально набор команд охватывал только те операции, которые поддерживались первыми 300-битными модемами. С появлением необходимости в новых командах для управления дополнительными функциями в более быстрых модемах, различные производители стали разрабатывать собственные стандарты. Эти стандарты сохраняли базовую структуру и синтаксис команд, но добавляли любое количество новых команд, используя определенный символ-префикс: & для Hayes и USR, и \ для Microcom, например. Многие из этих команд были стандартизированы на основе расширений Hayes после выпуска SupraFAXModem 14400 и последовавшей за этим консолидации рынка. Термин "совместимый с Хейсом" использовался для обозначения…
The Hayes command set (also known as the AT command set) is a specific command language originally developed by Dale Heatherington and Dennis Hayes for the Hayes Smartmodem 300 baud modem in 1981. The command set consists of a series of short text strings which can be combined to produce commands for operations such as dialing, hanging up, and changing the parameters of the connection. The vast majority of dial up modems use the Hayes command set in numerous variations. The command set covered only those operations supported by the earliest 300 bit/s modems. When new commands were required to control additional functionality in higher speed modems, a variety of one off standards emerged from each of the major vendors. These continued to share the basic command structure and syntax, but added any number of new commands using some sort of prefix character – & for Hayes and USR, and \ for Microcom, for instance. Many of these were re standardized on the Hayes extensions after the introduction of the SupraFAXModem 14400 and the market consolidation that followed. The term "Hayes compatible" was
Предыстория
До введения системы электронных объявлений (BBS) модемы обычно работали по телефонным линиям с прямым набором, которые начинались и заканчивались известным модемом на каждом конце. Модемы работали в режимах "инициатор" или "ответчик", вручную переключаясь между двумя наборами частот для передачи данных. Как правило, пользователь, совершающий вызов, переводил свой модем в режим "инициатор" и затем набирал номер вручную. Когда удалённый модем отвечал, уже настроенный на режим "ответчик", телефонную трубку отключали, и связь продолжалась до тех пор, пока вызывающий не отключился вручную. Когда требовалась автоматизация, она обычно была необходима только на стороне приема; например, банку могло потребоваться принимать звонки из ряда филиалов для обработки данных в конце дня. Для решения этой задачи некоторые модемы включали возможность автоматически снимать трубку, когда они находились в режиме "ответчик", и разрывать соединение, когда другой пользователь отключался вручную. Необходимость в автоматическом исходящем наборе была значительно менее распространенной и решалась с помощью отдельного периферийного устройства – "наборщика номера". Обычно он подключался к отдельному порту ввода/вывода компьютера (обычно порту RS 232) и программировался отдельно от самого модема. Этот способ работы был вполне приемлемым в 1960-х и начале 1970-х годов, когда модемы обычно использовались для подключения простых устройств, таких как компьютерные терминалы (исходящий набор), к мощным мэйнфреймным компьютерам (приём). Однако революция в области микрокомпьютеров в 1970-х годах привела к появлению недорогих модемов, и идея полупостоянного соединения типа "точка-точка" стала неактуальной. Потенциально существовали тысячи пользователей, которые могли захотеть набрать любой из других тысяч пользователей, и единственным решением в то время было требовать ручного набора номера. Компьютерной индустрии был нужен способ сообщить модему, какой номер набирать, с помощью программного обеспечения. Более ранние отдельные наборщики номера обладали этой возможностью, но только за счет использования отдельного порта, которого у микрокомпьютера могло и не быть. Другим решением было бы использование отдельного набора "командных контактов", предназначенных для отправки и приема команд, или контакт, сигнализирующий о том, что модем должен интерпретировать входящие данные как команду. Оба этих варианта поддерживались аппаратно стандартом RS 232. Однако многие реализации порта RS 232 на микрокомпьютерах были крайне упрощенными, и некоторые из них исключали многие из этих контактов для снижения стоимости.
Раствор Хейса
Компания Hayes Communications предложила решение в своем смартмодеме 1981 года, используя существующие контакты передачи данных без каких-либо изменений. Вместо этого сам модем мог переключаться между одним из двух режимов: режим передачи данных, в котором модем отправляет данные удаленному модему (модем в режиме передачи данных рассматривает все, что он получает от компьютера, как данные и отправляет их по телефонной линии); режим команд, в котором данные интерпретируются как команды для локального модема (команды, которые локальный модем должен выполнить). Для переключения из режима передачи данных в режим команд сеанс отправлял управляющую последовательность из трех знаков плюс ("+++"), за которой следовала пауза примерно в одну секунду. Пауза в конце управляющей последовательности требовалась для снижения проблем, вызванных внутриканальной сигнализацией: если какие-либо другие данные поступали в течение одной секунды после трех знаков плюс, это не считалось управляющей последовательностью и отправлялось как данные. Для возврата в режим передачи данных отправлялась команда "ATO". На практике многие команды автоматически переключались в онлайн-режим после завершения, поэтому пользователь редко использовал команду "ATO" напрямую. Чтобы избежать лицензирования патента Hayes, некоторые производители реализовали управляющую последовательность без временного интервала (Time Independent Escape Sequence (TIES)). Это имело серьезные последствия для безопасности, связанные с отказом в обслуживании, поскольку при попытке компьютера передать последовательность байтов "+++ATH0" в режиме передачи данных модем мог бы разорвать соединение. Любой компьютер, подключенный к Интернету через такой модем, мог быть легко подвергнут атаке путем отправки ему запроса "ping of death", содержащего последовательность "+++ATH0" в полезной нагрузке. Операционная система компьютера автоматически пыталась бы ответить отправителю той же полезной нагрузкой, немедленно отключаясь от Интернета, поскольку модем интерпретировал бы данные полезной нагрузки пакета ICMP как команду Hayes. Та же ошибка могла возникнуть, например, если пользователь компьютера попытался бы отправить электронное письмо, содержащее указанную строку.
data mode in which the modem sends the data to the remote modem. (A modem in data mode treats everything it receives from the computer as data and sends it across the phone line). command mode in which data is interpreted as commands to the local modem (commands the local modem should execute). To switch from data mode to command mode, sessions sent an escape sequence string of three plus signs ("+++") followed by a pause of about a second. The pause at the end of the escape sequence was required to reduce the problem caused by in band signaling: if any other data was received within one second of the three plus signs, it was not the escape sequence and would be sent as data. To switch back they sent the online command, "ATO". In actual use many of the commands automatically switched to the online mode after completion, and it is rare for a user to use the online command explicitly. In order to avoid licensing Hayes's patent, some manufacturers implemented the escape sequence without the time guard interval (Time Independent Escape Sequence (TIES)). This had a major denial of service security implication in that it would lead to the modem hanging up the connection should the computer ever try to transmit the byte sequence "+++ATH0" in data mode. For any computer connected to the Internet through such a modem, this could be easily exploited by sending it a ping of death request containing the sequence "+++ATH0" in the payload. The computer operating system would automatically try to reply the sender with the same payload, immediately disconnecting itself from the Internet, as the modem would interpret the ICMP packet's data payload as a Hayes command. The same error would also trigger if, for example, the user of the computer ever tried to send an e mail containing the aforementioned string.
Команды
Комплект команд Hayes включает команды для различных операций с телефонной линией, таких как набор номера и завершение соединения. Он также содержит различные элементы управления для настройки модема, включая набор команд регистров, позволявших пользователю напрямую устанавливать значения в различные ячейки памяти оригинального модема Hayes. Этот командный набор был практически полностью скопирован, включая значения регистров, почти всеми ранними производителями 300-бодовых модемов, которых было немало. Переход к 1200 и 2400 бодам потребовал добавления небольшого набора новых команд, некоторые из которых имели префикс в виде амперсанда ("&") для обозначения функциональности, специфичной для новых возможностей. Компания Hayes была вынуждена оперативно представить 2400-бодовую модель вскоре после выпуска 1200-бодовой, и эти командные наборы были идентичны, что позволило сэкономить время. Случайно, это позволило пользователям существующих 1200-бодовых модемов использовать новые 2400-бодовые модели Hayes без изменения программного обеспечения. Это укрепило использование команд Hayes. Спустя годы, Ассоциация телекоммуникационной промышленности (TIA)/Альянс электронной промышленности (EIA) оформила командный набор 2400 бод в официальный стандарт под названием «Системы передачи данных и оборудование – Серийный асинхронный автоматический набор и управление», TIA/EIA 602. Однако Hayes Communications медленно внедряла модемы, поддерживающие более высокие скорости или сжатие, и три другие компании стали лидерами в этой области – Microcom, U. S. Robotics и Telebit. Каждая из этих трех компаний использовала собственные дополнительные командные наборы, вместо того чтобы ждать инициативы Hayes. К началу 1990-х годов существовало четыре основных командных набора и множество версий, основанных на одном из них. Ситуация упростилась с широким распространением 14,4- и 28,8-килобитных модемов в начале 1990-х годов. Постепенно набор команд, основанный на оригинальном расширенном наборе Hayes с использованием команд "&", стал популярным, а затем и универсальным. Популярным остался лишь один другой командный набор – набор U. S. Robotics из их популярной линейки модемов.
Инициализация модема
Строка может содержать множество команд Хейса, объединенных вместе для оптимальной подготовки модема к набору номера или ответу на вызов, например, AT&F&D2&C1S0=0X4. Большинство программного обеспечения для модемов поддерживало пользовательскую строку инициализации, которая обычно представляла собой длинную последовательность команд AT, отправляемую модему при запуске. Спецификация V.250 требует, чтобы все DCE принимали тело (после "AT") длиной не менее 40 символов, состоящее из объединенных команд.
Пример сеанса
Ниже представлены два компьютера, компьютер А и компьютер В, оба с подключенными модемами, и пользователь, управляющий модемами с помощью программного обеспечения эмулятора терминала. Программное обеспечение эмулятора терминала обычно позволяет пользователю отправлять команды Хейса непосредственно на модем и видеть ответы. В этом примере пользователь компьютера А заставляет модем набрать номер телефона модема B по номеру (212) 555 0100 (междугородний). После каждой команды и ответа отправляется символ возврата каретки для завершения команды.
Модем A Модем B Комментарий
ATDT12125550100 Пользователь на модеме А выдает команду набора: AT – получить внимание модема; D – набор; T – тональный набор; 12125550100 – номер телефона для набора.
RING Модем А начинает набор. Телефонная линия модема B звонит, и модем сообщает об этом.
ATA Компьютер на модеме B выдает команду ответа.
CONNECT CONNECT Модемы соединяются, и оба модема сообщают "CONNECT" (соединение). (На практике большинство модемов сообщают больше информации после слова CONNECT, указывая скорость соединения.) Кроме того, в этот момент оба модема активируют сигнал DCD (обнаружение несущей частоты данных) на последовательном порту.
abcdef abcdef Когда модемы соединены, любые символы, введенные с одной стороны, будут отображаться на другой. Пользователь на компьютере А начинает ввод. Символы передаются через модем и отображаются на экране компьютера B. (Пользователь А может не видеть вводимые им символы – в зависимости от настройки локального эха в программном обеспечении терминала).
+++ Пользователь на компьютере B выдает команду выхода из режима модема. (В качестве альтернативы, и чаще, компьютер B может деактивировать сигнал DTR (Data Terminal Ready – готовность терминала данных) для разрыва соединения, без необходимости использования +++ или ATH).
OK Модем подтверждает получение команды.
ATH Пользователь на компьютере B выдает команду завершения соединения.
NO CARRIER OK Оба модема сообщают о завершении соединения. Модем B отвечает "OK" как ожидаемый результат команды; модем A сообщает "NO CARRIER" (отсутствие несущей), чтобы указать, что удаленная сторона прервала соединение. Модемы с обеих сторон также деактивируют сигналы DCD.
Автомобиль
Командный набор Хейса упростил автоматическое определение скорости передачи данных, поскольку символы "A" и "T" имеют очень регулярные битовые шаблоны: "A" – это "100 0001", и поэтому содержит бит "1" в начале и конце, а "T" – "101 0100", который имеет шаблон, где (почти) каждый второй бит установлен в "1". Поскольку интерфейс RS 232 передает младший бит первым, соответствующая последовательность при настройках 8N1 (восемь бит данных, без бита четности, один стоповый бит) выглядит как *01000001010001010101* (начальный и стоповый биты выделены курсивом), и используется в качестве синхрослова.
Набор голосовых команд
Модемы с функцией голосового набора или автоответчика поддерживают расширенный набор этих команд для обеспечения воспроизведения и записи цифрового звука.