Il protocollo Telnet

Novembre 2016
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 nell' RFC 854, mentre le numerose opzioni sono descritte dall'RFC 855 al 861:

RFC riguardanti Telnet
RFC 854Telnet Protocol Specifications
RFC 855Telnet Option Specifications
RFC 856Telnet binary transmission
RFC 857Telnet Echo Option
RFC 858Telnet Suppress Go ahead Option
RFC 859Telnet Status Option
RFC 860Telnet Timing Mark Option
RFC 861Telnet 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
RichiestaRispostaInterpretazione
DOWILLL'emittente comincia usando l'opzione
WON'TL'emittente non deve usare l'opzione
WILLDOL'emittente comincia usando l'opzione, dopo aver inviato un DO
DON'TL'emittente non deve usare l'opzione
DON'TWON'TL'emittente segnala che ha disattivato l'opzione
WON'TDON'TL'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
NumeroCodiceNomeSignificato
0NULLNulloQuesto comando permette di inviare dei dati all'host remoto senza che questi siano interpretati (soprattutto per segnalare che l'host locale è sempre in linea)
1LFLine FeedQuesto comando permette di spostare il cursore alla linea successiva, nella stessa posizione orizzontale.
2CRCarriage ReturnQuesto 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
NumeroCodiceNomeSignificato
7BELBellQuesto comando permette di emettere un segnale sonoro o visuale senza modificare la posizione del cursore
8BSBackSpaceQuesto comando permette di modificare la posizione del cursore verso la sua posizione precedente
9HTHorizontal TabQuesto comando permette di modificare la posizione del cursore verso la tabulazione successiva a destra
11VTVertical TabQuesto comando permette di modificare la posizione del cursore verso la tabulazione successiva della linea sottostante
12FFForm FeedQuesto 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
NumeroCodiceNomeSignificato
240SEFine della negoziazione di opzione
241NOPNo OperationQuesto comando permette di inviare dei dati all'host remoto senza che questi siano interpretati (soprattutto per segnalare che l'host locale è sempre in linea)
242DMData MarkPermette 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
243BRKBreakCarattere Break del terminale virtuale
244IPInterrupt ProcessQuesto comando permette di sospendere, interrompere o abbandonare il processo remoto
245AOAbort OutputQuesto comando permette di sospendere, interrompere o abbandonare la visualizzazione del processo remoto
246AYTAre You ThereQuesto comando permette di verificare che il sistema remoto sia sempre "vivo"
247ECErase CharacterQuesto comando permette di cancellare il carattere precedente
248ELErase LineQuesto comando permette di cancellare la linea precedente
249GAGo AheadQuesto carattere permette di invertire il controllo, per dei collegamenti half-duplex
250SBSBQuesto comando indica che i dati che seguono sono una negoziazione dell'opzione precedente
251WILLcodice d'opzione
252WON'Tcodice d'opzione
253DOcodice d'opzione
254DON'Tcodice d'opzione
255IACInterpret As CommandQuesto 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;

L'uso di Telnet per la connessione remota ai servizi di un host.

Articolo scritto da Jean-François PILLOU

Potrebbe anche interessarti :

Telnet protocol
Telnet protocol
Protocolo Telnet
Protocolo Telnet
Das Telnet Protokoll
Das Telnet Protokoll
Le protocole Telnet
Le protocole Telnet
O protocolo Telnet
O protocolo Telnet
Il documento intitolato « Il protocollo Telnet » da 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.