• Aucun résultat trouvé

Master 2 Réseaux - RAD

N/A
N/A
Protected

Academic year: 2022

Partager "Master 2 Réseaux - RAD"

Copied!
2
0
0

Texte intégral

(1)

Master 2 Réseaux - RAD

Sébastien Tixeuil

Sebastien.Tixeuil@lip6.fr

TP : Programmation de protocoles Exercice 1

On considère lʼalgorithme de passage de jeton sur un anneau unidirectionnel vu en cours.

Implanter cet algorithme en Erlang et exécuter le programme en faisant varier plusieurs paramètres :

a. taille de lʼanneau ;

b. messages corrompus initialement présents dans les canaux ; c. état initial décroissant plutôt que aléatoire.

Exercice 2

On souhaite concevoir un protocole auto-stabilisant pour recenser les machines présentes sur un réseau. On suppose que ce réseau est organisé sous la forme dʼun anneau unidirectionnel et que les machine sont la connaissance de lʼidentité du processus suivant sur lʼanneau. Par contre, chaque machine a une connaissance du réseau qui est par ailleurs complètement arbitraire (une machine peut penser quʼune autre machine est présente dans le réseau alors quʼelle nʼexiste pas ; à lʼinverse une machine peut nʼavoir aucune connaissance dʼune autre machine qui est pourtant présente dans le réseau. Le but du protocole est quʼaprès une phase de stabilisation, chaque machine possède une connaissance correcte des machines effectivement présentes.

Le protocole utilisé est le suivant :

a. Chaque message est donné sous la forme dʼune liste dʼidentifiants de machine.

b. Sur réception dʼun message envoyé par le prédécesseur sur lʼanneau, si lʼidentifiant de la machine courante est présent dans la liste reçue, tronquer la liste avant la première occurrence de la machine courante, et renvoyer au successeur la liste tronquée précédée de lʼidentifiant de la machine courante.

c. Si aucun message nʼa été reçu depuis au moins deux secondes, envoyer un message au successeur avec les derniers identifiants connus.

2.1

Montrer que si initialement tous les messages sont vides, alors chaque message finit par contenir exactement tous les identifiants du réseau.

2.2

Montrer que si initialement les messages et les mémoires contiennent des identifiants de machines qui nʼexistent pas, alors ces identifiants finissent par ne plus être présents dans aucun message ni dans aucune mémoire.

2.3

Programmer une fonction Erlang random_list( N ) qui construit une liste à N éléments qui sont chacun un nombre aléatoire.

(2)

2.4

Programmer en Erlang une fonction truncate( L, V ) qui retourne une liste tronquée à la première occurrence de la variable V dans la liste L. Par exemple :

truncate( [1, 2, 3, 4, 5], 3 ) -> [1, 2]

truncate( [1, 2, 3, 4, 5], 5 ) -> [1, 2, 3, 4]

truncate( [1, 2, 3, 4, 5], 1 ) -> []

truncate( [1, 2, 3, 4, 5], 7 ) -> [1, 2, 3, 4, 5]

2.5

Programmer en Erlang lʼalgorithme mentionné précédemment. Tester le programme en faisant varier les paramètres de la simulation :

a. taille de lʼanneau ;

b. taille de la liste initialement présente sur chaque machine ; c. messages erronés initialement présents.

2.6

Modifier le programme précédent pour calculer la taille (i.e. le nombre de machines) de lʼanneau unidirectionnel de manière auto-stabilisante.

Exercice 3

Dans cette partie, on cherche à implanter une solution au problème de lʼaccord Byzantin.

On considère que initialement, toutes les machines ont connaissance de lʼidentité de toutes les autres machines participant au protocole (pour implanter lʼalgorithme en Erlang, on peut réutiliser le programme précédent pour obtenir une configuration initiale où tout le monde connaît tout le monde).

3.1

Implanter en Erlang les deux protocoles vus en cours :

a. chaque machine envoie lʼaction prévue (attaque ou retraite) à tous les autres processus, puis attend (par exemple 2 secondes) de recevoir les actions prévues par les autres machines. La décision est lʼaction majoritairement proposée (ou retraite si les deux actions ont été également proposées).

b. chaque machine envoie lʼaction prévue (attaque ou retraite) à tous les autres processus, puis attend (par exemple 2 secondes) de recevoir les actions prévues par les autres machines. Lors dʼune deuxième phase, chaque machine retransmet à toutes les autres machines la liste des actions proposées par chaque machine. La décision est lʼaction majoritairement proposée (ou retraite si les deux actions ont été également proposées) en considérant pour chaque machine la majorité des actions rapportées pour cette machine.

3.2

Montrer que si, dans un réseau à trois machines, lʼune des machines crashe après avoir envoyé un message, alors il est possible que le problème de lʼaccord ne puisse être résolu par le premier protocole. Montrer que le même cas de figure ne pose pas de problème au deuxième protocole.

Références

Documents relatifs

La loi californienne prévoit également que, pour tout service en vertu de la Garantie d’un Produit, les résidents de la Californie ont la possibilité de retourner le Produit (a)

Question 3 En Python on peut coder la fonction de transition d’un automate comme un dictionnaire dont les clés sont les états, et les valeurs sont elles-mêmes des

La probabilit´e que la dur´ee d’attente d’une personne prise au hasard soit comprise entre 15 min et 20 min sachant que la personne attend d´ej`a depuis 10 min est

Le système proposé sur la figure 1 représente la commande d’une touche de machine à écrire.. Toutes les touches ont des

Question 2 : Déterminer, en appliquant le Principe Fondamental de la Statique à 2 au point B, les six équations scalaires liant les composantes d’actions

Ses fonctionnalités sont généralement identiques à celles de la couche transport d’un EAI (middleware de messagerie asynchrone, publish/subscribe, etc…), permettant par exemple

Ouvrir la tête de la machine en poussant le levier vers le haut pour éjecter la capsule utilisée, puis refermer la machine en appuyant sur le levier vers le bas.. Mettre 0.5 l

Pierre de Mecquenem cherche à tisser des liens étroits avec les habitants des territoires qu’il embrase en les impliquant comme participants et en leur proposant des rencontres