:: Enseignements :: Master :: M1 :: 2007-2008 :: Architecture et Programmation Réseau ::
[LOGO]

Projet de java réseau


Simulateur de réseau de capteurs multimédia

Le but de ce projet est d'étudier le comportement d'un réseau de capteurs multimédia. L'objectif est de modéliser ce genre de réseau, de définir les protocoles d'échanges entre ses éléments, et d'implanter une architecture de simulation d'un tel réseau.

Les capteurs multimédia

Le terme de capteur est a priori très vaste. Il s'agit d'un élément autonome capable d'acquérir des informations. Un capteurs multimédia peut être une webcam, un appareil photo ou un micro qui acquiert des images et/ou du son.

Dans le cadre de ce projet, nous considérons une simple abstraction d'un capteur multimédia comme étant une application qui dispose d'un ensemble d'informations représentant une image ou un son, rafraîchies à intervalle de temps donné. Par exemple, les informations peuvent être des images, avec leurs coordonnées spaciales dans un référentiel commun (e.g. les 2 coins opposés du rectangle de la prise de vue) associées à une information temporelle (la date de la prise de vue).

En situation réelle, les images fournies par les différents capteurs d'une même scène le seraient avec des angles et des distances différentes. Pour simplifier, dans le contexte de ce projet, on considère que tous les capteurs "regardent" la même scène avec le même angle et à la même distance. Néanmoins, chaque capteur ne peut acquérir qu'une partie de la scène (la zone de couverture du capteur). Bien sûr, il est possible que les images acquises par différents capteur se recoupent. La figure ci-dessous illustre un exemple avec 6 capteurs (A, B, C, D, E et F) représentés avec leur "zone de couverture" de la scène en différentes couleurs.

Outre cette capacité à acquérir des images à intervalle de temps régulier, un capteur a la possibilité de communiquer avec d'autres éléments du réseau. Dans le cadre de notre simulation, un capteur sera représenté par une application Java exécutée sur une machine pourvue d'une adresse IP et des couches transports associées (UDP et TCP) dans un réseau local.

Les noeuds du réseau

Dans des situations réelles, les capacités des capteurs sont très variables en terme d'acquisition, de consommation d'énergie et donc d'autonomie, de communication (débit de transmission), etc. Dans ce projet, nous modéliserons ces différences par plusieurs (au moins deux) niveaux de "tiers". Les capteurs du 1er tiers (de base) sont simplement capables de transmettre (tout ou une partie) des informations qu'ils capturent (A, B, C, D en sont des exemples dans la figure).

Les capteurs d'un tiers de niveau plus élevé peuvent en plus effectuer des opérations liées à la communication dans le réseau de capteurs (router des requêtes, des réponses, optimiser ou répartir le traffic...)

Un noeud particulier dans le réseau est appelé sink, ou "puits". C'est lui qui est l'initiateur des requêtes et qui reçoit finalement les données. On peut considérer qu'il est l'utilisateur final du réseau de capteurs. Typiquement, le puits souhaite visualiser les images correspondant à une zone de la scène, et émet une ou des requêtes en ce sens.

Un réseau collaboratif

En général, chaque capteur émet régulièrement des informations concernant son état et ses capacités: s'il est en veille ou non, quelle est la zone de la scène qu'il couvre, quelle est la fréquence de raffraîchissement de ses images, quelle est sa disponibilité (c'est à dire la charge de travail qu'il accomplit actuellement), quel est son débit de communication disponible, etc. Ces informations transmises par les capteurs sont appelées des descripteurs.

Les destinataires des descripteurs, comme l'ensemble des communications possibles dans un réseau de capteurs, dépendent du modèle de communication considéré.
  • Dans un réseau hiérarchique, comme celui représenté dans la figure, les communications n'ont lieu qu'entre parents et enfants. Les capteurs de 1er tiers (de base, comme A, B, C ou D) se contentent d'émettre des descripteurs, de recevoir et de répondre aux requêtes. Les capteurs d'un tiers supérieur pourront également communiquer avec leur parent ou leurs enfants, mais pourront également router des informations ou tenter d'optimiser le traffic, réaliser des traitements sur les images (agrégation de données...), etc.
  • Dans un réseau maillé (mesh), on peut imaginer que les lignes de communication ne constituent pas un arbre mais un graphe. Dans la figure, par exemple, E et F pourraient communiquer entre eux.

Au delà des simples échanges de descripteurs, un réseau de capteurs doit être capable de satisfaire une ou plusieurs requêtes de l'utilisateur. Différentes problématiques classiques sont alors rencontrées:
  • Une requête donnée peut-elle être satisfaite par un réseau dans un état donné (en fonction de la charge de chacun des noeuds devant participer à la satisfaction de la requête, des débits autorisés, etc.)? C'est la problématique de l'admission d'un flux.
  • Comment peut on optimiser une requête, en particulier dans le cas où plusieurs capteurs peuvent transmettre une même zone d'image requise? C'est une problématique d'optimisation "métier": le découpage d'une image et sa reconstitution, sur un noeud intermédiaire ou à l'arrivée...
  • Dans le cas d'un réseau maillé, l'existence de plusieurs routes entre les points d'acquisition d'une image et le puits peut permettre de répartir les charges sur les différents liens de communication. C'est la problématique de l'équilibrage de charge.
Un des objectifs de ce projet est de perçevoir ces différentes problématiques et de tester différentes approches pour les résoudre dans un contexte simulé.

La simulation

Afin de simuler le réseau de capteurs et les différentes stratégies de communication pour satisfaire les requêtes, nous souhaitons pouvoir utiliser différentes machines disposant des moyens d'adressage et de communication TCP/UDP-IP, sur lesquelles s'exécuteront des applications Java représentant des capteurs.

Deux "simulateurs" seront utilisés.
  • Un simulateur des données captées. Plutôt que chaque application représentant un capteur dispose d'un mécanisme permettant de capturer de l'image et du son, ces données multimédia lui seront directement fournies par un serveur. Le même serveur pourra ainsi fournir les données utilisables par chaque capteur. En pratique, chaque capteur représenté par une application Java sur une machine récupérera les données qu'il est sensé "capturer" sur un même serveur de données.
  • Un simulateur de configuration et superviseur. Plutôt que de devoir administrer, paramétrer et superviser localement et indépendament chaque [application simulant un] capteur, ces opérations de paramétrage, configuration et supervision des différents capteurs seront réalisées à distance par un superviseur. En pratique, chaque capteur représenté par une application Java sur une machine communiquera avec un même serveur de supervision.

Le travail demandé

Le travail demandé se décompose en trois applications distinctes et trois protocoles de communication.
  • Les capteurs. Cette application Java peut en réalité être de différente nature.
    • un capteur de premier tiers, le plus basique;
    • un capteur d'un tiers plus élevé, avec des fonctionnalités avancées (on pourra a priori se limiter à deux ou trois niveaux de tiers).
    • un puits, ou sink, émetteur des requêtes et destinataire des réponses du réseau (en général, un puits n'est pas nécessairement un capteur mais vous pourrez décider ou non d'en faire par nature un élément distinct du réseau).
  • Un serveur de supervision. Cette application Java doit permettre d'enregistrer les capteurs du réseau qui seront "démarrés" sous la forme d'une application Java sur une machine. Lors de cet enregistrement, c'est le serveur de supervision qui sera en charge de fournir au capteur la totalité de ses paramètres de fonctionnement (zone de couverture, capacité, liens de communications avec ses voisins, etc.). En outre, au cours de la vie du capteur, le serveur de supervision devra pouvoir configurer dynamiquement l'état de ce capteur (le mettre en veille, le réveiller, l'arrêter, le redémarrer, modifier sa zone de surveillance, l'état de ses liens de communication, etc.). Il devra également pouvoir récupérer différentes informations du capteur (état, charge actuelle, autonomie, etc.). Le serveur de supervision sera le point unique d'utilisation du simulateur de réseau de capteurs: l'utilisateur du simulateur devra pouvoir manipuler une interface de configuration interactive (pour configurer ou superviser tel ou tel capteur, pour faire émettre une requête par le puits ou en récupérer le résultat...) ou encore faire "jouer" un scénario décrit par avance sous la forme d'un fichier.
  • Un serveur de données. Cette application Java se contente de fournir à chaque capteur qui la sollicite le flux de données multimédia qui le concerne (correspondant à sa zone de couverture, à sa capacité, à sa résolution, etc.).
  • Un protocole de supervision. Celui-ci doit décrire le format des données qui sont échangées entre le serveur de supervision et les capteurs.
  • Un protocole de transmission des données. Celui-ci doit décrire le format des données qui sont échangées entre le serveur de données et les capteurs.
  • Un protocole de communication. Celui-ci doit décrire le format des données qui sont échangées entre les capteurs dans le réseau, que ce soit pour transmettre des descripteurs, des requêtes, des réponses, optimiser de trafic ou le routage, etc. La spécificité de ce protocole est qu'il doit pouvoir être conservé au niveau du réseau de capteurs même dans le cas où ce dernier n'est plus simulé. Autrement dit, en l'absence des deux serveurs de données et de supervision, le protocole de communication doit rester valable et permettre le fonctionnement d'un réseau de capteurs réels (webcams...) offrant la possibilité à un puits d'émettre des requêtes et de reçevoir les informations correspondantes.

L'ordre dans lequel les applications et les protocoles sont listés ci-dessus est quelconque. Néanmoins, il convient de considérer que le protocole de communication et les applications des capteurs (et du puits) qui implémentent ce protocole sont les éléments "de base" du réseau.

En plus de l'implémentation du protocole de communication, pour que le simulateur du réseau soit opérationnel, les capteurs devront implanter les protocoles de transmission des données et de supervision et les serveurs respectifs devront être implantés.

Pré-rendu

Le projet est à réaliser par groupes de 4 personnes (un seul groupe de 3 personnes est autorisé, pour lequel l'évaluation sera un peu plus indulgente).

Pendant deux semaines, vous devrez réfléchir à l'architecture de vos applications et aux différents protocoles qu'elles utilisent. Rien ne vous empêche de réaliser des petits prototypes pour valider la faisabilité de telle ou telle fonctionnalité (c'est même fortement conseillé), mais il ne vous sera pas demandé de rendre de code à cette étape.

Pour le 10 mars 2008 10h00 au plus tard, vous devrez fournir les descriptions des trois protocoles, au format RFC (en anglais et en ASCII - mode texte, 15-20 pages maximum pour chaque protocole). Chaque RFC doit établir clairement l'objectif du protocole, son principe de fonctionnement et le format des données qui sont échangées (protocole de transport utilisé, format, encodage, codes d'opérations, etc.). Elle ne doit en aucun cas faire des hypothèses sur la manière de réaliser une implantation de ce protocole, ni en terme de langage de programmation, ni en terme d'architecture de l'application.

Ces documents seront envoyés par mail aux enseignants de la matière avec comme sujet "PreRendu Java Reseau M1" et dans le corps du mail les noms et prénoms des différents membres du groupe. Les noms des fichiers de rfc devront respecter la convention suivante, et chaque rfc devra contenir au début les noms et prénoms des auteurs:
  • rfcData.txt pour le protocole de transmission des données entre les capteurs et le serveur de données.
  • rfcSupervision.txt pour le protocole régissant les échanges entre les capteurs et le serveur de supervision.
  • rfcSensors.txt pour le protocole de communication entre les capteurs dans le réseau.

Rendu final

Pendant les quatre semaines suivantes, vous devrez réaliser des applications Java pour le serveur de supervision, pour le serveur de données et pour les capteurs. En matière de communication, ces applications devront respecter scrupuleusement les RFCs que vous avez établies pour le pré-rendu. Dans le cas où les RFCs initialement définies ne permettraient pas aux applications de fonctionner et nécessiteraient des révisions, vous formaliserez les nouvelles révisions et détaillerez dans un document annexe l'ensemble des évolutions avec leur justification.

Pour le 9 avril 2008(date limite repoussée d'une semaine) au plus tard, vous devrez fournir l'intégralité de votre projet sous la forme d'une archive au format zip (tout rar, tar.gz, 7z et autre ne sera pas ouvert) contenant:

Cette archive zip aura comme nom Nom1Nom2Nom3Nom4_Sensor.zip, où les noms sont ceux des membres du groupe par ordre alphabétique. L'extraction de cette archive devra créer un répertoire de nom Nom1Nom2Nom3Nom4_Sensor pour contenir tous les éléments demandés ci-dessous. Elle sera envoyée par mail aux enseignants de la matière, avec dans le corps du message les noms et prénoms de chacun des membres du groupe.

Soutenance

Lors de votre soutenance (qui aura lieu le 9 avril 2008 à partir de 14h00), vous devrez utiliser l'archive zip rendue par mail et présenter une démonstration que vous aurez préparée et testée dans les salles de TP de l'école et qui utilise au moins 4 machines distinctes: une pour le superviseur, une autre pour le serveur de données et enfin deux autres machines pour différents capteurs (une machine doit impérativement pouvoir héberger plusieurs capteurs). Après le lancement des différentes applications, seule la machine hébergeant le superviseur sera utilisée pour la démonstration.