Jak to działa? Znaczna część internautów nie korzysta w ogóle z usługi telnetu. To prawda, że z powodzeniem można zostać użytkownikiem sieci ograniczając się do usług FTP, WWW i Poczty, ale czy aby nie ograniczamy sobie przez to horyzontów? Czy telnet może być użyteczny dla przeciętnego użytkownika sieci? Oczywiście. Oto przykład. Pewnego dnia do jednej z polskich CyberCafe przyszła klientka z zamiarem odczytania poczty z własnego konta, znajdującego się gdzieś, hen na włoskich serwerach. Co prawda lokalny serwer był podłączony do nie byle jakiego łącza (1 Mbps), ale uzyskanie sensownego transferu między polskimi a włoskimi serwerami za pośrednictwem Polpaku jest nie lada problemem. W skrzynce pocztowej zalegało ok. 8 MB pokaźnych maili (przeważnie grafiki w formacie BMP przełożone na MIME). Protokół POP3 (podobnie jak i SMTP) ma jedną poważną wadę - brak możliwości ponowienia transferu tego samego listu, stąd też każdy z listów (o ponad 1 MB rozmiarze) musiał być przesłany bez zerwania transmisji. Okazało się to nie lada problemem. Koniec końców jedynym rozwiązaniem było ściągnięcie inboxu bezpośrednio z serwera (w tym wypadku można było ponowić transfer), niestety usługi telnetowe wspomnianego serwera były zablokowane... Gdyby jednak istniała możliwość dostania się na serwer za pośrednictwem telnetu i uruchomienia dowolnego, unixowego programu pocztowego, problem można by bardzo szybko rozwiązać, przenosząc pliki z obrazkami do innego folderu (na serwerze), a ściągając za pośrednictwem pop3 jedynie istotne informacje. Wnioski: nie pozwólmy zapychać sobie skrzynki pocztowej obrazkami... albo nauczmy się posługiwać telnetem. Takie przykłady można by mnożyć, choć z drugiej strony znaczna część użytkowników sieci nawet nie zdaje sobie sprawy z możliwości tkwiących w zdalnej pracy na serwerze. Cóż... pozostawmy to więc wtajemniczonym, a nie wtajemniczeni niech dalej płacą koszmarne rachunki pozostawiając on-line własne maszyny w celu ściągnięcia kilkumegabajtowych plików przy bardzo wolnym transferze... Usługa telnetu jest najłatwiejsza do zrozumienia, jeśli ktoś już zetknął się z systemem UNIX, gdzie gros pracy przebiega na terminalach działających w trybie tekstowym. Użytkownik zalogowany do systemu dostaje do dyspozycji powłokę systemową, tak zwany shell. Z jego poziomu może obsługiwać system przez wpisywanie komend i podawanie parametrów. Nadto każda powłoka, a tych jest kilka, żeby tylko wymienić sh, zsh, csh, tcsh, ksh, bash, oferuje pewien zestaw własnych komend, wkompilowanych w jej kod, może interpretować skrypty, dokonywać przekierowania wejścia i wyjścia etc. Do powłoki, a tym samym do systemu, można się dostać pokonawszy wcześniej program o nazwie login, dokonujący weryfikacji użytkownika i sprawdzający, czy ma on prawo pracować na danej maszynie. Telnet, jako się rzekło, jest usługą pozwalającą na zdalne zalogowanie na danej maszynie przy użyciu protokołu TCP/IP. Program wykonujący tę usługę nazywa się również "telnet" i w istocie jest emulatorem lokalnego terminala. Z
punktu widzenia systemu nie jest bowiem istotne, czy użytkownik pracuje lokalnie, czy też zdalnie, jedyną różnicą może być szybkość odpowiedzi systemu na polecenia. Pod wszystkimi innymi względami terminal emulowany przez program telnet zachowuje się dokładnie tak samo, jako lokalny terminal serwera, czyli najpierw daje nam do obejrzenia login, a po wpisaniu identyfikatora i hasła udostępnia powłokę. Telnet jest aplikacją typu serwer-klient, co najlepiej może pokazać poniższy rysunek. Na rysunku tym można wyróżnić kilka zasadniczych elementów.: Klient Telnet wymienia informacje zarówno z użytkownikiem pracującym na terminalu, jak i z protokołami TCP/IP. Zwykle wszystko co napiszemy przesyłane jest przez połączenie TCP/IP, a to co odebraliśmy wyświetlane jest na naszym terminalu. Serwer Telnet współpracuje często z tzw. pseudoterminalem. Dzięki temu powłoka logowania traktuje sesję Telnet jako uruchomioną na tym serwerze i tak samo widzą ją wszystkie inne programy uruchomione przez tę powłokę, które przesyłają i odbierają informacje z naszego terminala. Wykorzystywane jest tylko jedno połączenie TCP/IP. Ponieważ zdarza się, że klient telnet musi komunikować się z serwerem (i odwrotnie), to musi istnieć jakiś sposób przedstawienia przesyłanych poleceń i odróżniania ich od danych. Programy obsługi terminala i pseudoterminala, wraz z implementacją TCP/IP, są zwykle częścią jądra systemu operacyjnego. Klient i serwer Telnet to zwykle samodzielne aplikacje użytkownika. Aby zalogować się w systemie używając aplikacji Telnet, musimy mieć na nim swoje konto. Zdalne logowanie się nie jest aplikacją do przesyłania dużych ilości danych. Pomiędzy dwoma stronami wymienianych jest wiele
małych pakietów. Pisząc krótkie polecenia, generujemy zwykle dość duże odpowiedzi. Protokół Telnet Telnet został opracowany w taki sposób, aby działał pomiędzy dowolnymi hostami i dowolnymi terminalami(pomiędzy różnymi systemami operacyjnymi). Opiera się o protokół TCP, a jego specyfikacja jest zgodna z NVT(ang. Network Virtual Terminal - Wirtualny Terminal Sieciowy ). NVT jest wyimaginowanym urządzeniem, na które mapują swoje terminale oba końce połączenia, klient i serwer. NVT jest urządzeniem znakowym, stąd wzięła się nazwa NVT ASCII. NVT ASCII Określenie NVT ASCII odnosi się do 7-bitowego, opracowanego w USA wariantu znaków ASCII, który miał być używany w protokołach sieci Internet. Każdy z 7-bitowych znaków jest wysyłany jako znak 8-bitowy, w którym najstarszy bit jest ustawiony na 0. Polecenia Telnet'a Telnet w obu kierunkach używa sygnalizacji in-band. Bajt FF(255 - liczba ta nie mieści się w zakresie 7-bitowym, ale istnieje opcja binarna dla aplikacji Telnet pozwalająca na transmisję 8-bitową) jest nazywany IAC(ang. Interpret As Command). Kolejny bajt jest bajtem zawierającym polecenie. Polecenia: Nazwa EOF Kod Opis 236 Koniec pliku
SUSP 237 Wstrzymanie bieżącego procesu ABORT 238 Wyjście z procesu EOR 239 Koniec Rekordu SE 240 Koniec podopcji NOP 241 Nie Działa DM 242 Znacznik Danych BRK 243 Przerwa IP 244 Proces przerwania AO 245 Zamknięcie wyjścia AYT 246 Czy jesteś tam? EC 247 Wyjście EL 248 Skasuj Wiersz GA 249 Go Ahead SB 250 Początek podopcji WILL 251 Negocjowanie opcji WONT 252 Negocjowanie opcji DO 253 Negocjowanie opcji DONT 254 Negocjowanie opcji IAC 255 Bajt danych 255 Tryb pracy Większość klientów i serwerów Telnet pracuje w czterech trybach.: Tryb półdupleks Jest to domyślny tryb pracy obecnie rzadko stosowany. Domyślny terminal NVT jest urządzeniem półdupleksowym, które wymaga polecenia GO AHEAD (GA) wysłanego przez serwer, zanim zostaną zaakceptowane informacje podane przez użytkownika. Wpisywane przez użytkownika znaki są lokalnie odsyłane w postaci echa z klawiatury NVT na drukarkę NVT, dzięki czemu dopiero całe linie wysyłane są z klienta do serwera. Tryb znakowy Każdy znak wpisywany przez użytkownika jest natychmiast wysyłany do serwera. Serwer odsyła echo większości znaków, chyba że jego aplikacja wyłączyła tę funkcję. Kłopot z tym trybem pracy polega na tym, że podczas pracy na wolnych łączach lub w sieci o dużym ruchu, opóźnienie w nadsyłaniu echa jest zauważalne przez użytkownika. Tym nie mniej, ten tryb będziemy napotykali jako domyślny w większości używanych obecnie implementacji. Tryb wierszowy Tryb liniowy Podsumowanie Aby obsługiwać niejednorodne środowisko, Telnet jest wyposażony w funkcję negocjowania opcji pomiędzy klientem i serwerem i ustalania trybu pracy na
podstawie informacji o tym, co obsługują obie strony połączenia. Jest to podejście, które nie pozwala na implementację prostych rozwiązań klienta i serwera, ale umożliwia wykorzystanie nowszych funkcji, jeśli są one obsługiwane przez obie strony połączenia. Józek Łapiński Bibliografia: Ogólnoświatowa sieć komputerowa Internet "Biblia TCP/IP, Tom 1 - Protokoły" - W.Richard Stevens Magazyn "Internet"