Telnet - mycket mer än bara terminalprogram

Telnet används vanligen för att via Internet koppla upp sin dator som en terminal mot andra datorer. Mindre känt är att det även är ett universellt protokoll som kan användas i alla möjliga klient/server-tillämpningar.

Telnet utgör på sätt och vis basen för all världens e-post och www-kommunikation, som underliggande protokoll för http (webbläsare), smtp och pop3 (e-post) och ftp (filöverföring).

När telnet, eller terminal networking som förkortningen egentligen betyder, började utvecklas i slutet av sjuttiotalet var det vanligt att applikationer på en värddator av ett visst fabrikat endast kunde köras på tillverkarens egna terminaler. Begreppet öppna system var inte ens påtänkt. Telnet utvecklades primärt för att överbrygga dessa skillnader mellan olika tillverkare, som en standardmetod för kommunikation mellan terminaler och terminalorienterade processer. Dessutom är telnet avsett som ett generellt protokoll för bidirektionell 8-bitars kommunikation mellan två processer.

Man brukar därför skilja på telnet som en applikation för terminalemulering och som ett protokoll för kommunikation mellan processer. Telnets förmåga att fungera som en bas vid kommunikation mellan applikationer har gjort det till ett viktigt verktyg för utveckling av klient/server-applikationer.

Telnet som terminalapplikation.
Fortfarande finns ett stort antal databaser som upprättades innan webben gjorde sitt intåg. På grund av resursbrist är långt ifrån alla dessa databaser konverterade till moderna webbgränssnitt.

Även om problemet kring inkompatibla terminalbaserade applikationer tillhör i mångt och mycket det förgångna, används telnet fortfarande för att komma åt sådana databaser. Telnet kan emulera många olika terminaltyper, vilket gör att man kan köra applikationer på datorer av olika fabrikat. Det kan röra sig om allt från Unix till vax/vms-system och ibm stordatorer.

Uppkopplingen sker exempelvis genom att man från kommandoraden skriver telnet datornamn, där datornamn kan vara av typen dator.foretag.se eller ett IP-nummer som 192.173.52.14. Normalt loggar telnet in på tcp port 23, varefter värddatorn i regel frågar efter användarnamn och lösenord.

En egenskap som gör telnet så flexibel att den kan användas för alla möjliga ändamål är möjligheten att ansluta till valfritt portnummer.

Så snart en TCP-förbindelse öppnats utbyter klienten och servern information med varandra via ett enkelt protokoll kallat nvt (Network Virtual Terminal). nvt används för att förhandla fram vilken terminalemulering som skall användas, exempelvis vt100 eller ibm 3270.

Det förhandlas även om optioner såsom full eller halv duplex, teckenuppsättning etc. Så snart förhandlingen är klar påbörjas själva terminalemuleringen.

Telnet som protokoll.
När Telnet används som en byggsten i klient/server-applikationer behövs i regel inte terminalemuleringen, utan data kan kommuniceras uteslutande med hjälp av nvt. Data transporteras som strängar avslutade med ett crlf-par. Varje byte representerar antingen ett 7-bitars usascii-tecken eller ett 8-bitars telnet-kommando.

nvt-kommunikationen är halv duplex, vilket innebär att vid en given tidpunkt är det antingen klienten eller servern som har kontroll.
Så snart klienten sänt en rad avslutad med crlf, inväntas svar från servern. Servern sänder sedan en eller flera rader och avslutar med ett Go ahead-kommando, vilket indikerar att det är klientens tur att sända nästa rad.

Innan nätverk blev vanliga var terminaler i regel direktanslutna till sin lokala värddator. Tangenttryckningar kunde därför omedelbart tas emot och tolkas av den lokala datorns operativsystem. Exempelvis kunde man avbryta pågående program genom att trycka Control-C. Under en telnet-session måste sådana styrkoder översättas till telnet-kommandon och kommuniceras till operativsystemet i en avlägsen dator. Telnet- kommandon inleds med en iac-byte (Interpret As Command) följd av en eller flera bytes. iac-byten är alltid hex FF. Några vanliga kommandon är brk (break), IP (interrupt process), AO (abort output) och EL (erase line). Sådana kommandon kan sändas när som helst, även efter nvt-fasen. Men om parterna förhandlat att använda binär data, hur kan man då veta om hex FF är giltiga data eller en iac-byte? Problemet har lösts genom att sända data som två på varandra följande hex FF, medan en ensam hex FF alltid är en iac.

Om mottagaren ser en ensam (eller ett udda antal) hex FF vet den att det handlar om en iac. Det är tack vare dessa kommandon och möjligheten att ansluta till valfri tcp-port som telnet är så användbart som underliggande protokoll i exempelvis http (Hyper Text Transfer Protocol). Trycker man på stoppknappen i en webbläsare sänds ett AO-kommando (abort output), och nedladdningen av en stor binärfil eller ett stort dokument avbryts.

Om en riktig terminal sänder ett kommando för att exempelvis avbryta en process ser operativsystemet omedelbart detta, och kan agera direkt.

Annat är det med telnet som går via en tcp-session. Där levereras data i samma ordning som den sänds, och servern processar data i tur och ordning vartefter den mottas.

Det kan därför dröja innan servern ser kommandon som ligger djupt begravda i den inkommande dataströmmen. Lösningen ligger i att sända en sync-signal via tcp, vilket ger ett datasegment förtur, och låter servern ta emot kommandot omedelbart.

Prestanda. Telnet dras med stora prestandaproblem. Vid emulering av teckenbaserade ascii-terminaler blir ineffektiviteten särskilt påtaglig.

Varje segment som sänds innehåller endast ett enstaka eller ett fåtal tecken. Till yttermera visso måste varje tecken returneras till klienten (echo). Resultatet blir en enorm overhead i förhållande till nyttolasten.

Det är ytterligare ett skäl till att bygga moderna applikationer runt webbläsare som uppvisar en betydligt effektivare kommunikation.

Michael Seemann