RFC: 1123
Оригинал: Requirements for Internet Hosts - Application and Support
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

3.3. Частные вопросы

3.3.1. Соглашение Telnet о завершении строки (End-of-Line)

Протокол Telnet определяет последовательность символов CR LF в качестве сигнала завершения строки (end-of-line). Для терминального ввода это соответствует завершению команды или нажатию клавиши завершения строки на пользовательском терминале (на терминалах ASCII это клавиша CR, которая может также называться Return или Enter).

Когда сервер Telnet принимает сигнал завершения строки CR LF как ввод с удаленного терминала, эффект должен быть таким же, как от нажатия клавиши завершения строки на локальном терминале. На хостах, использующих ASCII, в частности, получение сервером Telnet последовательности CR LF должно сопровождаться таким же эффектом, как нажатие клавиши CR на локальном терминале. Таким образом, последовательности CR LF и CR NUL должны иметь одинаковый эффект на серверных хостах ASCII при получении ввода от соединений Telnet.

Клиент Telnet должен обеспечивать возможность передачи любой из последовательностей CR LF, CR NUL и LF. Клиентам Telnet на хостах ASCII рекомендуется обеспечивать пользователю возможность выбора последовательности CR LF или CR NUL при нажатии клавиши завершения строки (по умолчанию следует использовать последовательность CR LF). Последовательность завершения строки Telnet CR LF должна использоваться для передачи данных Telnet, которые не относятся к типу «терминал-хост» (например, при передаче вывода от сервера Telnet или встраивании других прикладных протоколов в Telnet).

  • Обсуждение
  • Для обеспечения интероперабельности между различными серверами и клиентами Telnet в протоколе Telnet определено стандартное представление сигнала завершения строки. Поскольку ASCII не включает в явном виде символа завершения строки (end-of-line), могут использоваться различные варианты, в зависимости от системы (например, CR, LF, CR LF). В качестве стандартной протокол Telnet определяет последовательность CR LF.

    К сожалению, спецификация протокола Telnet в [RFC854] не указывает однозначно символов, которые должны передаваться от клиента к серверу при нажатии клавиши завершения строки. В результате отсутствия однозначности постоянно возникают проблемы с интероперабельностью, порождаемой различными недостаточно корректными реализациями клиентов и серверов Telnet.

    Хотя протокол Telnet основан на симметричной модели взаимодействия, в сеансах удаленного доступа роли пользовательского терминала и серверного хоста различаются. Например, RFC 854 определяет CR, LF и CR LF как выходные последовательности сервера, но не задает: какие символы должны передаваться со стороны клиента Telnet при нажатии на терминале клавиши завершения строки.

    При нажатии пользователем клавиши завершения строки некоторые реализации клиентов Telnet передают последовательность CR LF, а другие — CR NUL (в результате различной интерпретации одного и того же предложения в тексте RFC 854). Эти последовательности будут эквиваленты для корректно реализованных серверов на хостах ASCII, как было показано выше. Для других серверов требуется выбор режима в клиентской реализации Telnet.

    Существование клиентов Telnet, которые передают только CR NUL при нажатии клавиши CR, порождает дилемму для хостов, не поддерживающих ASCII — трактовать CR NUL на входе как эквивалент CR LF, препятствуя возможности ввода только CR, или полностью терять связь с сетью.

    Предположим, что пользователь на хосте A применяет Telnet для доступа к серверу на хосте B, запуска на этом хосте (B) другого клиента Telnet для работы с сервером на хосте C. Для комбинации клиент/сервер Telnet на хосте B желательно обеспечить прозрачность (т. е. для хоста A такое подключение должно выглядеть, как прямое соединение с сервером C). В частности, корректна реализация будет обеспечивать прозрачность для Telnet-последовательностей завершения строки (за исключением преобразования CR LF в CR NUL и обратно).

  • Реализация
  • Чтобы разобраться с вопросами трактовки завершения строки в Telnet, нужно понять по крайней мере общую модель взаимодействия Telnet с локальной ОС. Серверный процесс Telnet обычно встроен в терминальный драйвер операционной системы как псевдотерминал. Последовательность завершения строки, принимаемая сервером Telnet должна давать такой же эффект, как нажатие клавиши завершения строки на локально подключенном терминале.

    Операционные системы, поддерживающие интерактивные приложения character-at-a-time (например, текстовые редакторы), обычно поддерживают два внутренних режима для своих терминалов ввода-вывода — форматированный режим, при котором к потоку данных применяется соглашение о завершении строки и другие правила форматирования, и режим необработанного текста (raw), при котором приложение имеет прямой доступ к символу сразу после его ввода. Серверы Telnet должны быть реализованы таким образом, чтобы оба режима имели одинаковый эффект для локальных и удаленных терминалов. Для примера предположим, что последовательность CR LF или CR NUL принимается сервером Telnet на хосте ASCII. В режиме raw передается приложению символ CR, а в форматированном режиме используется локальное соглашение о символах завершения строки.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.