Le protocole Telnet

Introduction au protocole Telnet

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

La notion de terminal virtuel

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.

Le principe d'options négociées

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
<span class="texte2">Requête</span> <span class="texte2">Réponse</span> <span class="texte2">Interprétation</span>
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.

Les règles de négociation

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).
<ol>

  • 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.

</ol>

Les caractères de contrôle de la sortie

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
<span class="texte2">Numéro</span> <span class="texte2">Code</span> <span class="texte2">Nom</span> <span class="texte2">Signification</span>
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 de contrôle optionnels

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
<span class="texte2">Numéro</span> <span class="texte2">Code</span> <span class="texte2">Nom</span> <span class="texte2">Signification</span>
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 de contrôle de la session

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
<span class="texte2">Numéro</span> <span class="texte2">Code</span> <span class="texte2">Nom</span> <span class="texte2">Signification</span>
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

Plus d'information

Article écrit par [mailto:webmaster@commentcamarche.net Jean-François PILLOU]

Cet article est régulièrement mis à jour par des experts sous la
direction de Jean-François Pillou, fondateur de CommentCaMarche.
A voir également
Ce document intitulé « Le protocole Telnet » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.