• Aucun résultat trouvé

Bonne fondation et envoi de multiples paquets

4.3 Application à la spécification de protocoles réseaux

4.3.2 Bonne fondation et envoi de multiples paquets

On considère la formule suivante qui exprime la bonne fondation du suc- cesseur dans les ω-modèles :

Xn∀p  ∀m{sm = pXm} → X p   →Xn  .

On considère dans cette section le cas particulier suivant, où Xn est une for- mule de la forme ∀xPn, x. La formule obtenue est alors ω-valide :

nx  ∀px′  ∀my{sm = pPm, y} → Pp, x′  → Pn, x  .

Le serveur a en général besoin de segmenter les données qu’il envoie au client en de multiples paquets, la taille d’un paquet étant spécifiée par le proto- cole de communication employé. Cette formule décrit un protocole permettant au serveur de choisir un entier n, puis d’envoyer n+1 messages, en attendant à chaque fois d’avoir reçu l’acquittement associé au k-ième avant d’envoyer le

(k+1)-ième.

Le prédicat P représente alors l’ensemble des données que souhaite envoyer le serveur, Pn représentant le n-ième paquet de données. Ces numéros permettent au client de recomposer in fine les données envoyées par le serveur. Dans le pro- tocole décrit ici, le paquet de numéro nk est le(k+1)-ième à être envoyé. Le tableau ci-dessous représente la partie la plus simple possible dans le cas où

choisit n =0. On pose G(x, p) = ∀my{sm = pPm, y} → Pp, x′.

U

V

A

Action

F → ⊥ F ⊥ ∀ choisit F, n=0 et x1 ∀x′∀pG(x, p) inchangé P0, x1 ∃ choisit ∀x′∀pG(x, p) x′ = x1 et p=0

inchangé ∀my{sm=0→Pm, y} inchangé ∀ ne peut choisir m tel que sm = 0, il perd donc la partie.

Ce tableau s’interprète comme le précédent, et décrit un cas où le serveur dé- cide d’envoyer un seul message de données, celui-ci étant acquitté de suite par le client. On peut encore modéliser tous les phénomènes pouvant se produire lors de l’envoi d’un message avec acquittement, puisque∃peut toujours choisir

4.3 Application à la spécification de protocoles réseaux 103 Considérons maintenant la partie la plus simple possible où∀choisit n =1, c’est-à-dire un cas où le serveur décide d’envoyer deux paquets de données. Celle-ci est représentée par le tableau suivant.

U

V

A

Action

F→ ⊥ F ⊥ ∀ choisit F, n=1 et x1

x′∀pG(x, p) inchangé P1, x1 ∃ choisit∀x′∀pG(x, p),

x′=x1et p=1

inchangé ∀my{sm=1→Pm, y} inchangé ∀ choisit

my{sm=1→Pm, y},

m=0 et y1

inchangé inchangé P0, y1 ∃ choisit ∀x′∀pG(x, p)

x′ =y1et p =0

inchangé ∀my{sm=0→Pm, y} inchangé ∀ ne peut satisfaire la condition sm = 0 et perd la partie.

Cette partie modélise une situation où le serveur reçoit chaque acquittement dès le premier envoi des données.

La seule différence avec le jeu considéré précédemment est que ∀ peut inter- rompre la partie lorsqu’il choisit la formule ∀my{sm = 1 → Pm, y}, en choi- sissant un entier m 6= 0. Cela s’interprète comme le fait que le serveur peut à

chaque moment refuser d’envoyer un paquet et interrompre la connexion en cours : le protocole considéré autorise donc le déni de service.

Il existe encore une fois une grande variété de parties possibles, chaque message étant renvoyé tant qu’aucun acquittement n’est reçu par le serveur. A première vue, il s’agit du jeu précédent mais joué deux fois bout-à-bout : une fois que ∃

a remporté une partie dans ce jeu, celui-ci recommence et ∃ doit encore rem-

porter cette deuxième partie. Il n’en est rien, puisque la joueuse ∃ peut choisir la formule F → ⊥ à n’importe quel moment de la partie, même lorsqu’elle a déjà reçu et acquitté un certain nombre de messages : on interprète cette action comme modélisant le fait que le destinataire a envoyé une demande de réini- tialisation des envois à l’expéditeur, celui-ci étant obligé de l’accepter.

Plus généralement, les règles du jeu permettent toujours à ∃ de choisir une

formule « déjà jouée précédemment ». Cela permet de modéliser l’arrivée du doublon d’un acquittement, après que les données concernées aient été acquit- tés. Illustrons ce phénomène dans le cas où le serveur décide d’envoyer trois paquets de données.

104 Jeux et spécification de protocoles réseaux

U

V

A

Action

F→ ⊥ F ⊥ ∀ choisit F, n = 2 et

x1 : envoi du premier pa-

quet.

x′∀pG(x, p) inchangé P2, x1choisit F → ⊥ : le ser- veur n’a pas reçu d’ac- quittement.

inchangé F inchangé ∀ choisit F, n = 2 et x2 :

second envoi du premier paquet.

inchangé inchangé P2, x2 ∃ choisit ∀x′∀pG(x, p),

x′=x2 et p=2 : acquitte-

ment du premier paquet. inchangé ∀my{sm=2→Pm, y} inchangé ∀choisit m =1 et y1 : en-

voi du deuxième paquet. inchangé inchangé P1, y1 ∃ choisit ∀x′∀pG(x, p),

x′ =y1 et p=1 : acquit-

tement du deuxième pa- quet.

inchangé ∀my{sm=1→Pm, y} inchangé ∀choisit m =0 et z1 : en-

voi du troisième paquet. inchangé inchangé P0, z1 ∃ choisit ∀x′∀pG(x, p),

x′ =x1 et p=2 : arrivée

du premier acquittement du premier paquet. inchangé ∀my{sm=2→Pm, y} inchangé ∀choisit m=1, y =y2 et

my{sm=2 → Pm, y}: second envoi du deuxième paquet.

... ... ... ...

A l’avant dernière ligne de ce tableau, on interprète le choix de ∃ comme modélisant la réception par le serveur du doublon d’un acquittement qu’il avait déjà reçu auparavant : les règles du jeu lui imposent alors de renvoyer les don- nées qu’appellent cet acquittement.

Dans le protocole TCP, chaque acquittement contient le numéro de séquence du prochain paquet attendu par le client. Si le paquet appelé par un acquitte- ment avait déjà été envoyé et acquitté, le protocole TCP ne spécifie pas que le serveur doit le renvoyer. C’est là une différence avec les protocoles que nous décrivons : le serveur ne possède ici pas de mémoire, puisque l’ensemble V

4.3 Application à la spécification de protocoles réseaux 105 est totalement réactualisé à chaque tour de jeu. Le joueur ∀ ne peut donc jouer qu’en fonction du dernier message qu’il a reçu. La conséquence est qu’il doit à réception de chaque acquittement envoyer le paquet demandé par celui-ci, quand bien même celui-ci a déjà été envoyé et acquitté. Cela correspond au ser- veur le plus simple possible, qui ne possède pas de mémoire et se comporte de manière déterministe en fonction du dernier message qu’il a reçu, excepté que le déni de service lui est autorisé et est laissé à son entière appréciation. Un tel serveur peut sembler simpliste, mais il a l’avantage d’être sûr.

Au contraire, la joueuse ∃ possède la mémoire de tout ce qui s’est passé au cours de la partie, puisque l’ensemble U est croissant. Cela lui permet de mo- déliser les phénomènes se passant sur le réseau, où tout message envoyé reste susceptible d’arriver à destination à n’importe quel moment. Mais cela a éga- lement pour conséquence que le client n’est pas obligé d’acquitter un message qu’il avait déjà acquitté précédemment, si cet acquittement a été reçu par le serveur (ce qu’il sait si le serveur a depuis envoyé un autre paquet). La partie peut donc se terminer de la manière suivante : le client reçoit à nouveau le premier paquet, mais conscient qu’il s’agit d’un doublon, il décide de renvoyer une demande du troisième paquet (qui n’est autre que l’acquittement associé au second paquet, acquittement qu’il a en sa possession).

Aux contraintes imposées à∀ correspondent des libertés octroyées à ∃; c’est là une seconde différence avec le protocole TCP, qui spécifie que lorsque le client reçoit un message dont le numéro de séquence ne se trouve pas dans la fenêtre courante (par exemple un message qu’il a déjà acquitté), celui-ci doit malgré tout renvoyer un acquittement contenant le numéro de séquence du prochain paquet attendu.

Il reste encore un dernier point à observer : à chaque fois que la joueuse ∃

choisit la formule F → ⊥(c’est-à-dire à chaque fois que le client demande une réinitialisation de la session), ∀ choisit à nouveau le nombre de paquets qu’il désire envoyer, sans être contraint de toujours choisir le même.

106 Jeux et spécification de protocoles réseaux