The Network Virtual Terminal (Le terminal virtuel réseau)
Le terminal virtuel réseau (Network Virtual Terminal, NVT) est un périphérique de caractères bidirectionnel (Bi-Directional Character Device). Le NVT dispose d'une imprimante (Printer) et d'un clavier (Keyboard). L'imprimante répond aux données entrantes et le clavier produit des données sortantes qui sont envoyées via la connexion TELNET et, si des « échos » (Echoes) sont souhaités, également à l'imprimante du NVT. Les « échos » ne sont pas censés traverser le réseau (bien que des options existent pour activer un mode d'écho « distant », aucun hôte n'est tenu d'implémenter cette option). Le jeu de codes est l'USASCII 7 bits dans un champ de 8 bits, sauf modification indiquée ici. Toute conversion de code et considération de synchronisation sont des problèmes locaux et n'affectent pas le NVT.
TRANSMISSION OF DATA (Transmission des données)
Bien qu'une connexion TELNET à travers le réseau soit intrinsèquement full duplex (bidirectionnelle intégrale), le NVT doit être considéré comme un dispositif half duplex (semi-duplex) fonctionnant en mode tamponné par ligne (Line-Buffered Mode). C'est-à-dire, à moins et jusqu'à ce que des options soient négociées pour le contraire, les conditions par défaut suivantes concernent la transmission de données sur la connexion TELNET :
-
Dans la mesure où la disponibilité de l'espace tampon local le permet, les données devraient (should) être accumulées dans l'hôte où elles sont générées jusqu'à ce qu'une ligne complète de données soit prête pour la transmission, ou jusqu'à ce qu'un signal explicite de transmission défini localement se produise. Ce signal pourrait être généré soit par un processus, soit par un utilisateur humain.
La motivation de cette règle est le coût élevé, pour certains hôtes, du traitement des interruptions d'entrée réseau, couplé à la spécification NVT par défaut selon laquelle les « échos » ne traversent pas le réseau. Ainsi, il est raisonnable de mettre en tampon une certaine quantité de données à leur source. De nombreux systèmes prennent des mesures de traitement à la fin de chaque ligne d'entrée (même les imprimantes ligne ou les perforatrices de cartes ont fréquemment tendance à fonctionner de cette façon), donc la transmission devrait être déclenchée à la fin d'une ligne. D'autre part, un utilisateur ou un processus peut parfois trouver nécessaire ou souhaitable de fournir des données qui ne se terminent pas à la fin d'une ligne ; par conséquent, les implémenteurs sont invités à fournir des méthodes de signalisation locale indiquant que toutes les données tamponnées doivent être transmises immédiatement.
-
Lorsqu'un processus a terminé d'envoyer des données à une imprimante NVT et n'a pas d'entrée en file d'attente du clavier NVT pour un traitement ultérieur (c'est-à-dire lorsqu'un processus à une extrémité d'une connexion TELNET ne peut pas continuer sans entrée de l'autre extrémité), le processus doit (must) transmettre la commande TELNET Go Ahead (GA).
Cette règle n'est pas destinée à exiger que la commande TELNET GA soit envoyée depuis un terminal à la fin de chaque ligne, car les hôtes serveurs ne nécessitent normalement pas de signal spécial (en plus de la fin de ligne ou d'autres caractères définis localement) afin de commencer le traitement. Au contraire, le TELNET GA est conçu pour aider l'hôte local d'un utilisateur à exploiter un terminal physiquement half duplex qui possède un clavier « verrouillable » tel que l'IBM 2741. Une description de ce type de terminal peut aider à expliquer l'utilisation appropriée de la commande GA.
La connexion terminal-ordinateur est toujours sous le contrôle soit de l'utilisateur, soit de l'ordinateur. Aucun des deux ne peut saisir unilatéralement le contrôle de l'autre ; au contraire, l'extrémité contrôlante doit renoncer explicitement à son contrôle. À l'extrémité du terminal, le matériel est conçu de manière à renoncer au contrôle chaque fois qu'une « ligne » se termine (c'est-à-dire lorsque la touche « New Line » est tapée par l'utilisateur). Lorsque cela se produit, l'ordinateur attaché (local) traite les données d'entrée, décide si une sortie doit être générée, et sinon, rend le contrôle au terminal. Si une sortie doit être générée, le contrôle est conservé par l'ordinateur jusqu'à ce que toute la sortie ait été transmise.
Les difficultés d'utilisation de ce type de terminal à travers le réseau devraient être évidentes. L'ordinateur « local » n'est plus en mesure de décider de conserver ou non le contrôle après avoir vu un signal de fin de ligne ; cette décision ne peut être prise que par l'ordinateur « distant » qui traite les données. Par conséquent, la commande TELNET GA fournit un mécanisme par lequel l'ordinateur « distant » (serveur) peut signaler à l'ordinateur « local » (utilisateur) qu'il est temps de passer le contrôle à l'utilisateur du terminal. Elle devrait (should) être transmise à ces moments-là, et seulement à ces moments-là, lorsque l'utilisateur devrait recevoir le contrôle du terminal. Notez que la transmission prématurée de la commande GA peut entraîner le blocage de la sortie, car l'utilisateur est susceptible de supposer que le système de transmission a fait une pause et qu'il ne parviendra donc pas à inverser la ligne manuellement.
Ce qui précède, bien sûr, ne s'applique pas à la direction de communication utilisateur vers serveur. Dans cette direction, les GA peuvent être envoyés à tout moment, mais n'ont pas besoin d'être envoyés. De plus, si la connexion TELNET est utilisée pour une communication processus à processus, les GA n'ont pas besoin d'être envoyés dans l'une ou l'autre direction. Enfin, pour la communication terminal à terminal, les GA peuvent être requis dans aucune, une ou les deux directions. Si un hôte prévoit de prendre en charge la communication terminal à terminal, il est suggéré (suggested) que l'hôte fournisse à l'utilisateur un moyen de signaler manuellement qu'il est temps d'envoyer un GA via la connexion TELNET ; cependant, cela n'est pas une exigence pour l'implémenteur d'un processus TELNET.
Notez que la symétrie du modèle TELNET exige qu'il y ait un NVT à chaque extrémité de la connexion TELNET, au moins conceptuellement.
STANDARD REPRESENTATION OF CONTROL FUNCTIONS (Représentation standard des fonctions de contrôle)
Comme indiqué dans l'introduction de ce document, l'objectif principal du protocole TELNET est la fourniture d'une interface standard des dispositifs terminaux et des processus orientés terminal à travers le réseau. Les premières expériences avec ce type d'interconnexion ont montré que certaines fonctions sont implémentées par la plupart des serveurs, mais que les méthodes d'invocation de ces fonctions diffèrent considérablement. Pour un utilisateur humain qui interagit avec plusieurs systèmes serveurs, ces différences sont très frustrantes. TELNET définit donc une représentation standard pour cinq de ces fonctions, comme décrit ci-dessous. Ces représentations standard ont des significations standard, mais non requises (à l'exception du fait que la fonction Interrupt Process (IP) peut être requise par d'autres protocoles qui utilisent TELNET) ; c'est-à-dire qu'un système qui ne fournit pas la fonction aux utilisateurs locaux n'a pas besoin de la fournir aux utilisateurs réseau et peut (may) traiter la représentation standard de la fonction comme une No-operation. D'autre part, un système qui fournit la fonction à un utilisateur local est tenu de fournir la même fonction à un utilisateur réseau qui transmet la représentation standard de la fonction.
Interrupt Process (IP) (Interrompre le processus)
De nombreux systèmes fournissent une fonction qui suspend, interrompt, abandonne ou termine l'opération d'un processus utilisateur. Cette fonction est fréquemment utilisée lorsqu'un utilisateur estime que son processus est dans une boucle infinie, ou lorsqu'un processus indésirable a été activé par inadvertance. IP est la représentation standard pour invoquer cette fonction. Il convient de noter par les implémenteurs que IP peut être requis par d'autres protocoles qui utilisent TELNET, et devrait donc (should) être implémenté si ces autres protocoles doivent être pris en charge.
Abort Output (AO) (Abandonner la sortie)
De nombreux systèmes fournissent une fonction qui permet à un processus, qui génère une sortie, de s'exécuter jusqu'à son terme (ou d'atteindre le même point d'arrêt qu'il atteindrait en s'exécutant jusqu'à son terme) mais sans envoyer la sortie au terminal de l'utilisateur. De plus, cette fonction efface généralement toute sortie déjà produite mais pas encore réellement imprimée (ou affichée) sur le terminal de l'utilisateur. AO est la représentation standard pour invoquer cette fonction. Par exemple, un sous-système pourrait normalement accepter une commande de l'utilisateur, envoyer une longue chaîne de texte au terminal de l'utilisateur en réponse, et enfin signaler la disponibilité pour accepter la commande suivante en envoyant un caractère « invite » (précédé de <CR><LF>) au terminal de l'utilisateur. Si l'AO était reçu pendant la transmission de la chaîne de texte, une implémentation raisonnable serait de supprimer le reste de la chaîne de texte, mais de transmettre le caractère d'invite et le <CR><LF> précédent. (Cela diffère peut-être de l'action qui serait prise si un IP était reçu ; l'IP pourrait entraîner la suppression de la chaîne de texte et une sortie du sous-système.)
Il convient de noter, par les systèmes serveurs qui fournissent cette fonction, qu'il peut y avoir des tampons externes au système (dans le réseau et l'hôte local de l'utilisateur) qui devraient être effacés ; la manière appropriée de procéder consiste à transmettre le signal « Synch » (décrit ci-dessous) au système utilisateur.
Are You There (AYT) (Êtes-vous là)
De nombreux systèmes fournissent une fonction qui fournit à l'utilisateur une preuve visible (par exemple, imprimable) que le système est toujours en fonctionnement. Cette fonction peut être invoquée par l'utilisateur lorsque le système est de manière inattendue « silencieux » pendant une longue période, en raison de la durée imprévue (par l'utilisateur) d'un calcul, d'une charge système inhabituellement lourde, etc. AYT est la représentation standard pour invoquer cette fonction.
Erase Character (EC) (Effacer le caractère)
De nombreux systèmes fournissent une fonction qui supprime le dernier caractère non supprimé précédent ou la « position d'impression »* du flux de données fourni par l'utilisateur. Cette fonction est généralement utilisée pour éditer les entrées clavier lorsque des erreurs de frappe sont commises. EC est la représentation standard pour invoquer cette fonction.
*REMARQUE : Une « position d'impression » peut contenir plusieurs caractères qui sont le résultat de surimpressions, ou de séquences telles que <char1> BS <char2>...
Erase Line (EL) (Effacer la ligne)
De nombreux systèmes fournissent une fonction qui supprime toutes les données de la « ligne » d'entrée actuelle. Cette fonction est généralement utilisée pour éditer les entrées clavier. EL est la représentation standard pour invoquer cette fonction.
THE TELNET "SYNCH" SIGNAL (Le signal « Synch » TELNET)
La plupart des systèmes à temps partagé fournissent des mécanismes qui permettent à un utilisateur de terminal de reprendre le contrôle d'un processus « incontrôlable » ; les fonctions IP et AO décrites ci-dessus sont des exemples de ces mécanismes. De tels systèmes, lorsqu'ils sont utilisés localement, ont accès à tous les signaux fournis par l'utilisateur, qu'il s'agisse de caractères normaux ou de signaux spéciaux « hors bande » tels que ceux fournis par la touche « BREAK » du télétype ou la touche « ATTN » de l'IBM 2741. Ce n'est pas nécessairement vrai lorsque les terminaux sont connectés au système via le réseau ; les mécanismes de contrôle de flux du réseau peuvent faire en sorte qu'un tel signal soit mis en tampon ailleurs, par exemple dans l'hôte de l'utilisateur.
Pour contrer ce problème, le mécanisme « Synch » TELNET est introduit. Un signal Synch consiste en une notification TCP Urgent (TCP Urgent Notification), couplée avec la commande TELNET DATA MARK. La notification Urgent, qui n'est pas soumise au contrôle de flux concernant la connexion TELNET, est utilisée pour invoquer un traitement spécial du flux de données par le processus qui le reçoit. Dans ce mode, le flux de données est immédiatement scanné à la recherche de signaux « intéressants » tels que définis ci-dessous, en supprimant les données intermédiaires. La commande TELNET DATA MARK (DM) est la marque de synchronisation dans le flux de données qui indique que tout signal spécial s'est déjà produit et que le destinataire peut revenir au traitement normal du flux de données.
Le Synch est envoyé via l'opération d'envoi TCP avec le drapeau Urgent activé et le DM comme dernier (ou seul) octet de données.
Lorsque plusieurs Synchs sont envoyés en succession rapide, les notifications Urgent peuvent être fusionnées. Il n'est pas possible de compter les Urgents car le nombre reçu sera inférieur ou égal au nombre envoyé. En mode normal, un DM est une no-operation ; en mode urgent, il signale la fin du traitement urgent.
Si TCP indique la fin des données Urgent avant que le DM ne soit trouvé, TELNET devrait (should) continuer le traitement spécial du flux de données jusqu'à ce que le DM soit trouvé.
Si TCP indique davantage de données Urgent après que le DM ait été trouvé, cela ne peut être que en raison d'un Synch ultérieur. TELNET devrait (should) continuer le traitement spécial du flux de données jusqu'à ce qu'un autre DM soit trouvé.
Les signaux « intéressants » sont définis comme étant : les représentations standard TELNET de IP, AO et AYT (mais pas EC ou EL) ; les analogues locaux de ces représentations standard (le cas échéant) ; toutes les autres commandes TELNET ; d'autres signaux définis par le site qui peuvent être traités sans retarder le balayage du flux de données.
Étant donné qu'un effet du mécanisme SYNCH est la suppression de pratiquement tous les caractères (sauf les commandes TELNET) entre l'expéditeur du Synch et son destinataire, ce mécanisme est spécifié comme la méthode standard pour effacer le chemin de données lorsque cela est souhaité. Par exemple, si un utilisateur à un terminal provoque la transmission d'un AO, le serveur qui reçoit l'AO (s'il fournit cette fonction du tout) devrait (should) renvoyer un Synch à l'utilisateur.
Enfin, tout comme la notification TCP Urgent est nécessaire au niveau TELNET en tant que signal hors bande, d'autres protocoles qui utilisent TELNET peuvent nécessiter une commande TELNET qui peut être considérée comme un signal hors bande à un niveau différent.
Par convention, la séquence [IP, Synch] doit être utilisée comme un tel signal. Par exemple, supposons qu'un autre protocole, qui utilise TELNET, définisse la chaîne de caractères STOP de manière analogue à la commande TELNET AO. Imaginez qu'un utilisateur de ce protocole souhaite qu'un serveur traite la chaîne STOP, mais que la connexion est bloquée parce que le serveur traite d'autres commandes. L'utilisateur devrait demander à son système de :
-
Envoyer le caractère TELNET IP ;
-
Envoyer la séquence TELNET SYNC, c'est-à-dire :
Envoyer le Data Mark (DM) comme seul caractère dans une opération d'envoi en mode urgent TCP.
-
Envoyer la chaîne de caractères STOP ; et
-
Envoyer l'analogue de l'autre protocole au TELNET DM, le cas échéant.
L'utilisateur (ou le processus agissant en son nom) doit (must) transmettre la séquence TELNET SYNCH de l'étape 2 ci-dessus pour s'assurer que le TELNET IP parvient à l'interpréteur TELNET du serveur.
L'Urgent devrait réveiller le processus TELNET ; l'IP devrait réveiller le processus de niveau supérieur suivant.
THE NVT PRINTER AND KEYBOARD (L'imprimante et le clavier NVT)
L'imprimante NVT a une largeur de chariot et une longueur de page non spécifiées et peut produire des représentations de tous les 95 graphiques USASCII (codes 32 à 126). Parmi les 33 codes de contrôle USASCII (0 à 31 et 127) et les 128 codes non couverts (128 à 255), les suivants ont une signification spécifiée pour l'imprimante NVT :
NAME CODE MEANING
NULL (NUL) 0 Aucune opération Line Feed (LF) 10 Déplace l'imprimante à la ligne d'impression suivante, en conservant la même position horizontale. Carriage Return (CR) 13 Déplace l'imprimante à la marge gauche de la ligne actuelle.
De plus, les codes suivants doivent (shall) avoir des effets définis, mais non requis, sur l'imprimante NVT. Aucune extrémité d'une connexion TELNET ne peut (may) supposer que l'autre partie prendra, ou aura pris, une action particulière lors de la réception ou de la transmission de ceux-ci :
BELL (BEL) 7 Produit un signal audible ou visible (qui ne déplace PAS la tête d'impression). Back Space (BS) 8 Déplace la tête d'impression d'une position de caractère vers la marge gauche. Horizontal Tab (HT) 9 Déplace l'imprimante au prochain arrêt de tabulation horizontale. Il reste non spécifié comment l'une ou l'autre partie détermine ou établit où se trouvent ces arrêts de tabulation. Vertical Tab (VT) 11 Déplace l'imprimante au prochain arrêt de tabulation verticale. Il reste non spécifié comment l'une ou l'autre partie détermine ou établit où se trouvent ces arrêts de tabulation. Form Feed (FF) 12 Déplace l'imprimante en haut de la page suivante, en conservant la même position horizontale.
Tous les codes restants ne provoquent aucune action de l'imprimante NVT.
La séquence « CR LF », telle que définie, fera en sorte que le NVT soit positionné à la marge gauche de la ligne d'impression suivante (comme le ferait, par exemple, la séquence « LF CR »). Cependant, de nombreux systèmes et terminaux ne traitent pas CR et LF de manière indépendante et devront faire des efforts pour simuler leur effet. (Par exemple, certains terminaux n'ont pas de CR indépendant du LF, mais sur de tels terminaux, il peut être possible de simuler un CR en retour arrière.) Par conséquent, la séquence « CR LF » doit (must) être traitée comme un seul caractère « nouvelle ligne » et utilisée chaque fois que leur action combinée est prévue ; la séquence « CR NUL » doit (must) être utilisée lorsqu'un retour chariot seul est réellement souhaité ; et le caractère CR doit (must) être évité dans d'autres contextes. Cette règle donne l'assurance aux systèmes qui doivent décider s'ils doivent effectuer une fonction « nouvelle ligne » ou plusieurs retours arrière que le flux TELNET contient un caractère suivant un CR qui permettra une décision rationnelle.
Notez que « CR LF » ou « CR NUL » est requis dans les deux directions (en mode ASCII par défaut), pour préserver la symétrie du modèle NVT. Même s'il peut être connu dans certaines situations (par exemple, avec les options d'écho distant et de suppression de go ahead en vigueur) que les caractères ne sont pas envoyés à une imprimante réelle, néanmoins, pour des raisons de cohérence, le protocole exige qu'un NUL soit inséré après un CR non suivi d'un LF dans le flux de données. L'inverse de ceci est qu'un NUL reçu dans le flux de données après un CR (en l'absence de négociations d'options qui spécifient explicitement le contraire) devrait (should) être supprimé avant d'appliquer le mappage NVT vers jeu de caractères local.
Le clavier NVT dispose de touches, de combinaisons de touches ou de séquences de touches permettant de générer tous les 128 codes USASCII. Notez que bien que beaucoup n'aient aucun effet sur l'imprimante NVT, le clavier NVT est capable de les générer.
En plus de ces codes, le clavier NVT doit (shall) être capable de générer les codes supplémentaires suivants qui, sauf indication contraire, ont des significations définies, mais non requises. Les affectations de codes réelles pour ces « caractères » se trouvent dans la section des commandes TELNET, car elles sont considérées comme étant, dans un certain sens, génériques et devraient être disponibles même lorsque le flux de données est interprété comme étant un autre jeu de caractères.
Synch
Cette touche permet à l'utilisateur d'effacer son chemin de données vers l'autre partie. L'activation de cette touche provoque l'envoi d'un DM (voir section des commandes) dans le flux de données et une notification TCP Urgent y est associée. La paire DM-Urgent doit (must) avoir la signification requise telle que définie précédemment.
Break (BRK)
Ce code est fourni car il s'agit d'un signal en dehors du jeu USASCII qui reçoit actuellement une signification locale dans de nombreux systèmes. Il est destiné à indiquer que la touche Break ou la touche Attention a été frappée. Notez, cependant, que cela est destiné à fournir un 129e code pour les systèmes qui en ont besoin, et non comme synonyme de la représentation standard IP.
Interrupt Process (IP)
Suspend, interrompt, abandonne ou termine le processus auquel le NVT est connecté. Fait également partie du signal hors bande pour d'autres protocoles qui utilisent TELNET.
Abort Output (AO)
Permet au processus actuel de (apparemment) s'exécuter jusqu'à son terme, mais n'envoie pas sa sortie à l'utilisateur. Envoie également un Synch à l'utilisateur.
Are You There (AYT)
Renvoie au NVT une preuve visible (c'est-à-dire imprimable) que l'AYT a été reçu.
Erase Character (EC)
Le destinataire devrait (should) supprimer le dernier caractère non supprimé précédent ou la « position d'impression » du flux de données.
Erase Line (EL)
Le destinataire devrait (should) supprimer les caractères du flux de données jusqu'à, mais sans inclure, la dernière séquence « CR LF » envoyée via la connexion TELNET.
L'esprit de ces touches « supplémentaires », ainsi que des effecteurs de format d'imprimante, est qu'elles devraient représenter une extension naturelle du mappage qui doit déjà être effectué de « NVT » vers « local ». Tout comme l'octet de données NVT 68 (104 octal) devrait être mappé sur le code local pour « D majuscule », le caractère EC devrait être mappé sur la fonction locale « Effacer caractère ». De plus, tout comme le mappage pour 124 (174 octal) est quelque peu arbitraire dans un environnement qui n'a pas de caractère « barre verticale », le caractère EL peut avoir un mappage quelque peu arbitraire (ou aucun du tout) s'il n'y a pas de fonction locale « Effacer ligne ». De même pour les effecteurs de format : si le terminal a effectivement une « Tabulation verticale », alors le mappage pour VT est évident, et seulement lorsque le terminal n'a pas de tabulation verticale l'effet de VT devrait-il être imprévisible.