Il protocollo Telnet

Il protocollo Telnet è un protocollo standard di internet che permette l'interfacciamento di terminali e di applicazioni attraverso internet. Questo protocollo fornisce le regole di base per permettere di collegare un client (sistema composto da una visualizzazione e una tastiera) a un interprete di comando (lato server).

Introduzione al protocollo Telnet

Il protocollo Telnet si basa su una connessione TCP per inviare dei dati in formato ASCII codificati a 8 bit fra i quali si intercalano delle sequenze di controllo Telnet. Esso fornisce inoltre un sistema orientato comunicazione, bidirezionale (half-duplex), codificato a 8 bit, di facile realizzazione. Il protocollo Telnet si basa su tre concetti fondamentali:

Il paradigma del terminale rete virtuale (NVT, Network Virtual Terminal);

Il principio di opzioni negoziate;

Le regole della negoziazione.

Questo protocollo è un protocollo di base, sul quale si basano alcuni altri protocolli della serie TCP/IP (FTP, SMTP, POP3, ecc.). Le specifiche di Telnet non fanno menzione dell'autenticazione dato che Telnet è totalmente separato dalle applicazioni che la usano (il protocollo FTP definisce una sequenza di autenticazioni al di sopra di Telnet).

Inoltre il protocollo Telnet è un protocollo di trasferimento di dati non sicuro, cioè i dati che veicola circolano in chiaro sulla rete (in modo non cifrato). Quando il protocollo Telnet è usato per connettere un host remoto al terminale sul quale è implementato come server, questo protocollo è assegnato alla porta 23.

Tralasciando le opzioni e le regole di negoziazione associate, le specifiche del protocollo Telnet sono basiche. La trasmissione di dati attraverso Telnet consiste unicamente nel trasmettere i byte nei flussi TCP (il protocollo Telnet precisa anche che i dati da default, cioè se nessuna opzione precisa il contrario, devono essere raggruppati in un buffer prima di essere inviati. Più esattamente significa che i dati sono inviati linea per linea da default). Una volta che il byte 255 è trasmesso, il byte seguente deve essere interpretato come un comando. Il byte 255 è anche detto IAC (Interpret As Command, tradotto Interpretare come un comando). I comandi sono descritti in seguito nel documento.

Le specifiche di base del protocollo Telnet sono disponibili nel RFC 854, mentre le numerose opzioni sono descritte dal RFC 855 al 861:

RFC riguardanti Telnet
RFC 854 Telnet Protocol Specifications
RFC 855 Telnet Option Specifications
RFC 856 Telnet binary transmission
RFC 857 Telnet Echo Option
RFC 858 Telnet Suppress Go ahead Option
RFC 859 Telnet Status Option
RFC 860 Telnet Timing Mark Option
RFC 861 Telnet Extended options-list Option

La nozione di terminale virtuale

Agli arbori di Internet, la rete (ARPANET) era composta da terminali le cui configurazioni erano molto poco omogenee (tastiere, set di caratteri, risoluzioni, lunghezza delle linee di visualizzazione). D'altra parte, le sessioni dei terminali avevano ugualmente il loro proprio modo di controllare i flussi di dati in entrata/uscita.

Così, invece di creare degli adattatori per ogni tipo di terminale affinché possa avere un'interoperatività con questi sistemi, si decise di elaborare un'interfaccia standard, detta NVT (Network Virtual Terminal, tradotto terminale di rete virtuale), che fornisce una base di comunicazione standard, composta da:

Caratteri ASCII 7 bit ai quali si aggiungono il codice ASCII esteso;

Tre caratteri di controllo;

Cinque caratteri di controllo opzionali;

Un set di segnali di controllo di base.

Il protocollo Telnet consiste quindi nel creare un'astrazione del terminale, che permette a qualunque host (client o server) di comunicare con un altro host senza conoscere le sue caratteristiche.

Il principio di opzioni negoziate;

Le specifiche del protocollo Telnet permettono di prendere in considerazione il fatto che alcuni terminali possano proporre dei servizi addizionali, non definiti nelle specifiche di base (ma conformi alle specifiche), per poter usare delle funzioni avanzate. Così, queste funzionalità si traducono in termini di opzioni. Il protocollo Telnet propone quindi un sistema di negoziazione di opzioni che permette l'uso di funzioni avanzate sotto forma di opzioni da una parte e dall'altra iniziando delle richieste per chiedere l'autorizzazione al sistema remoto.

Le opzioni di Telnet attribuiscono separatamente ogni direzione di canale di dati. Così, ogni estremità è in grado di negoziare le opzioni, cioè di definire le opzioni che:

Vuole usare (DO);

Rifiuta di usare (DON'T);

Vuole che l'altra estremità usi (WILL);

Rifiuta che l'altra estremità usi (WON'T).

In questo modo, ciascuna delle parti può emettere una richiesta di utilizzo di un'opzione. L'altra parte deve allora rispondere se accetta o meno l'uso dell'opzione. Nel caso in cui la richiesta riguarda una disattivazione d'opzione, il destinatario della richiesta non deve rifiutare per essere totalmente compatibile con il modello NVT:

La negoziazione di opzioni Telnet
Richiesta Risposta Interpretazione
DO WILL L'emittente comincia usando l'opzione
WON'T L'emittente non deve usare l'opzione
WILL DO L'emittente comincia usando l'opzione, dopo aver inviato un DO
DON'T L'emittente non deve usare l'opzione
DON'T WON'T L'emittente segnala che ha disattivato l'opzione
WON'T DON'T L'emittente segnale l'emittente deve disattivare l'opzione

Esistono 255 codici di opzioni. Il protocollo Telnet preveder anche uno spazio di indirizzamento che permette di descrivere nuove opzioni. La RFC 855 spiega come documentare ogni nuova opzione.

Le regole di negoziazione

Alcune regole di negoziazione di opzioni permettono di evitare delle situazioni di stallo (ad esempio che una delle parti invii delle richieste di negoziazione d'opzione ad ogni conferma dell'altra):

Le richieste non devono essere emesse che al verificarsi di un cambiamento di modalità;

Quando una delle parti riceve una richiesta di cambiamento di modalità, deve confermarla solo quando si troverà nella modalità appropriata;

Una richiesta non deve essere inserita nel flusso di dati se non nella postazione dove avrà effetto.

I caratteri di controllo dell'uscita

I caratteri seguenti sono dei comandi che permettono di controllare la visualizzazione del terminale di rete virtuale:

Comandi di controllo della visualizzazione
Numero Codice Nome Significato
0 NULL Nullo Questo comando permette di inviare dei dati all'host remoto senza che questi siano interpretati (soprattutto per segnalare che l'host locale è sempre in linea)
1 LF Line Feed Questo comando permette di spostare il cursore alla linea successiva, nella stessa posizione orizzontale.
2 CR Carriage Return Questo comando (ritorno a capo) permette di spostare il cursore all'estremità sinistra della linea corrente

Così, si definisce il comando CRLF, composto da due comandi CR e LF l'uno dopo l'altro (senza un ordine preciso) che permette di spostare il cursore all'estremità sinistra della linea successiva.

I caratteri di controllo opzionali

I caratteri precedenti sono i soli (fra i 128 caratteri del codice ASCII di base e dei 128 caratteri del codice ASCII esteso) ad avere un significato particolare per il terminale di rete virtuale. I caratteri seguenti possono eventualmente avere un significato su un terminale di rete virtuale ma non sono necessariamente implementati:

Comandi di controllo della visualizzazione
Numero Codice Nome Significato
7 BEL Bell Questo comando permette di emettere un segnale sonoro o visuale senza modificare la posizione del cursore
8 BS BackSpace Questo comando permette di modificare la posizione del cursore verso la sua posizione precedente
9 HT Horizontal Tab Questo comando permette di modificare la posizione del cursore verso la tabulazione successiva a destra
11 VT Vertical Tab Questo comando permette di modificare la posizione del cursore verso la tabulazione successiva della linea sottostante
12 FF Form Feed Questo comando permette di modificare la posizione del cursore verso il basso alla pagina successiva conservando la posizione orizzontale

I caratteri di controllo della sessione

I caratteri seguenti sono dei comandi che permettono di controllare la sessione Telnet. Questi comandi, per essere interpretati come tali, devono essere preceduti dal carattere di escape IAC (Interpret As Command). Quindi, se questi byte sono trasmessi senza essere preceduti dal carattere IAC, saranno trattati come caratteri semplici. Per trasmettere il carattere IAC, bisogna farlo precedere da un carattere di escape (lui stesso) ossia deve essere ripetuto due volte.

I comandi corrispondenti ad una negoziazione di opzione devono essere seguiti da un byte che precisa l'opzione. Questi comandi permettono di interrompere dei segnali, di sopprimere delle informazioni nella cache del terminale:

Caratteri di controllo della sessione
Numero Codice Nome Significato
240 SE Fine della negoziazione di opzione
241 NOP No Operation Questo comando permette di inviare dei dati all'host remoto senza che questi siano interpretati (soprattutto per segnalare che l'host locale è sempre in linea)
242 DM Data Mark Permette di svuotare tutti i cache tra il terminale di rete virtuale e l'host remoto. Esso corrisponde ad una pressione sul pulsante Synch del NVT e deve imperativamente essere associato ad una segnalazione del bit Urgent del TCP
243 BRK Break Carattere Break del terminale virtuale
244 IP Interrupt Process Questo comando permette di sospendere, interrompere o abbandonare il processo remoto
245 AO Abort Output Questo comando permette di sospendere, interrompere o abbandonare la visualizzazione del processo remoto
246 AYT Are You There Questo comando permette di verificare che il sistema remoto sia sempre "vivo"
247 EC Erase Character Questo comando permette di cancellare il carattere precedente
248 EL Erase Line Questo comando permette di cancellare la linea precedente
249 GA Go Ahead Questo carattere permette di invertire il controllo, per dei collegamenti half-duplex
250 SB SB Questo comando indica che i dati che seguono sono una negoziazione dell'opzione precedente
251 WILL codice d'opzione
252 WON'T codice d'opzione
253 DO codice d'opzione
254 DON'T codice d'opzione
255 IAC Interpret As Command Questo comando permette di interpretare il byte successivo come un comando. Il comando IAC permette di andare al di là dei comandi di base

Ulteriori informazioni

RFC 854;

[http:/contents/31-il-protocollo-telnet L'uso di Telnet per la connessione remota ai servizi di un host].

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Il protocollo Telnet » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.