Читаем без скачивания TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - Сидни Фейт
Шрифт:
Интервал:
Закладка:
Для управления экраном клиента серверу доступно небольшое подмножество управляющих символов (см. таблицу 13.1). В таблице коды ASCII представлены десятичными числами.
Таблица 13.1 Управление принтером MVT
Описание Код ASCII Null (Пустой, используется как заполнитель) 0 Bell (Звонок для вывода звукового сигнала) 7 Backspace (На шаг назад, перемещение на один символ влево) 8 Horizontal tab (Горизонтальная табуляция) 9 Line feed (Перевод строки) 10 Vertical tab (Вертикальная табуляция) 11 Form feed (Перевод формата, перемещение к следующей странице) 12 Carriage return (Возврат каретки) 1313.8.3 Взаимодействие клиент/сервер telnet в режиме NVT
Вспомним, что взаимодействие NVT является полудуплексным — клиент или сервер telnet в каждый момент времени производит одно из следующих действий:
■ После того как клиент telnet послал строку, завершенную CR и LF, управление передается серверу.
■ Сервер посылает клиенту строки, и в конце каждой выведенной строки он использует CR и LF для перехода к позиции следующей строки на дисплее клиента.
■ Клиент telnet принимает вывод от сервера и может начать собственный вывод данных только после получения от сервера управляющего кода Go Ahead.
Отметим, что пересылаемые в сеансе telnet строки завершаются символами CR и LF независимо от того, какие локальные символы перевода строки используют хосты клиента и сервера.
13.9 Команды telnet
До широкого распространения сетей терминалы подключались непосредственно к компьютерам. Нажатие пользователем клавиши клавиатуры немедленно интерпретировалось операционной системой локального компьютера.
Существовали специальные клавиши управления, которые активизировали операционную систему или какую-то системную команду. Например, пользователь терминала ASCII мог одновременно нажать клавиши CONTROL и С (записывается как ^C) для указания операционной системе на завершение работы текущего приложения.
Во время сеанса telnet управляющие коды должны быть преобразованы в команды telnet и переданы на удаленный конец сетевого соединения в соответствующую операционную систему. Для этого клиентская программа telnet должна обрабатывать физические действия пользователя с клавиатурой, транслировать специальные управляющие символы в команды telnet и пересылать их на сервер telnet.
Команды telnet отмечаются байтом "интерпретировать как команду" (Interpret As Command — IAC), сопровождаемым одним или несколькими байтами кодов:
Байт Interpret As Command равен X'FF (десятичное 255).
Клиент telnet посылает серверу последовательности команды, чтобы указать на выполнение различных функций, например:
Прерывание (Break - BRK) Послать сигнал "прерывание" или "внимание" процессу удаленного приложения. Прервать процесс (Interrupt Process — IP) Сигнал для удаленной операционной системы об остановке выполнения текущей удаленной прикладной программы (например, остановить зацикленную программу). Прервать вывод (Abort Output — AO) Запросить у серверного приложения не посылать оставшиеся данные текущей операции. Вы здесь? (Are You There? — AYT) Проверить, что сервер действительно работает. Стереть символ (Erase Character — EC) Пользователь обычно исправляет ошибочно введенный в строке символ с помощью клавиш Backspace или Del. В режиме посимвольной пересылки ASCII ошибочный элемент данных уже был послан удаленному приложению, поэтому требуется ввод специальной команды ЕС. Стереть строку (Erase One — EL) Запрос к удаленному приложению на уничтожение текущей строки.Команды могут быть посланы даже после согласования параметров соединения, когда партнеры больше не находятся в режиме NVT. Но предположим, что партнеры согласовали обмен двоичными данными. Как будет тогда распознаваться последовательность символов команды? Ответ состоит в том, что всякий раз последовательность X'FF, возникая в данных; удваивается при отправке. Приемник устраняет дублирование. Когда он получает одиночный X'FF (или нечетное их число), становится ясно, что поступила команда.
Легко понять, как команды telnet должны использоваться разработчиком приложений клиент/сервер. Например, результатом щелчка мышью на кнопке STOP браузера WWW должна стать отправка команды Abort Output, завершающая загрузку большого по размеру изображения или документа.
Возможности telnet хорошо проявляются при анализе работы конечного пользователя как клиента, обращающегося к приложению на сервере. Важно отметить, что при использовании telnet в качестве инструментального средства разработки команды могут быть посланы в любом направлении обмена.
13.9.1 Сигнал синхронизации
Для некоторых функций (например, Interrupt Process) включение команды в общий поток данных не приводит к нужным результатам. Когда реальный терминал посылает сигнал прерывания, хост операционной системы получает этот сигнал сразу и быстро останавливает текущее приложение.
Однако, когда telnet работает поверх сеанса TCP, данные доставляются по мере получения. Обычно удаленный сервер telnet последовательно обрабатывает все полученные данные. Может пройти много времени, прежде чем он увидит команду прерывания в поступающем потоке данных.
Клиент хочет быстро обратить внимание сервера на эту команду и должен сообщить ему. "Отбросить все уже буферированные символы, за исключением команд". Для этого клиент посылает серверу специальный сегмент TCP, называемый сигналом синхронизации (Synch signal).
■ Такой сегмент маркирован как срочные данные (Urgent Data).
■ Сервер будет отбрасывать всю информацию от клиента, за исключением команд, пока не достигнет специального командного кода, называемого меткой данных (Data Mark — DM).
■ DM маркирует место, где сервер должен прекратить отбрасывание данных.
Когда поступает сегмент сигнала синхронизации, сервер извлекает из потока данных команды NVT, отбрасывая все остальное, пока не дойдет до Data Mark. Затем он переходит к выполнению извлеченных команд, а далее возобновляется нормальная обработка данных (стоящих после Data Mark).
13.9.2 Декодирование наиболее общих команд
В таблице 13.2 приведен список акронимов для некоторых наиболее распространенных команд (вместе с десятичными значениями их кодов). Каждой команде должен предшествовать октет 255 (X'FF), когда она пересылается по соединению telnet.
Таблица 13.2 Коды команд telnet
Акроним Команда Код EOF End of File (конец файла) 236 SUSP Suspend Current Process (приостановить текущий процесс) 237 ABORT Abort Process (аварийное завершение процесса) 238 EOR End of Record (конец записи) 239 NOP No Operation (нет операции) 241 DM Data Mark (метка данных) 242 BRK Break (прерывание) 243 IP Interrupt Process (прерывание процесса) 244 AO Abort Output (отменить вывод) 245 AYT Are You There (вы здесь?) 246 EC Erase Character (стирание символа) 247 EL Erase Line (стирание строки) 248 GA Go Ahead (продолжить) 24913.9.3 Кодирование запросов выбора вариантов