3.3. Виртуальный сетевой терминал (NVT)

Далеко не все компьютерные системы трактуют один и тот же набор символов (например, перевод каретки, перевод строки, символы табуляции и забоя) одинаково. В Unix, например, строчку текста принято заканчивать символом перевода каретки (CR), а в некоторых системах — переводом строки (LF). В DOS, как известно, строка оканчивается и переводом каретки, и переводом строки. Прервать выполняющуюся программу в некоторых системах можно нажатием комбинации Ctrl-C, а в некоторых — клавишей Esc. Другими словами, для одинаковых целей в различных ОС используются различные символы.

Все компьютеры (точнее, операционные системы) выполняют похожие операции. Однако несовместимость управляющих символов может привести к тому, что корректно работающая на одном компьютере сетевая программа выдаст непредсказуемые результаты на другом. Хорошо спроектированная сеть обязана сама помогать программам устранять такие недоразумения.

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

Стек протоколов TCP/IP не имеет отдельного уровня представления. Основные функции этого и сеансового уровней модели ISO/OSI берет на себя прикладной уровень. Тем не менее в TCP/IP существует протокол виртуального терминала.

Семейство протоколов TCP/IP имеет протокол виртуального терминала под названием TELNET. Вам, возможно, приходилось встречаться с ним, когда вы входили в удаленную систему. Однако не всем известно, что TELNET работает по специально спроектированному протоколу, описанному в RFC 854, «Спецификация протокола Telnet» (Telnet Protocol Specification, Postal and Reynolds, 1983). Основополагающая концепция TELNET — идея сетевого виртуального терминала (Network Virtual Terminal, NVT). Эта концепция используется не только в TELNET. Многие протоколы, например, Finger, также работают по этому принципу. В спецификации TELNET виртуальный терминал описывается, как воображаемое устройство, выполняющее соглашения о работе обыкновенных компьютерных мониторов или терминалов, таких, как VT100, например.

Концепция NVT, как она описывается в спецификации TELNET, является исключительно протоколом работы виртуального терминала. Сам протокол TELNET, однако, не является протоколом виртуального терминала. Все компьютерные системы выполняют сходные действия, выводя информацию на экран. Например, когда экран переполняется, почти все терминалы сдвигают текст вверх, освобождая внизу место — для вновь поступающего текста. Большинство терминалов позволяют пользователю стирать ошибочно введенные данные и т. д.

Каждый терминал пользуется концепцией перевода каретки, оставшейся с давних времен, когда еще существовали устройства, называемые «каретки», которые действительно можно было «переводить». Когда машинистка заканчивала ввод строчки, она нажимала «перевод каретки», и лист бумаги возвращался в исходную позицию, сместившись вниз на одну строку. На современных компьютерах для этой же цели используется клавиша «Return» или «Enter», сдвигающая курсор в крайнюю левую позицию следующей строки. Сама функция называется по-прежнему: «перевод каретки» (CR). В спецификации виртуального терминала указывается, какими символами нужно кодировать те или иные действия. То есть какие символы представляют перевод каретки, забой, очистку экрана и прочие специальные действия. Определив единый для всех сетевых программ стандарт, NVT тем самым скрыл различия в реализации этих функций в разных сетевых компьютерах.

Перед тем, как отправить данные, и клиент, и сервер кодируют их в соответствии с требованиями NVT. Программы-получатели данных, наоборот, декодируют их в соответствии с требованиями собственной операционной системы.

Формат NVT

Формат NVT, заданный в спецификации TELNET, весьма прост. Вы знаете, что наименьшая частица информации, которой обычно оперируют современные компьютеры, равна одному байту. Для кодирования сетевых данных NVT пользуется стандартной американской кодировкой ASCII (American Standard Code for Information Interchange). Для кодирования данных в стандартном (не расширенном) наборе ASCII на один символ отведено всего 7 битов. Для передачи командных последовательностей NVT использует восьмой (старший) бит.

В наборе US-ASCII есть 95 печатных символов и 33 управляющих. К первым относятся цифры, буквы, знаки пунктуации и другие. Некоторые из 33 управляющих широко применяются в устройствах вывода данных, а некоторые – нет. Хорошо известен, например, символ с кодом ASCII 7 или, по-другому, BEL. Его появление в тексте приводит к генерации звукового сигнала. Некоторые из управляющих символов ASCII используются я в NVT. Они перечислены в табл. 3.3.

Таблица 3.3

Управляющие ASCII-коды в представлении NVT

Код

управляющего символа

Шестнадцатиричное значение

Совершаемое действие

NUL

BEL

BS

НТ

LF

VT

FF

CR

0х00

0х07

0х08

0х09

0х0А

0х0В

0х0С

0x0D

Не производит никакой операции

Звуковой (звонок) или визуальный сигнал

Сдвиг влево на одну позицию (backspace)

Сдвиг вправо на одну позицию горизонтальной табуляции

Сдвиг вниз на одну строку (перевод строки, line-feed)

Сдвиг вниз на следующую позицию вертикальной табуляции

Перемещение на начало следующей страницы (formfeed)

Сдвиг к левой границе текущей строки (возврат каретки, carriage-return)

Кроме того, в NVT определена стандартная комбинация символов для обозначения конца строки: CRLF (перевод каретки и перевод строки). Как только пользователь нажимает клавишу Enter (или Return), NVT преобразует нажатие в символы CRLF. Определения символов NVT называются также NVT ASCII — они полностью описаны, в спецификации протокола TELNET. NVT ASCII используется многими сетевыми программами.

Кроме вышеописанных символов, NVT определяет и некоторые другие. Правда, они очень редко встречаются на практике.

В RFC 854, "Спецификация протокола TELNET», NVT описывается как часть протокола TELNET. NVT обеспечивает стандартный сетевой интерфейс, подобный виртуальному сетевому протоколу, призванный скрыть различия между компьютерами в интерпретации таких символов, как перевод каретки, строки, маркеров конца строки и т. п. Для кодирования цифр, букв и знаков пунктуации NVT использует 7-битную кодировку. Из 33 управляющих символов ASCII используются только восемь (они перечислены в табл. 3.3). Комбинация CRLF {перевод каретки и перевод строки} используется в качестве маркера конца строки. Набор ASCII, определенный в NVT, часто так и называется: NVT ASCII. Множество программ Интернет пользуются набором NVT ASCII при передаче сетевых данных.