Home

Page 5
Page 5
background image

задачи Telnet клиент и Telnet сервер должны обмениваться специальными 
управляющими командами.
Эти и другие причины приводят к необходимости помимо передачи любых 

данных,   введенных   с   терминала   пользователя   удаленному  shell  и   наоборот 
обеспечить возможность так же обмениваться данными непосредственно клиенту 
Telnet и серверу Telnet. Рассмотрим, механизм такой передачи. 

Вообще   говоря,   все   байты,   которые   ввел   с   терминала   пользователь 

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

Пусть в такой поток данных необходимо вклинить некоторые служебные 

данные,   например,  Telnet  клиент   хочет   передать  Telnet  серверу   некоторую 
служебную информацию, которую не нужно передавать shell, так как ее породил 
Telnet  клиент,   а   не   пользователь.   Возможно   и   обратное: Telnet  сервер   хочет 
передать Telnet клиенту некоторую служебную информацию, которую не нужно 
передавать на терминал пользователя, так как ее породил  Telnet  сервер, а не 
shell.   Как   вклинить   такие   служебные   данные   в   поток   не   интерпретируемых 
клиентом   и   сервером   данных?   Для   этого   в   протоколе  Telnet  применяется 
следующий метод: при необходимости передать команду от сервера к клиенту 
или   наоборот   эта   команда   предваряется   специальным   байтом   255,   который 
называется  IAC  (Interpret  As  Command).   После   этого   байта   следует   команда, 
которая   может   быть   однобайтовой   или   двухбайтовой   (в   зависимости   от   типа 
команды), после команды снова идут неинтерпретируемые клиентом и сервером 
данные. При необходимости передать просто байт 255, используется удвоение 
этого   байта.   Итого,   если   в   линии   связи  Telnet  клиент   или  Telnet  сервер 
встречают байт 255, то их поведение зависит от того, какой байт следует за ним, 
если   за   байтом   255   следует   еще   один   байт   255,   то   клиент   или   сервер 
пропускают дальше (shell или терминалу) один байт 255. Если же за байтом 255 
передается   другой   байт,   то   клиент   или   сервер   обрабатывают   ту   команду, 
которая   следует   за   байтом   255,   а   передают   дальше   (shell  или   терминалу) 
данные   без   байта   255   и   следующей   за   ним   команды.   Такой   метод   получил 
название – байт стаффинг (byte stuffing).

Рассмотрим   принципы   описания   параметров   сеанса   при   старте   сеанса 

Telnet. Пусть Telnet клиент установил соединение с Telnet сервером с помощью 
протокола  Telnet.   При   этом   двум   сторонам   необходимо   оговорить   целый   ряд 
параметров.   Эти   параметры   оговариваются   с   помощью   нескольких   команд 
Telnet. Всего таких команд четыре:

• WILL (251)

• WON’T (252)
• DO (253)

• DON’T (254)

Каждая   дополнительная   возможность,   оговариваемая   с   помощью   этих 

команд   называется   в   протоколе  Telnet  «опцией».   Все   опции   имеют 
однобайтовые   номера   опций,   соответственно   синтаксис   вышеперечисленных 
команд: IAC DO (DON’T, WILL, WON’T) № опции. Т.е. команды DO, DON’T, WILL, 
WON’T  –   двухбайтовые,   один   байт   –   команда,   один   байт   –   номер   опции, 
использование которой оговаривается.


Copyright © 2019 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.