Спецификация конечного автомата
Протокол TELNET определяет правила передачи клиентской программой символов в удаленную службу и правила отображения данных, возвращенных этой службой. Основная часть трафика, проходящего через соединение, состоит из отдельных символов данных. Символы данных поступают в клиентскую программу при нажатии пользователем клавиш на клавиатуре; они также формируются на сервере при выработке выходных данных в сеансе дистанционного доступа. Кроме символов данных, протокол TELNET позволяет также клиенту и серверу обмениваться управляющей информацией. В частности, клиент может передать на сервер последовательность символов, представляющую собой команду управления работой удаленной службы, а также передать такую управляющую последовательность, которая может прервать работу удаленной прикладной программы. Ищете клей в Москве? Все виды - шприцевать клей для дерева влагостойкий. Нужны покупатели?
В большинстве реализаций протокола TELNET для точного определения синтаксиса и интерпретации управляющих последовательностей применяются конечные автоматы. Конечный автомат как инструментальное средство определения спецификации позволяет составить точное описание протокола. Он показывает, как отправитель должен встраивать управляющие последовательности в поток данных, и определяет, как получатель должен интерпретировать такие последовательности. Еще более важно то, что конечный автомат может быть непосредственно преобразован в программу, соответствующую данному протоколу. Поэтому появляется возможность проверить, соответствует ли результирующая программа спецификации протокола.
Поскольку TELNET — это протокол с символьной организацией, в котором последовательности команд включены в потоки данных, проходящие между клиентом и сервером в прямом и обратном направлениях, в большинстве его реализаций для точного определения правил работы используются конечные автоматы.
Внедрение команд в поток данных TELNET
В основе работы протокола TELNET лежит простой принцип: эта программа вставляет в поток данных специальный зарезервированный символ каждый раз при возникновении в клиентской или серверной программе необходимости передать управляющую последовательность вместо обычных данных. Для обозначения этого зарезервированного символа применяется аббревиатура IAC (Interpret As Command — Интерпретировать как команду). После обнаружения символа IAC во входящем потоке данных получатель обрабатывает следующие октеты как принадлежащие к управляющей последовательности. Для передачи символа IAC в качестве данных отправитель вставляет перед ним еще один символ IAC.
Любая управляющая последовательность может содержать либо запрос на установку опции, либо ответ на запрос. В запросе содержится требование к получателю применять (или не применять) определенную опцию TELNET; в ответе содержится подтверждение, что запрос принят, и указывается, будет ли получатель применять данную опцию.
В протоколе определены два глагола, DO и D0NT, которые могут использоваться отправителем для формирования запроса. Как и в большинстве правил, определенных протоколом TELNET, стандарт протокола указывает, что каждый глагол и каждая опция должны быть закодированы одним символом. Поэтому запрос при его появлении в потоке данных обычно состоит из трех символов:
IAC verb option
Здесь verb обозначает условный символ, соответствующий глаголу DO или DONT, a option — условный символ, соответствующий одной из опций TELNET.
В качестве примера рассмотрим опцию эхо-повтора протокола TELNET. Обычно сервер выполняет эхо-повтор каждого полученного символа (т.е. отправляет его копию на экран терминала пользователя). Для отключения дистанционного эхо-повтора символов клиент передает три условных символа, которые соответствуют следующей команде:
IAC DONT ECHO