This blog is available in English too. The English version is a bit less complete than the French one. Go to the English version of this blog.

Archives de la catégorie TELECOM Bretagne

29 mars 2010

Surveillance de trafic avec accélération matérielle : NetFPGA

NetFPGA

Pendant ma 3ème année à Télécom Bretagne, j’ai travaillé avec deux collègues sur un projet pour développer un outil de surveillance de trafic avec accélération matérielle en utilisant un NetFPGA. Ce projet bas-niveau s’est révélé très intéressant et m’a permis de découvrir les subtilités du développement matériel avec le langage Verilog.

Pour vous faire découvrir ce projet, j’ai collé ci-dessous le résumé de notre rapport final.

Résumé

Internet se popularise de plus en plus et les nouveaux services, tels que le streaming ou le Peer-to-Peer, sont toujours plus gourmands en bande passante. Ceci, renforcé par les évolutions technologiques en terme de débit, mène à un trafic en croissance permanente. Les outils de surveillance réseau doivent suivre cette évolution et être capables d’analyser de plus en plus de données de plus en plus vite. L’utilisation d’implémentations matérielles d’algorithmes de surveillance est une réponse à ce nouveau défi.

Notre projet de troisième année à Télécom Bretagne fut l’occasion de travailler sur une telle implémentation matérielle. Nous avons utilisé pour cela un NetFPGA, une carte PCI contenant un FPGA et quatre ports Ethernet. Nous avons commencé par transformer le NetFPGA en hub Ethernet pour ensuite lui ajouter une fonctionnalité de détection de paquets TCP SYN afin de lui permettre de détecter les attaques de type SYN flooding. Afin de réduire l’empreinte mémoire nécessaire à cette détection, nous avons utilisé un algorithme spécial de stream mining : l’algorithme CMS.

Plus d’informations

Tout ce que nous avons fait sur ce projet est disponible en ligne sur le Trac de notre projet. Le rapport final est aussi disponible.

1 commentaire »

28 septembre 2008

Tiny6 – IPv6 sur les réseaux de capteurs

[lang_fr]Capteur MicaZ[/lang_fr][lang_en]MicaZ sensor node[/lang_en]

Dans le cadre du semestre que j'ai passé en Inde de Janvier à Juin 2008, j’ai participé au projet Tiny6, projet entre TELECOM Bretagne, l’Indian Institute of Technology Guwahati (IITG) et une université en Chine.

But du projet

Les réseaux de capteurs sont des ensembles de petits capteurs (qui permettent de mesurer la température, la luminosité… à un endroit donné) reliés entre eux sans fil. La plupart du temps, ces capteurs communiquent entre eux en utilisant un protocole propriétaire, et il y a dans le réseau une passerelle qui récupère les données et qui les rend disponibles sur le réseau IP.

IPv6 est la prochaine version du protocole IP qui est à la base d’Internet. Cette nouvelle version fournit entre autres améliorations beaucoup plus d’adresses pour désigner des machines que la version actuelle IPv4, pour laquelle les adresses commencent à manquer.

Cette profusion d’adresses permet de donner à chaque capteur d’un réseau de capteurs une adresse IP distincte, et de faire communiquer les capteurs directement avec le protocole IPv6. Ceci permet de simplifier le réseau et d’augmenter sa fiabilité en autorisant plusieurs passerelles entre le réseau de capteurs et internet.

Le problème est qu’IPv6 est fait pour être utilisé avec des ordinateurs classiques, et les capteurs ont des ressources de calcul et de mémoire très limitées. Il est donc nécessaire de créer un protocole allégé, c’est ce qu’a fait le groupe de travail 6lowpan.

A l’IITG, Alexandre, Antoine et moi avions pour but de faire fonctionner ce protocole allégé sur des capteurs précis, et de faire communiquer les capteurs en IPv6 avec TELECOM Bretagne. Nous nous sommes pour cela appuyés sur la thèse de Matus Harvan qui a réalisé une implémentation partielle (IPv6, ICMPv6 et UDP sont partiellement implémentés) de tiny6 en NesC, le langage utilisé pour programmer les capteurs, mais sur un matériel différent du notre.

Difficultés

La première difficulté a été de comprendre le fonctionnement des capteurs et du langage de programmation NesC. NesC est un langage dérivé du C fait pour minimiser l’utilisation de mémoire et de puissance de calcul. Pour programmer les capteurs, nous disposions d’une base branchée en USB à notre ordinateur. Nous avons utilisé une version adaptée de Xubuntu, XubunTOS dans une machine virtuelle comme environnement de travail pour programmer les capteurs et communiquer avec eux pour faire la liaison avec le reste d’Internet.

Nous avons ensuite adapté le code de Matus Harvan pour le faire fonctionner sur nos capteurs, un peu moins puissants que ceux qu’il avait utilisés. Le débuggage a été assez complexe car nous avions peu de moyens de savoir ce qui se passait dans les capteurs (3 leds à faire clignoter).

Enfin, il nous a fallu mettre en place un lien en IPv6 entre TELECOM Bretagne et l’IITG, ce qui s’est révélé compliqué car l’IITG avait une plage d’adresses IPv6 attribuée, mais les routeurs de son fournisseur d’accès ne supportaient pas encore IPv6. Nous avons donc du établir un tunnel IPv6 sur IPv4.

Finalement, ce qui a le plus compliqué le projet est la communication avec nos encadrants indiens. De nombreuses incompréhensions mutuelles nous ont fait perdre beaucoup de temps. Obtenir une adresse IPv4 routable pour communiquer avec TELECOM Bretagne a par exemple été très compliqué, et nous avons été obligés de travailler directement au centre informatique pour utiliser cette adresse IP, qui n’était autorisée à communiquer qu’avec un serveur précis de TELECOM Bretagne.

Résultat

Nous avons finalement réussi à faire communiquer les capteurs en UDP avec TELECOM Bretagne, qui a donc pu recevoir les données mesurées par le capteur. Mais notre volonté de simplifier le réseau a été mise à mal par l’utilisation d’un tunnel IPv6 sur IPv4 entre l’IITG et TELECOM Bretagne, et d’un NAT entre notre machine virtuelle et notre machine physique :

Schéma de la connexion des capteurs au réseau IPv6

2 commentaires »

1 juin 2008

Développer un site de choix de projets pour des étudiants

[lang_fr]Logo de l\\\'UBO[/lang_fr][lang_en]UBO logo[/lang_en]

De janvier à juin 2007, dans le cadre du projet au semestre 2 de TELECOM Bretagne « Projet de développement », on m’a demandé, avec trois autres étudiants, de développer un système de gestion en ligne de projets pour l’intranet du département informatique de l’Université de Bretagne Occidentale (UBO).

Objectifs

Ce site devait permettre aux intervenants invités par l’administrateur d’une session de projets d’entrer des propositions de projets. Ces propositions étaient en suite validées ou non par l’administrateur, puis rendues visibles aux élèves. Les élèves intéressés classaient alors leurs choix. Une fois cette phase terminée, l’administrateur attribuait les projets en faisant le moins de mécontents possibles, puis les projets définitifs étaient notifiés aux élèves.

L’identification des élèves devait se faire grâce au LDAP de l’UBO. Les intervenants, en revanche, n’étaient pas obligatoirement inscrits dans le LDAP.

Le site devait enfin être compatible avec les principaux navigateurs actuels, et utiliser PHP et MySQL côté serveur.

Problèmes et solutions

Le problème le plus complexe que devait résoudre le système était l’attribution finale des projets aux élèves en faisant le moins de mécontents possible. Nous avons d’abord envisagé une solution de placement automatique, mais ça aurait manqué de souplesse, et nous manquions de temps pour mettre en place une telle solution. Nous avons donc décidé de créer une interface en AJAX qui permettait à l’administrateur de voir en direct quels élèves et quels projets étaient insatisfaits, et quels changements pouvaient être faits pour améliorer la solution. Les changements pouvaient être enregistrés en cours d’attribution pour éviter les pertes de données.

L’interface de classement des projets par les élèves était aussi relativement complexe. Nous avons donc utilisé du javascript pour permettre de faire glisser les projets dans la liste, et rendre l’interface plus intuitive. Cependant l’interface se dégradait bien si javascript n’était pas activé, et restait utilisable.

Un petit problème technique se posait aussi pour tester le système d’identification : nous travaillions à TELECOM Bretagne d’où nous n’avions pas accès au LDAP de l’UBO. Nous avons donc testé l’identification avec le LDAP de TELECOM Bretagne, et fait les derniers ajustements lors du déploiement sur le serveur de l’UBO.

Difficultés

La première difficulté que nous avons rencontrée est que parmi le groupe de 4 étudiants pour ce projet, j’étais le seul à avoir déjà développé en PHP. Il a donc fallu du temps pour que les 3 autres apprennent ce langage.

Un autre problème est venu du fait que nous n’avons pas passé assez de temps sur le cahier des charges au départ. Le problème de départ était vague, ce qui a provoqué des changements du cahier des charges en cours de projet qui ont fortement ralenti l’avancement du projet.

Conclusion

Malgré ces difficultés, le résultat final était fonctionnel, pas très beau (aucun de nous n’était designer). Il était assez facilement maintenable et correctement documenté.

Je ne sais pas si notre système est actuellement utilisé à l’UBO.

Aucun commentaire »