Groupe de travail Réseau	J. Postel	
Request for Comments : 860	J. Reynolds, ISI	
STD 31	mai 1983	
Document rendu obsolète : NIC 16238	Traduction Claude Brière de L’Isle	

Option TELNET TIMING MARK

La présente RFC spécifie une norme pour la communauté de l’ARPA Internet. Les hôtes de l’ARPA Internet sont invités à adopter et mettre en œuvre la présente norme.

1	Nom et code de la commande

TIMING-MARK	6	

2	Significations des commandes

IAC DO TIMING-MARK

L’envoyeur de cette commande DEMANDE que le receveur de cette commande retourne un WILL TIMING-MARK dans le flux de données à l’"endroit approprié" comme défini à la section 4 ci-dessous.

IAC WILL TIMING-MARK

L’envoyeur de cette commande ASSURE le receveur de cette commande qu’elle s’est insérée dans le flux de données à l’"endroit approprié" pour garantir la synchronisation avec un DO TIMING-MARK transmis par le receveur de cette commande.

IAC WON'T TIMING-MARK

L’envoyeur de cette commande REFUSE d’assurer que cette commande est insérée dans le flux de données à l’"endroit approprié" pour assurer la synchronisation.

IAC DON'T TIMING-MARK

L’envoyeur de cette commande notifie au receveur de cette commande qu’un WILL TIMING-MARK (précédemment transmis par le receveur de cette commande) a été IGNORÉ.

3	Valeur par défaut

WON'T TIMING-MARK, DON'T TIMING-MARK

C’est à dire qu’aucune tentative explicite n’est faite pour synchroniser les activités aux deux extrémités de la connexion TELNET.

4	Motifs de l’option

Il est parfois utile à un utilisateur ou processus à une extrémité d’une connexion TELNET d’être sûr que des données précédemment transmises ont été complètement traitées, éliminées, ou qu’il en a été disposé d’une autre façon. Cette option fournit un mécanisme pour ce faire. De plus, même si la demande d’option (DO TIMING-MARK) est refusée (par WON'T TIMING-MARK) le demandeur est au moins assuré que celui qui refuse a reçu (sinon traité) toutes les données précédentes.

À titre d’exemple d’application, imaginons une connexion TELNET entre un terminal physiquement en full-duplex et un système serveur "full duplex" qui permet à l’utilisateur de "taper à la file" tandis que le serveur traite les entrées précédentes de l’usager. Supposons que les deux côtés se soient mis d’accord pour l’option Suppress Go Ahead et que le serveur ait accepté de fournir des échos. Le serveur découvre maintenant une commande qu’il ne peut pas analyser, peut-être à cause d’une erreur de frappe de l’usager. Il aimerait bien se débarasser de tout ce que l’usager a "tapé à la file" (car la défaillance de l’analyse d’une commande ca vraisemblablement conduire à des résultas incorrects si des commandes ultérieures sont exécutées), envoyer un message d’erreur à l’usager, et reprendre l’interprétation des commandes qu’a tapée l’usager après avoir vu le message d’erreur. Si l’usager était en local, le système serait capable d’éliminer les entrées en mémoire tampon ; mais les entrées peuvent être mémorisées chez l’hôte de l’usage ou ailleurs. Donc, le serveur peut envoyer un DO TIMING-MARK et espérer recevoir un WILL TIMING-MARK de l’usager à l’"endroit approprié" dans le flux des données.

L’"endroit approprié", (en l’absence d’autres informations) est donc clairement juste avant le premier caractère que l’usager a frappé après avoir vu le message d’erreur. C’est à dire qu’il devrait apparaître que la marque de synchronisation (timing mark) a été "imprimée" sur le terminal de l’usager et que, en réponse, l’usager frappe une marque de synchronisation de réponse.

Ensuite, supposons que l’usager de notre exemple réalise qu’il a fait une faute de frappe dans une commande, réalise que le serveur va envoyer un DO TIMING-MARK, et veuille recommencer à "taper à la file" sans attendre que cela arrive. Il pourrait alors donner pour instruction à son propre système d’envoyer un WILL TIMING-MARK au serveur puis recommencer à "taper à la file". (Les développeurs devraient se souvenir que le propre système de l’usager doit se rappeler qu’il a envoyé le WILL TIMING-MARK de façon à supprimer le DO/DON'T TIMING-MARK quand il arrivera enfin.) Et donc, dans ce cas l’"endroit approprié" pour l’insertion du WILL TIMING-MARK est la place définie par l’usager.

Il vaut de noter que, dans les deux exemples ci-dessus, il est de la responsabilité du système qui transmet le DO TIMING-MARK d’éliminer tout caractère indésirable ; le WILL TIMING-MARK ne fournit d’aide que pour décider quels caractères sont "indésirables".

5	Description de l’option

Supposons que le processus A de la Figure 1 souhaite se synchroniser avec B. Le DO TIMING-MARK est envoyé de A à B. B peut refuser en répondant WON'T TIMING-MARK, ou accepter en permettant que la marque de synchronisation sorte de sa mémoire tampon de "sortie", BUF2. Puis, au lieu de la délivrer au terminal, B va entrer la marque dans sa mémoire tampon "entrante" BUF1, pour la joindre au flux vers A. Lorsque la marque s’est propagée à travers la mémoire tampon entrante de B, B retourne le WILL TIMING-MARK sur la connexion TELNET à A.

PROCESSUS A

PROCESSUS B

TERMINAL

Connexion TELNET

WILL TIMING MARK

DO TIMING MARK

Mémoire tampon 1

Mémoire tampon 2

(processus NVT) . ME ;

Marque de synchronisation

Figure 1

Lorsque A reçoit le WILL TIMING-MARK, il sait que toutes les informations qu’il a envoyées à B avant l’envoi de la marque de synchronisation ont été délivrées, et que toutes les informations envoyées de B à A avant le revirement de la marque de synchronisation ont été délivrées.

Trois applications typiques sont :

A	Mesure du délai d’aller retour entre un processus et un terminal ou un autre processus.

B	Resynchronisation d’une interaction comme décrit à la section 4 ci-dessus. A est un processus qui interprète les commandes transmises d’un terminal par B. Lorsque A voit une commande illégale :
i.	Il envoie un <retour chariot>, <fin de ligne>, <point d’interrogation>.
ii.	Il envoie DO TIMING-MARK.
iii.	Il envoie un message d’erreur.
iv.	Il commence à lire les entrées et les jette jusqu’à ce qu’il reçoive un WILL TIMING-MARK.
v.	Il reprend l’interprétation des entrées.

Ceci met un terme aux effets du vidage de tout ce qui est frappé après la commande erronée, jusqu’au point où l’usager a réellement vu le point d’interrogation.

C	Le double de B ci-dessus. L’utilisateur terminal veut éliminer les sorties indésirables venant de A.
i	B envoie DO TIMING-MARK, suivi d’une nouvelle commande quelconque.
ii.	B commence à lire les sorties venant de A et les élimine jusqu’à ce qu’il reçoive WILL TIMING-MARK.
iii.	B reprend la transmission des sorties de A au terminal.

Ceci met un terme aux effets du vidage des toutes les sorties venant de A, jusqu’au point où A voit la marque de synchronisation, mais aucune sortie générée en réponse à la commande suivante.