Le protocole Telnet est un protocole standard d'Internet permettant l'interfaçage de terminaux
et d'applications à travers Internet. Ce protocole fournit les règles de base pour permettre
de relier un client (système composé d'un affichage et d'un clavier) à
un interpréteur de commande (côté serveur).
Le protocole Telnet s'appuie sur une connexion TCP pour envoyer des données au format ASCII
codées sur 8 bits entre lesquelles s'intercalent des séquences de contrôle Telnet. Il fournit ainsi un système orienté communication, bi-directionnel (half-duplex), codé sur 8 bits facile à mettre
en oeuvre.
Le protocole Telnet repose sur trois concepts fondamentaux :
- Le paradigme du terminal réseau virtuel (NVT, Network Virtual Terminal) ;
- Le principe d'options négociées ;
- Les règles de négociation.
Ce protocole est un protocole de base, sur lequel s'appuient certains autres protocoles de la suite
TCP/IP (FTP, SMTP, POP3, ...). Les spécifications de Telnet ne mentionnent pas d'authentification car Telnet
est totalement séparé des applications qui l'utilisent (le protocole FTP définit une séquence
d'authentification au-dessus de Telnet). En outre le protocole Telnet est un protocole de transfert de données non sûr,
c'est-à-dire que les données qu'il véhicule circulent en clair sur le réseau (de manière non chiffrée).
Lorsque le protocole Telnet est utilisé pour connecter un hôte distant à la machine sur lequel il
est implémenté en tant que serveur, ce protocole est assigné au port 23.
Hormis les options et les règles de négociation associées, les spécifications du protocole Telnet sont basiques. La transmission de données
à travers Telnet consiste uniquement à transmettre les octets dans le flux TCP (le protocole Telnet précise tout de même que les données doivent par défaut,
c'est-à-dire si aucune option ne précise le contraire, être groupées dans un tampon avant d'être envoyées. Plus exactement cela signifie que par défaut
les données sont envoyées ligne par ligne). Lorsque l'octet 255 est transmis, l'octet suivant doit être
interprété comme une commande. L'octet 255 est ainsi nommé IAC (Interpret As Command, traduisez Interpréter comme une commande).
Les commandes sont décrites plus loin dans le document.
Les spécifications basiques du protocole Telnet sont disponibles dans le RFC 854, tandis que les nombreuses
options sont décrites par les RFC 855 à 861.
RFC concernant 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 |
Aux débuts d'Internet, le réseau (ARPANET) était composé
de machines dont les configurations étaient très peu homogènes (claviers,
jeux de caractères, résolutions, longueur des lignes d'affichage). D'autre part,
les sessions des terminaux possédaient également leur propre
façon de contrôler les flux de données en entrée/sortie.
Ainsi, au lieu de créer des adaptateurs pour chaque type de terminal
afin qu'il puisse y avoir une interopérabilité de ces systèmes, il a été
décidé de mettre au point une interface standard, appelée NVT (Network Virtual Terminal, traduisez
Terminal réseau virtuel), fournissant une base de communication standard, composée de :
- Caractères ASCII 7 bits auxquels s'ajoutent le code ASCII étendu
- Trois caractères de contrôle
- Cinq caractères de contrôle optionnels
- Un jeu de signaux de contrôle basique
Le protocole Telnet consiste ainsi à créer une abstraction du terminal, permettant à n'importe quel hôte
(client ou serveur) de communiquer avec un autre hôte sans connaître ses caractéristiques.
Les spécifications du protocole Telnet permettent
de prendre en compte le fait que certains terminaux puissent proposer des services additionnels,
non définis dans les spécifications de base (mais conformes aux spécifications),
afin de pouvoir utiliser des fonctions avancées. Ainsi, ces fonctionnalités se traduisent en
terme d'options. Le protocole Telnet propose donc un système de négociations d'options
permettant l'utilisation de fonctions avancées sous forme d'options
de part et d'autre en initiant des requêtes pour en demander l'autorisation au système distant.
Les options de Telnet affectent séparément chaque direction du canal de données.
Ainsi, chaque extrémité est à même de négocier les options, c'est-à-dire de
définir les options qu'elle :
- veut utiliser (DO)
- refuse d'utiliser (DON'T)
- veut que l'autre extrémité utilise (WILL)
- refuse que l'autre extrémité utilise (WON'T)
De cette façon, chacune des parties peut émettre une demande
d'utilisation d'une option. L'autre partie doit alors répondre si elle accepte ou non l'utilisation de
l'option. Dans le cas où la requête concerne une désactivation d'option, le destinataire
de la requête ne doit pas refuser pour être totalement compatible avec le modèle NVT.
La négociation d'options Telnet |
Requête |
Réponse |
Interprétation |
DO |
WILL |
L'émetteur commence en utilisant l'option |
WON'T |
L'émetteur ne doit pas utiliser l'option |
WILL |
DO |
L'émetteur commence en utilisant l'option, après avoir envoyé un DO |
DON'T |
L'émetteur ne doit pas utiliser l'option |
DON'T |
WON'T |
L'émetteur signale qu'il a désactivé l'option |
WON'T |
DON'T |
L'émetteur signale que l'émetteur doit désactiver l'option |
Il existe 255 codes d'options. Le protocole Telnet prévoit tout de même
un espace d'adressage permettant de décrire de nouvelles options.
Le RFC 855 explique comment documenter toute nouvelle option.
Des règles de négociation d'options permettent d'éviter des situations de bouclage (par exemple qu'une des
parties envoie des requêtes de négociation d'options à chaque confirmation de l'autre partie).
- Les requêtes ne doivent être émises que lors d'un changement de mode
- Lorsqu'une des parties reçoit une requête de changement de mode, il ne doit l'aquitter
que s'il ne se trouve pas déjà dans le mode approprié
- Une requête ne doit être insérée dans le flux de données
qu'à l'endroit où elle prend effet.
Les caractères suivants sont des commandes permettant de contrôler l'affichage du terminal
réseau virtuel :
Commandes de contrôle de l'affichage |
Numéro |
Code |
Nom |
Signification |
0 |
NULL |
Null |
Cette commande permet d'envoyer des données à l'hôte distant sans que celles-ci ne soient interprétées
(notamment pour signaler que l'hôte local est toujours en ligne) |
1 |
LF |
Line Feed |
Cette commande permet de déplacer le curseur d'impression à la ligne suivante, à la même position horizontale |
2 |
CR |
Carriage Return |
Cette commande (Retour Chariot) permet de déplacer le curseur d'impression à l'extrême gauche de la ligne courante |
Ainsi, on définit la commande CRLF, composée des deux commandes CR et LF l'une après l'autre
(dans n'importe quel ordre) permettant de déplacer le curseur d'impression à l'extrême gauche de la ligne suivante.
Les caractères précédents sont les seuls (parmi les 128 caractères du code ASCII de base et des 128 caractères du code ASCII étendu) à possèder une signification
particulière pour le terminal réseau virtuel. Les caractères suivants peuvent éventuellement avoir une signification sur un terminal réseau virtuel mais ne sont pas nécessairement
implémentés.
Commandes de contrôle de l'affichage |
Numéro |
Code |
Nom |
Signification |
7 |
BEL |
Bell |
Cette commande permet d'émettre un signal sonore ou visuel sans modifier la position du curseur |
8 |
BS |
BackSpace |
Cette commande permet de modifier la position du curseur vers sa position précédente |
9 |
HT |
Horizontal Tab |
Cette commande permet de modifier la position du curseur vers la tabulation suivante à droite |
11 |
VT |
Vertical Tab |
Cette commande permet de modifier la position du curseur vers la tabulation suivante de la ligne du dessous |
12 |
FF |
Form Feed |
Cette commande permet de modifier la position du curseur vers le bas à la page suivante en conservant la position horizontale |
Les caractères suivants sont des commandes permettant de contrôler la session Telnet. Ces commandes pour être interprétées
en tant que telles doivent être précédées du caractère d'échappement IAC (Interpret As Command). Ainsi,
si ces octets sont transmis sans être précédés du caractère IAC, ils seront traités comme de simples caractères.
Pour transmettre le caractère IAC, il faut le faire précéder d'un caractère d'échappement (lui-même) autrement dit
il doit être doublé.
Les commandes correspondant à une négociation d'option doivent être suivies d'un octet précisant l'option.
Ces commandes permettent d'interrompre des signaux, de supprimer des informations dans le cache du terminal, ...
caractères de contrôle de la session |
Numéro |
Code |
Nom |
Signification |
240 |
SE |
|
Fin de négociation d'option |
241 |
NOP |
No Operation |
Cette commande permet d'envoyer des données à l'hôte distant sans que celles-ci ne soient interprétées
(notamment pour signaler que l'hôte local est toujours en ligne) |
242 |
DM |
Data Mark |
Permet de vider l'ensemble des tampons entre le terminal réseau virtuel et l'hôte distant. Elle correspond à un appui sur la touche Synch du NVT et
doit impérativement être associé à un marquage du bit Urgent de TCP |
243 |
BRK |
Break |
Caractère Break du terminal virtuel |
244 |
IP |
Interrupt Process |
Cette commande permet de suspendre, interrompre ou abandonner le processus distant |
245 |
AO |
Abort Output |
Cette commande permet de suspendre, interrompre ou abandonner l'affichage du processus distant |
246 |
AYT |
Are You There |
Cette commande permet de vérifier que le système distant est toujours "en vie" |
247 |
EC |
Erase Character |
Cette commande permet de supprimer le caractère précédent |
248 |
EL |
Erase Line |
Cette commande permet de supprimer la ligne précédente |
249 |
GA |
Go Ahead |
Cette commande permet d'inverser le contrôle, pour les liaisons half-duplex |
250 |
SB |
SB |
Cette commande indique que les données qui suivent sont une négociation de l'option précédente |
251 |
WILL |
code d'option |
|
252 |
WON'T |
code d'option |
|
253 |
DO |
code d'option |
|
254 |
DON'T |
code d'option |
|
255 |
IAC |
Interpret As Command |
Cette commande permet d'interpréter l'octet suivant comme une commande. La commande IAC permet
d'aller au-delà des commandes de base |
Article écrit par Jean-François PILLOU
|