Терминални приложения
Приложенията за отдалечено терминално свързване към мрежов хост дават на потребителя отдалечен достъп до командния ред на командната обвивка на операционната система на хоста и му позволяват да инициира изпълнение на програма в него. Не е необходимо да имате хардуерен терминал към всеки хост, можете да отидете до един хост с терминал, след което да използвате отдалечен терминал през мрежата към всеки друг хост.
Терминалните драйвери имат свой собствен вътрешен интерфейс със софтуерни модули, които интерпретират входа и изхода на низове. В каноничен режим интерпретаторите на низове преобразуват необработени последователности от данни, въведени от клавиатурата, в канонична форма.
Терминалите изпращат цялата входна последователност към машината, включително, например, знаците за изтриване на предишния знак. Интерфейсът на низовете буферира информацията в редове (набор от знаци, завършващи с връщане на каретка) и процесът на обработка изтрива знаците в реда, преди да изпрати коригираната последователност към процеса на четене.
Има три приложения в TCP/IP мрежи, които позволяват терминален достъп.
Програмата и протоколът Rlogin произхождат от OC Berkeley Unix 4.2BSD и първоначално осигуряваха оперативна съвместимост само между Unix системи, по-късно тази програма беше пренесена към други операционни системи.
Telnet е стандартно приложение, намиращо се в почти всяка реализация на TCP/IP. Може да се използва за комуникация между хостове, работещи с различни операционни системи. Telnet използва договаряне на опции на клиент и сървър, за да определи кои характеристики на терминала присъстват от двете страни. Данните се предават в отворена форма.
ssh е приложение за терминален достъп, което осигурява трансферданни в криптирана форма.
rlogin протокол
Rlogin е проектиран за дистанционно влизане в терминал между Unix хостове. Следователно той е по-прост от Telnet, тъй като не изисква дефиниране на параметри, които за една и съща операционна система са предварително известни както за клиента, така и за сървъра.
Rlogin използва една TCP връзка между клиент и сървър. След установяване на TCP връзка се извършва следната последователност от действия между клиента и сървъра.
Клиентът изпраща четири реда до сървъра:
(b) потребителското име на клиентския хост, завършващо с нулев байт
(c) потребителско име на сървърния хост, завършващо с нулев байт
(d) типа терминал на потребителя, последван от наклонена черта (/), последвана от скоростта на терминала, всички завършващи с нулев байт.
Трябва да бъдат изпратени точно две потребителски имена, тъй като не се изисква потребителите да имат едно и също потребителско име на различни хостове.
Типът терминал се предава от клиента към сървъра, тъй като тази информация е необходима за повечето приложения на цял екран. Скоростта на терминала се предава, защото някои приложения работят по различен начин в зависимост от скоростта.
Сървърът отговаря с нулев байт.
Сървърът има опция, чрез която може да поиска парола. Това се прави като нормална Rlogin връзка - не се използват специални протоколи. Сървърът изпраща низ към клиента (който клиентът показва на терминала), най-често този низ изглежда като Password:. Ако клиентът не въведе парола в рамките на определено време (обикновено 60 секунди), сървърът затваря връзката.
В началната директория на сървъра можете да създадете файл (наречен .rhosts), който ще съдържаиме на хост и потребителско име. Ако влезете в терминала от посочения хост с посоченото потребителско име, тогава няма да бъдете подканени да въведете парола. От гледна точка на сигурността е силно обезкуражено използването на тази функция.
Всичко, което се въвежда в отговор на запитване на парола от сървъра, се предава в ясен текст. Знаците на въведената парола се изпращат така, както са. Всеки, който може да чете пакетите в мрежата, може да чете всяка парола. Последващите реализации на клиента Rlogin, като тези в 4.4BSD, използват Kerberos за криптиране, когато се предават по мрежата.
В работен режим клиентът изпраща по 1 байт към сървъра, като всеки байт се повтаря от сървъра. Алгоритъмът на Nagle обикновено се използва за оптимизиране на потока от данни, така че множество входни байтове се изпращат през бавни мрежи като един TCP сегмент. В резултат на това всичко, което потребителят въвежда, се изпраща на сървъра, а това, което сървърът изпраща на клиента, се показва на терминала.
Има команди, които могат да се изпращат от клиент на сървър и от сървър на клиент.
По подразбиране контролът на потока обикновено се управлява от клиента Rlogin. Клиентът разпознава ASCII символите STOP и START (Control-S и Control-Q), въведени от потребителя, и спира или стартира изхода към терминала.
Ако това не е направено, всеки път, когато напишем Control-S, за да спрем изхода към терминала, символът Control-S се изпраща по мрежата към сървъра и сървърът спира да пише в мрежата, но данните (размерът на данните може да бъде до размера на прозореца) може вече да са излъчени от сървъра към мрежата и ще бъдат показани на терминала, преди изходът да бъде спрян. Стотици или хиляди байтове данни може да се превъртат на екрана, преди изходът да бъде спрян. Фигура 26.3 показва подобен сценарий.
Фигура 26.3 Операция за връзка с Rlogin в случай, че сървърът поддържа обмен STOP/START.
За интерактивни потребители това забавяне в отговор на въвеждане на символа Control-S е нежелателно.
Понякога обаче приложенията, работещи на сървъра, трябва да интерпретират всеки байт от въведените данни и не искат клиентът да използва символите Control-S и Control-Q по някакъв специален начин. В такъв случай сървърът може да каже на клиента дали поддържа контрол на потока или не.
Прекъсване на клиента
Проблем, подобен на контрола на потока, възниква, когато потребителят въведе знак за прекъсване (обикновено DELETE или Control-C), за да прекрати процес, изпълняван на сървъра. В този случай също един пълен прозорец с данни в канала между сървъра и клиента ще бъде предаден на клиента, докато знакът за прекъсване не премине през връзката в другата посока. Искаме знакът за прекъсване да спре или да прекъсне извеждането на екрана възможно най-бързо.
Промяна на размера на прозореца
Когато влезете от отдалечен терминал, преоразмеряването на прозореца се извършва на клиентския компютър и трябва да бъде докладвано на приложението, работещо на сървъра. Клиентът Rlogin се нуждае от някаква форма на известие, за да каже на сървъра, че размерът на прозореца се е променил и какъв е новият размер на прозореца сега.
Команди от сървър към клиент
Нека да разгледаме четири команди, които Rlogin сървърът може да изпрати на клиент през TCP връзка. Проблемът е, че има само една TCP връзка, така че сървърът трябва да маркира командните байтове, така че клиентът да ги интерпретира като команди и да не показва тези байтове на терминала. За това се използваTCP спешен режим.
Когато сървърът изпрати команда до клиента, той влиза в спешен режим, като последният байт спешни данни е командният байт от сървъра. Когато клиент получи спешно известие, той чете от връзката и съхранява данни, докато не бъде получен командният байт (последният байт спешни данни). Данните, които клиентът е запазил, могат да бъдат изведени към терминала или игнорирани, в зависимост от командата.
Нулиране на изхода. Клиентът отхвърля всички данни, получени от сървъра до командния байт (последния байт спешни данни). Клиентът също така отхвърля всички данни, буферирани и предназначени за извеждане към терминала. Сървърът изпраща тази команда, когато потребителят е въвел знак за прекъсване.
Клиентът престава да контролира потока от данни.
Клиентът възобновява управлението на потока.
Клиентът незабавно отговаря, като изпраща текущия размер на прозореца на сървъра и уведомява сървъра, ако размерът на прозореца се промени в бъдеще. Сървърът обикновено изпраща тази команда веднага след установяване на връзка.
Rlogin команди, изпратени от сървъра към клиента.
Една от причините, поради които горните команди се изпращат с помощта на спешния режим на TCP, е, че първата команда (изход за нулиране) трябва да бъде изпратена до клиента, дори ако потокът от данни от сървъра към клиента е спрян от контрола на потока от данни на TCP. Ситуацията, при която прехвърлянето на информация от сървъра към клиента е спряно от контрола на потока от данни, може да възникне, защото процесите, изпълнявани на сървъра, обикновено генерират изход по-бързо, отколкото той може да бъде показан на клиентския терминал. Въпреки това е доста рядко да възникне ситуация, когато прехвърлянето на информация от клиента към сървъра ще бъде спряно от контрол на потока.данни, тъй като в тази посока потокът от данни съдържа само символи, въведени от потребителя.
Уведомлението за спешност преминава през връзката, дори ако размерът на прозореца е зададен на 0. Останалите три команди не са критични за времето, но използват същия механизъм за опростяване на изпълнението.
Команди от клиент към сървър
Има само една дефинирана команда, която се изпраща от клиента към сървъра и тя е да изпрати текущия размер на прозореца към сървъра. Преоразмеряването на прозореца се изпраща на сървъра само след получаване на командата 0x80 от сървъра.
В този случай клиентът трябва да може да маркира командата, така че да не бъде предадена на приложение, работещо на сървъра. Клиентът маркира командата, като изпраща 2 байта, равни на 0xff, последвани от два специални байта с флаг.
За команда за размер на прозорец двата байта за флаг са ASCII символите s. Това е последвано от четири 16-битови стойности: броя на знаците в ред (обикновено 25), броя на знаците в колона (обикновено 80), броя на пикселите по оста x и броя на пикселите по оста y. Често последните две 16-битови стойности са 0, тъй като повечето приложения, изпълнявани от сървъра Rlogin, определят размера на екрана в знаци, а не в пиксели.
Тази форма на представяне на команди се нарича сигнализиране в лентата, тъй като командните байтове се предават в нормален поток от данни. Байтовете, които отделят командите от потока от данни (0xff), са избрани така, че натискането на който и да е клавиш да не може да ги генерира. Тази форма на представяне на команди има своите недостатъци. Ако можем да генерираме два последователни байта, равни на 0xff от клавиатурата, последвани от два ASCII знака s, следващите 8 въведени байта ще бъдат взети като размери на прозореца.
Rlogin командите от сървър към клиент се наричат команди за сигнализиране извън лентата.
Методи за прекратяване на клиент
Обикновено всичко, което въведе потребителят на Rlogin, се изпраща на сървъра. Понякога обаче става необходимо да говорите директно с клиентската програма Rlogin. В този случай сървърът не трябва да изпраща нищо. Това става чрез въвеждане на знака тилда (
) в първата позиция на низа, която може да бъде последвана от един от следните четири знака:
Точката прекратява клиента.
Символ за край на файла (обикновено Control-D) прекратява клиента.
Символът за потискане (обикновено Control-Z) спира клиента.
Символът за отложено потискане (обикновено Control-Y) забавя само въвеждането на клиента. В този случай всичко въведено от клавиатурата се интерпретира от програмата, работеща на клиентския хост, но всичко, изпратено от Rlogin от сървъра към клиента, се появява на терминала. Това може да се използва, когато на сървъра се изпълнява задача, която ще отнеме много време и трябва да знаете кога и какво ще произведе, но трябва да стартирате друга програма на клиента.
Последните две команди се поддържат само ако клиентът е Unix система, която поддържа контрол на задачите.
Telnet е проектиран да работи между хостове, работещи с всяка операционна система и всеки терминал. Спецификацията му дефинира терминал, който може да бъде най-общ и който се нарича мрежов виртуален терминал (NVT). NVT е въображаемо устройство, разположено в двата края на връзката, при клиента и сървъра, с помощта на което се установява кореспонденция между техните реални терминали. Така че операционната системаклиентът трябва да определи съответствието между типа терминал, с който работи потребителят, и NVT. На свой ред сървърът трябва да установи съответствие между NVT и типовете терминали, които той (сървърът) поддържа.

NVT е символно устройство с клавиатура и принтер. Данните, въведени от потребителя на клавиатурата, се изпращат към сървъра, а данните, получени от сървъра, се изпращат към принтера. По подразбиране клиентът повтаря въведеното от потребителя на принтера, но както ще видим по-долу, има опции, които ви позволяват да промените това поведение.
Терминът NVT ASCII означава 7-bit U.S. Наборът ASCII символи, използван от фамилията интернет протоколи. Всеки 7-битов знак се изпраща като 8-битов байт с най-значимия бит, зададен на 0.
Краят на реда се предава като последователност от два знака - CR (връщане на каретка), последвано от LF (преминаване на ред). Протоколите FTP, SMTP, Finger и Whois използват NVT ASCII за въвеждане на клиентски команди и отговори на сървъра.
Telnet използва вътрешнолентови команди за сигнализиране и в двете посоки. Байт 0xff (255 десетичен) се нарича IAC, "интерпретира се като команда". Следващият байт е командният байт. За да се изпратят данните от данните, равни на 255, се изпращат два последователни байта, равни на 255 (по-горе беше посочено, че потокът от данни има NVT ASCII формат, т.е. използват се 7-битови стойности, което означава, че данните от данните са равни на 255 чрез Telnet. Има обаче опция за Telnet, описана в RFC 856 [Posteel и Reynolds 1983b], която , което, което, което, което ви позволява да прехвърляте 8-битови данни.)