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 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 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>
DOWILLL'émetteur commence en utilisant l'option
WON'TL'émetteur ne doit pas utiliser l'option
WILLDOL'émetteur commence en utilisant l'option, après avoir envoyé un DO
DON'TL'émetteur ne doit pas utiliser l'option
DON'TWON'TL'émetteur signale qu'il a désactivé l'option
WON'TDON'TL'é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>
0NULLNullCette 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)
1LFLine FeedCette commande permet de déplacer le curseur d'impression à la ligne suivante, à la même position horizontale
2CRCarriage ReturnCette 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>
7BELBellCette commande permet d'émettre un signal sonore ou visuel sans modifier la position du curseur
8BSBackSpaceCette commande permet de modifier la position du curseur vers sa position précédente
9HTHorizontal TabCette commande permet de modifier la position du curseur vers la tabulation suivante à droite
11VTVertical TabCette commande permet de modifier la position du curseur vers la tabulation suivante de la ligne du dessous
12FFForm FeedCette 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>
240SEFin de négociation d'option
241NOPNo OperationCette 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)
242DMData MarkPermet 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
243BRKBreakCaractère Break du terminal virtuel
244IPInterrupt ProcessCette commande permet de suspendre, interrompre ou abandonner le processus distant
245AOAbort OutputCette commande permet de suspendre, interrompre ou abandonner l'affichage du processus distant
246AYTAre You ThereCette commande permet de vérifier que le système distant est toujours "en vie"
247ECErase CharacterCette commande permet de supprimer le caractère précédent
248ELErase LineCette commande permet de supprimer la ligne précédente
249GAGo AheadCette commande permet d'inverser le contrôle, pour les liaisons half-duplex
250SBSBCette commande indique que les données qui suivent sont une négociation de l'option précédente
251WILLcode d'option
252WON'Tcode d'option
253DOcode d'option
254DON'Tcode d'option
255IACInterpret As CommandCette 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]

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

Ce document intitulé «  Le protocole Telnet  » issu de CommentCaMarche (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.