Тайм-ауты и повторные передачи TCP

         

Режим строка за раз (Kludge Line Mode)



Режим строка за раз (Kludge Line Mode)

Мы видели на рисунке 26.11, что более новые сервера, которые поддерживают опцию линейного режима, входят в режим строка за раз, если клиент не поддерживает линейный режим. Мы также упомянули, что все клиенты и серверы на этом рисунке поддерживают режим строка за раз, однако это не было установкой по умолчанию и должно быть специально включено сервером или пользователем. Давайте посмотрим, как включается режим строка за раз с использованием опций Telnet.

Во-первых, мы опишем, как сервер BSD/386 обсуждает этот режим, когда клиент не поддерживает реальный линейный режим.

  1. Когда клиент отказывает на требование сервера включить линейный режим, сервер посылает опцию DO TIMING MARK. RFC 860 [Postel and Reynolds 1983f] определяет эту опцию Telnet. Она предназначена для того, чтобы оба участника обмена могли синхронизироваться друг с другом. Мы увидим, как это происходит, позже в этом разделе, когда будем рассматривать прерывание от пользователя. Использование этой опции заключается в том, чтобы определить, поддерживает ли клиент режим строка за раз.
  2. Клиент отвечает WILL TIMING MARK, что указывает на то, что он поддерживает опцию строка за раз.
  3. Сервер посылает опцию WONT SUPPRESS GO AHEAD вместе с опцией WONT ECHO, сообщая о том, что он хочет выключить эти две опции. Мы упоминали ранее, что режим символ за раз подразумевает, что обе опции SUPPRESS GO AHEAD и ECHO включены, таким образом, выключение этих опций стартует режим строка за раз.
  4. Клиент отвечает DONT SUPPRESS GO AHEAD и DONT ECHO.
  5. Сервер посылает приглашение login:, мы вводим имя. Ввод отправляется серверу в виде полной строки и отражается локальным эхом клиентом.
  6. Сервер посылает строку Password: вместе с опцией WILL ECHO. При вводе пароля отражение эхом выключается, так как Telnet клиент считает, что сервер ответит эхом. Клиент отвечает DO ECHO.
  7. Мы вводим пароль. Он отправляется клиентом на сервер в виде полной строки.
  8. Эхо снова включается, после того как сервер отправил WONT ECHO, на что клиент отвечает DONT ECHO.

С этого момента обычные команды обрабатываются так же, как и с опцией линейного режима. Клиент осуществляет все редактирование и отражение эхом, отправляя серверу полные строки.

Мы упоминали ранее, что все клиенты и сервера на рисунке 26.11, которые помечены как "char", поддерживают режим строки за раз, однако по умолчанию стартуют в режиме символ за раз. Мы можем увидеть, как происходит обсуждение, когда мы сообщаем клиенту о необходимости войти в линейный режим:


клиент это sun, сервер это svr4
svr4 % вводим Control-], чтобы пообщаться с Telnet клиентом
(эхо выключено)

telnet> status проверяем, находимся ли мы в режиме символ за раз
Connected to svr4.tuc.noao.edu
Operating in character-at-a-time mode.
Escape character is '^]'.

telnet> toggle options просмотрим обработку опций
Will show option processing.

telnet> mode line переключимся в режим строки за раз
SENT dont SUPPRESS GO AHEAD клиент отправляет эти две опции
SENT dont ECHO
RCVD wont SUPPRESS GO AHEAD и сервер отвечает на обе WONT
RCVD wont ECHO



Telnet сессия помещается в режим строки за раз, при этом обе опции SUPPRESS GO AHEAD и ECHO выключены.

Если мы запустим приложение, такое как редактор vi, на сервере, то будем иметь те же проблемы, что мы имели с опцией линейного режима. Серверу необходимо сообщить клиенту о необходимости переключиться из режима строка за раз в режим символ за раз, пока работает это приложение, а затем переключиться обратно, когда оно закончит свою работу. Используется следующая техника.

  1. Telnet сервер знает, что он должен перейти в режим символ за раз, потому что приложение меняет режим на своем псевдотерминале, о чем уведомляется сервер. Сервер посылает WILL SUPPRESS GO AHEAD и WILL ECHO, это помещает клиента в режим символ за раз.
  2. Клиент отвечает DO SUPPRESS GO AHEAD и WILL ECHO.
  3. Приложение запускается на сервере.
  4. Когда приложение прекращает свою работу и изменяет режим своего псевдотерминала, Telnet сервер помещает клиента обратно в режим строка за раз. Он посылает WONT SUPPRESS GO AHEAD и WONT ECHO.
  5. Клиент отвечает DONT SUPPRESS GO AHEAD и DONT ECHO, указывая на то, что он вернулся в режим строка за раз.

На рисунке 26.16 показаны различные установки опций SUPPRESS GO AHEAD и ECHO для режимов символ за раз и строка за раз.

Режим SUPPRESS GO AHEAD ECHO Пример
символ за раз вкл. вкл. редактор vi в режиме строка за раз
строка за раз выкл. выкл. обычные команды
строка за раз выкл. вкл. ввод пароля


Содержание раздела