IPv6 machines virtuelles et evaluation de performances

De Ensiwiki
Aller à : navigation, rechercher

Mycomputer.png  Deuxième Année  CDROM.png  Informatique 

IPv6, machines virtuelles et évaluation de performances
Projet Projets de Spécialité 2A
Sousprojet Communication et Réseaux
Étudiants Amine BOUKIOUD (TEL)

Quang−Ngoc DUONG (TEL)

Rafik NASRI (TEL)

Promo 2012
Tuteur Franck Rousseau
Documentation Socklab v6 (english)

Socklab v6 (français)

Socklab v6 (source code)

Installation FreeBSD

Iperf-Résultat

Introduction

Les protocoles réseaux sont plus que jamais au centre des préoccupations actuelles. Tout ce qui touche aujourd'hui à la communication est en perpétuelle évolution. Il était donc temps de faire évoluer le protocole IP, véritable clé de voûte de l'Internet, qui a connu un succès bien plus important. Le protocole IP sous sa forme actuelle IPv4 doit disparaître à long terme pour plusieurs raisons, la première que nous pouvons citer est la limite des adresses disponible !

En effet le protocole IPv4 arrive à épuisement, et c'est là que l'IPv6 arrive pour le remplacer. Tout doit être basculé en IPv6 que ce soit les systèmes d'exploitation, les logiciels ou les routeurs.

Afin de découvrir la technologie IPv6 et d'être près à une migration, nous avons donc réalisé, dans le cadre de notre formation d'ingénieur en Télécommunications un projet intitulé "IPv6, machines virtuelles et évaluation de performances".

Ce rapport constitue un point de départ à l'apprentissage des technologies de base constituant IPv6 ainsi que de sa programmation. Après une brève introduction sur le protocole IPv6 et le matériel utilisé au cours de ce Projet, ce rapport présentera la mise en oeuvre d'IPv6 sur un lien local et sur l'utilisation du Multicast DNS, puis il testera les performances du réseau entre des machines réelles et autres virtuelles. Enfin, il abordera les aspects de la programmation IPv6 pour permettre aux lecteurs de bien comprendre le fonctionnement de socklab V6 qui est le principal objectif de cette étude.

Présentation générale

Objectif

Le projet porte sur l'étude de migration des réseaux IP de la version v4 à la version v6. Cette évolution va poser un certain nombre de problèmes, mais va également permettre de proposer de nouvelles fonctionnalités (mobilité, routage, sécurité..). Le but de ce projet est de faire évoluer les TPs réseaux de deuxième année vers l'utilisation d'IPv6. il faudra donc :

  1. Vérifier les manipulations en IPv6.
  2. Intégrer le support d'IPv6 dans l'application socklab fourni
  3. Mettre en place un support de résolution d'adresse pour simplifier l'utilisation des adresses IPv6
  4. Étudier les différentes possibilités de déploiement sur machines virtuelles en évaluant les performances.

Moyens requis

Lors de ce projet, nous avions à notre disposition:

  • Trois ordinateurs où nous devons installer FreeBSD 8.2 et Ubuntu 11.4 avec Virtualbox , et une quatrième machine serait souhaitable avec le système Portail:EnsiLinux. Chaque machine est équipée d'une carte réseau et les modules et outils IPv6 sont installés.
  • Un Hub Intel InBusiness équipés de 8 ports Ethernet/Fast-Ethernet (10/100 Mbps).
  • Des câbles réseaux croisés.

Cahier des charges

Vérification des manipulations en IPv6

Nous utilisons tous un jeu de commandes comme ifconfig, route, traceroute, ip, netstat...Ces commandes sont compatibles à IPv6 à quelques petites différences près. Il s'agit donc de vérifier que les manipulations faites en IPv4 fonctionnent toutes en v6.

Integration du support IPv6 dans l'application socklab

Dans cette partie, nous allons aborder les aspects de la programmation IPv6, et nous expliquerons les différentes étapes réalisées dans ce projet jusqu'au résultat final : "socklab v6". Pour cela il faudra remplacer des appels anciens par leur version moderne, par exemple gethostbyname par getaddrinfo, AF_INET par AF_INET6 cf. POSIX...).

Résolution d'adresse en IPv6

Les utilisateurs d'ordinateurs sont susceptibles d'éprouver des difficultés dans l'utilisation et dans la mémorisation des adresses IPv6 des ordinateurs avec lesquels ils souhaitent communiquer. Il est préférable d'utiliser des noms uniques, qui sont plus faciles à mémoriser.

Pour cela nous allons mettre en place un support de résolution d'adresse pour simplifier l'utilisation des adresses IPv6 qui sont nettement moins pratiques à manipuler que les adresses v4.

Étude des différentes possibilités de déploiement sur machines virtuelles et évaluation des performances

Dans cette section, une étude des différentes possibilités de déploiement en analysant les performances est demandée entre:

  • Machine Virtuelle [poste 1] / Machine réelle [poste 1]
  • Machine Virtuelle [poste 1] / Machine Virtuelle [poste 1]
  • Machine réelle [poste 1] / Machine réelle [poste 2]
  • Machine Virtuelle [poste 1] / Machine réelle [poste 2]
  • Machine Virtuelle [poste 1] / Machine Virtuelle [poste 2]

Présentation d'IPv6

Le protocole IP version 6 (plus familièrement appelé IPv6) est une évolution du protocole IPv4 utilisé actuellement sur de nombreux réseaux de communications dont Internet et la plupart des intranet d'entreprises et des réseaux locaux personnels.

Les travaux sur IPv6 ont commencé dans les années 1990 et, malgré la simplicité de mise en oeuvre de ce protocole, la plupart des innovations qu'il propose ont été adaptées pour être utilisables en IPv4 plutôt que de modifier le matériel pour pouvoir migrer vers l'IPv6. Par conséquent, cette technologie reste aujourd'hui peu exploitée dans un cadre entrepreneurial.

Cependant, les années à venir vont devenir cruciales pour son imposition sur des grands réseaux comme l'Internet : aujourd'hui, il y a une saturation du nombre d'adresses IPv4 publiques disponibles. De nombreux réseaux sont alors contraints à utiliser des artifices comme le NAT pour fournir un accès au réseau à un nombre de postes plus important que le nombre d'adresses IPv4 allouées.

Dans ce chapitre nous allons présenter brièvement quelques spécifications du protocole IPv6 et nous expliquerons rapidement son adressage.

Les technologies intégrées à IPv6

Les spécifications IPv6 ont tenté de résoudre tous les problèmes rencontrés sur les réseaux IPv4:

  • Manque d'adresses globales pour pouvoir connecter des périphériques;
  • Paquets de taille variable parfois longs à traiter, et champs obligatoires parfois inutiles;
  • Pas de gestion de la sécurité au niveau de la couche réseau ;
  • Adressage complexe pour les adresses de réseau, de broadcast, de multicast et d'unicast;
  • Pas de configuration automatique des périphériques réseaux.

Aussi, à chacune de ses problématiques, une nouvelle technologie, basée sur IPv6 a été créée:

  • La norme IPv6 prévoit un adressage sur 128bits au lieu de 32 bits pour IPv4, soit 2^{96} fois plus d'adresses de périphérique ;
  • Les paquets ont une taille multiple de 32 bits obligatoirement, optimisé pour des processeurs 32bits et supérieurs ;
  • La sécurité peut être gérée directement au niveau des en-têtes IPv6 grâce à la technologie IPSec (RFC 2401 de l'IETF) ;
  • IPv6 réduit le nombre de types d'adresses : unicast, multicast (incluant anycast) ;
  • IPv6 introduit la notion de choix automatique d?adresse IP via son procédé IPv6 Stateless Address Autoconfiguration (RFC 2462 de l'IETF);
  • IPv6 permet la fragmentation de paquets directement par le matériel, plutôt que de renvoyer des erreurs de dimensionnement du MTU (Maxium Transfer Unit) des divers réseaux traversés.

Adressage IPv6

Les adresses IPv6 ont une longueur de 128bits, soit 4 fois plus qu'en IPv4. Ceci les rend fastidieuses à mémoriser, mais surtout à écrire pour un administrateur réseau ou un utilisateur lambda. Aussi, pour simplifier l'utilisation de ce type d'adresse, les simplifications suivantes sont autorisées:

  • Les adresses sont écrites par bloc de 2 octets (16bits), en hexadécimal (base 16, soit 4 caractères), séparées par un caractère « : »;
  • Si un bloc de deux octets commence par un ou plusieurs 0, on peut simplifier son écriture en omettant les zéros initiaux ; cependant, si le bloc ne contient que des 0, le dernier doit figurer dans le bloc. Par exemple : 2001:0123:0456:0007:0000:0088:0999:0123 peut se simplifier en 2001:123:456:7:0:88:999:123;
  • Si plusieurs blocs de mots valant 0000 en hexadécimal sont présents successivement dans l'adresse, et à condition de n'utiliser cet artifice qu'une fois dans une même adresse, on peut résumer tous ces blocs par deux « : » successifs. Par exemple, on peut simplifier 2001:0:0:0:1:2:3:4 en 2001::1:2:3:4, mais on ne peut pas simplifier 2001:0:0:1:2:0:0:4 en 2001::1:2::4, il faut choisir entre 2001:0:0:1:2::4 et 2001::1:2:0:0:4.

Mise en place d'une connexion IPv6

Après l'installation des systèmes indiqués dans le cahier des charges sur les quatre machines, nous avons réalisé un premier montage qui consiste à tester et vérifier les différentes configurations et les manipuler en IPv6.

Montage réalisé

Figure 4.1: Montage de vérification des manipulations en IPv6

Après réalisation de ce montage, nous avons configuré les interfaces réseaux en leur affectant des adresses IPv6 pour créer un réseau local. Prenons l'exemple de la machine ensi1:

   ensi1 # ifconfig bge0 inet6 add 2001:db8:46::1/64

ifconfig nous permet d'ajouter ou supprimer une adresse IPv6 avec l'option inet6, Nous devons retenir aussi qu'une interface peut avoir plusieurs adresses IPv6. Nous verrons dans la section suivante un jeu de commandes qui nous permettra de tester l'ensemble du montage et nous expliquerons le rôle de chaque commande.

Manipulations

Nous avons vu au cours des TPs réseaux de deuxième année des différentes manipulations en IPv4, nous devons maintenant les tester en IPv6 sur notre montage afin de s'assurer du bon fonctionnement du réseau.

La commande ping6
Figure 4.2: Capture de la trame Ethernet

Description: un outil permettant l'envoi et la réception de requête ICMPv6 ECHO; Entre autre, cet utilitaire permet de vérifier que la communication entre deux hôtes utilisant IPv6 peut se faire; On lance un ping6 de la machine ensi2 vers ensi3:

     ensi1 # ping6 2001:db8:46::2

Nous observons sur la machine ensi3 à l'aide de l'outil Wireshark le résultat de la Figure 4.2, On pourra dire maintenant que les machines sont bien connectées et bien configurées.

Resolution de nom sans DNS

Il est possible d'associer un nom symbolique à une adresse IPv6 sans avoir à utiliser DNS. Cette association doit être définie dans le fichier /etc/hosts. Le nom symbolique sera en fait le nom de chaque machine, ici ensi1, ensi2, ensi3 et ensi4.

Les lignes du fichier /etc/hosts sont de la forme suivante:

     2001:db8:46::1        ensi1
     2001:db8:46::2        ensi2
     2001:db8:46::3        ensi3
     2001:db8:46::4        ensi4

Maintenant on pourra reprendre la commande ping6 de cette façon:

     ensi1# /etc/netstart
     ensi1# ping6 ensi2
Observation de CSMA/CD

Le mécanisme de base de CSMA/CD : avant d'émettre une trame, une station écoute toujours le câble pour vérifier qu'aucune autre station n'est déjà en train d'émettre des données. Lorsque le médium devient disponible, la station envoie sa trame.

Dans notre cas, nous allons essayer d'envoyer presque simultanément une trame, par exemple parce qu'elles attendaient la fin de transmission d'une même trame. Dans ce cas, les signaux électriques interfèrent, et aucune des deux trames n'est plus décodable : on appelle cela une collision. Chaque station est capable de détecter ces collisions pendant qu'elle émet une trame. Quand une collision est détectée, chaque station arrête aussitôt son émission, et attend pendant un laps de temps aléatoire, avant de tenter de ré-émettre toute sa trame.

Figure 4.3: Génération de trafics sur le réseau

Cette manipulation nécessite l'installation le package ipmt sur les machines. D'après la figure 4.3, on lance dans la machine ensi1 l'outil netstat de manière à ce qu'il affiche à intervalles réguliers de 2 secondes l'activité sur l'interface utilisé :

     ensi1# netstat -w 2 bge0

on démarre udptarget sur ensi2. Cela nous indiquera le port destination. Dans un second terminal de ensi1, on utilise udpmt pour générer un trafic à destination de ensi2. Le trafic utilisé ici est un flux UDP. La commande suivante génère un trafic UDP à destination du port 13000 de ensi2, chaque datagramme transportant 1460 octets de données :

     ensi1# udpmt -s 1460 -p 13000 ensi2

Après, on refait la même procédure entre ensi3 et ensi4, on remarque maintenant une augmentation dans le nombre de collision.

Socklab v6

L'évolution de IPv4 vers IPv6 a été conçue pour minimiser les changements visibles. Un grand nombre de concepts n'ont pas changé : les noms, les "ports", l'envoi et la réception de données,... Un certain nombre de points ont malgré tout dû être modifiés. Le principal est lié à la taille de l'adresse : en IPv4, une adresse a une longueur de 32 bits (et de nombreux programmes confondent les types adresse et entier) alors qu'en IPv6 une adresse a une longueur de 128 bits ; les types liés aux adresses doivent donc être modifiés. En fait l'effet est plus profond : les nouvelles structures sont plus grandes, et certaines réservations de mémoire avec conversion de type implicite (en particulier : un entier pour une adresse, une struct sockaddr pour une struct sockaddr_in, un tampon de 16 octets pour afficher une adresse sous forme numérique) doivent être corrigés sous peine de débordement de mémoire.

L'interface de programmation réseau ("API") la plus connue est l'interface "socket" (dite aussi interface "BSD"). Au cours des TPs réseaux, nous avons manipulé les sockets à l'aide de l'outil socklab en utilisant des adresses IPv4. Ce dernier ne tourne pas sur IPv6. Dans ce chapitre, nous abordons les étapes permettant la réalisation d'une nouvelle version de socklab dite socklab v6.

Programme Client/Serveur IPv6

Figure 5.1: Relation Client/Serveur : Protocole UDP

Avant de commencer la modernisation de socklab, nous avons développé un simple programme Client/Serveur en langage C pour se familiariser avec l'interface de programmation "socket" pour IPv6.

Dans notre programme (voir les codes ci-dessous), nous avons fait appel à ces fonctions (Voir : Figure 5.1):

Serveur :

  • socket(): Création de la socket.
  • bind()  : Liaison de l'adresse local à la socket.
  • recvfrom() : Réception du Datagramme.
  • close() : Destruction de la socket.

Client :

  • socket() : Création de la socket.
  • connect(): Connexion de la socket à l'adresse destination.
  • sendto() : Envoi du Datagramme.
  • close() : Destruction de la socket.



Ce programme supporte les flux IPv4 et IPv6. Par exemple pour créer une socket qui regroupe ces deux flux, on écrit :

     sock = socket(AF_UNSPEC, SOCK_DGRAM, 0);

Migration vers socklab v6

En analysant les sources de socklab fournies, nous avons ciblé les fichiers suivant qui doivent être modernisé :

  • socklab.c : Module principal - Interaction homme/machine.
  • prim.c : Commandes associés à chaque primitive des sockets.
  • tools.c : Les primitives de conversion entre noms et adresses (getter).
  • tcp.c : Commandes en mode TCP


Les changements opérés concernent les trois domaines suivants :

Les structures de données d'adresses;

  • L'interface socket;
  • Les primitives de conversion entre noms et adresses;
  • Les fonctions de conversions d'adresses.

Remarque : Les sources de socklab v6 sont disponibles Fichier:Ici

Les structures de données d'adresses

Notre application doit stocker des adresses, pour cela il faut vérifier que l'emplacement est suffisamment grand pour contenir une adresse IPv6. Au niveau binaire, un certain nombre de structures ont été introduites. En particulier, struct sockaddr_in6 qui est l'équivalant de struct sockaddr_in en IPv4. Mais ces structures ne sont en quelque sorte que des spécialisations de struct sockaddr, qui est indépendante de la famille d'adresse, et qu'on préfère donc utiliser.

     struct sockaddr_in6 {
        sa_family_t sin6_family;   /* AF_INET6 */
        in_port_t sin6_port;       /* numéro de port */
        uint32_t sin6_flowinfo;    /* identificateur de flux */
        struct in6_addr sin6_addr; /* adresse IPv6 */
        uint32_t sin6_scope_id;    /* ensemble d'interfaces correspondant à la portée de l'adresse */
     };


Une struct sockaddr est plus petite qu'une struct sockaddr_in6. il existe alors une structure, plus étendue, nommée struct sockaddr_storage et que nous avons utilisé dans le programme de Client/Serveur décrit dans la section précédente. socklab v6 accepte que les flux IPv6, pour cela nous utilisons la structure struct sockaddr_in6.

L'interface socket

La création d'une socket se fait comme auparavant en appelant la primitive socket. La distinction entre les protocoles IPv4 et IPv6 se fait sur la valeur du premier argument passé à socket, à savoir la famille d'adresses (ou de protocoles), c'est-à-dire ici AF_INET ou AF_INET6.

Par exemple, dans socklab si on veut créer une socket on écrit :

     sock = socket(AF_INET, proto, 0);	//proto : soit SOCK_DGRAM pour Udp, soit SOCK_STREAM pour Tcp

Tandis dans socklab v6 la création de socket se fait de la manière suivante :

     sock = socket(AF_INET6, proto, 0); //proto : soit SOCK_DGRAM pour Udp, soit SOCK_STREAM pour Tcp

Quant aux autres primitives (bind(),connect(),recvfrom()...) constituant l'interface socket, leur syntaxe reste inchangée. Il faut simplement leur fournir des adresses IPv6, en l'occurrence des pointeurs vers des structures de type struct sockaddr_in6 au préalable convertis en des pointeurs vers des structures génériques de type struct sockaddr.

Un autre point important, lors du nommage d'une socket via la primitive bind, il arrive fréquemment qu'une application (par exemple un serveur TCP) laisse au système la détermination de l'adresse source pour elle. Dans socklab, pour ce faire, elle passe à bind une structure sockaddr_in avec le champ sin_addr.s_addr ayant pour valeur la constante INADDR_ANY, constante définie dans le fichier netinet/in.h.

Dans cette nouvelle version, nous avons initialisé une structure de type struct in6_addr par la variable globale in6addr_any.

Les primitives de conversion entre noms et adresses

Ce qui demande le plus de travail dans cette migration de code est la nouvelle méthode de résolution des adresses. Pour cela, nous avons utilisé les deux fonctions getipnodebyname() et getipnodebyaddr(). Ces fonctions remplacent les fonctions gethostbyname() et gethostbyaddr() qui ne pouvaient qu'accéder aux adresses réseau de la famille IPv4. Les fonctions getipnodebyname() et getipnodebyaddr() peuvent fonctionner avec diverses familles d'adresses réseau.

Par exemple nous avons remplacé :

     //tools.c
     hp=gethostbyname(host);

Par :

     //tools.c
     hp=getipnodebyname(host,AF_INET6,AI_DEFAULT,&errnum);
Les fonctions de conversions d'adresses

socklab utilise inet_addr() et inet_ntoa() comme fonctions de conversions d'adresses. Pour utiliser ces fonctions dans socklab v6 nous devons utiliser respectivement inet\_pton() et inet\_ntop().

La primitive inet_pton convertit une adresse textuelle en sa forme binaire. Elle retourne 1 lorsque la conversion a été réussie, 0 si la chaine de caractères qui lui a été fournie n'est pas une adresse valide et -1 en cas d'erreur, c'est-à-dire lorsque la famille d'adresses (premier argument) n'est pas supportée.

La primitive duale inet_ntop convertit une adresse sous forme binaire en sa forme textuelle. Le troisième argument est un tampon destiné à recevoir le résultat de la conversion. Il doit être d'une taille suffisante, à savoir 46 octets pour les adresses IPv6. Si la conversion est réussie, inet_ntop retourne un pointeur vers le tampon où est rangé le résultat de la conversion. Dans le cas contraire, inet_ntop retourne le pointeur nul, ce qui se produit soit lorsque la famille d'adresses n'est pas reconnue, soit lorsque la taille du tampon est insuffisante.

Multicast Socket IPv6

Afin de détecter les machines utilisant IPv6 présentes sur un lien donné, il est possible d'utiliser une des trois adresses de multicast:

  • ff02::1 : pour les ordinateurs;
  • ff02::2 : pour les routeurs;
  • ff02::3 : qui est réservé pour une utilisation future : autres matériels intelligents, robots.

Pour gérer le multicast dans socklab v6, nous avons utilisé une structure de données spéciale pour stocker l'adresse multicast du groupe (définie dans netinet/in.h) :

     struct ipv6_mreq {
     struct in6_addr ipv6mr_multiaddr; /* IPv6 mcast address of group */
     unsigned int ipv6mr_interface; /* local IPv6 address of interface */
     };

Nous avons utilisé également dans cette partie la fonction inet_pton() qui va permettre la conversion du nom de groupe passé en option sous une forme textuelle (par exemple $2001:db8:46::1$) en forme numérique. Le résultat est directement stocké dans la variable mreq qui sera utilisée par la fonction setsockopt(). On passe en paramètre à cette fonction l'option IPV6_JOIN_GROUP avec la variable mreq.(voir prim.c socklab v6).

Résolution d'adresse mDNS en IPv6

Sur un système Linux récent, il est possible de contacter les autres équipements informatiques du réseau local, par exemple via un ping6 sur hostname.local, et ceci alors qu'aucune déclaration DNS n'a jamais été faite. Le protocole impliqué dans la réponse à cette question se nomme Multicast DNS (ou mDNS).Dans ce projet nous utilisons le démon Avahi.

Atention: Socklab v6 est incompatible avec l'outil mDNS. Pour une resolution d'addresse de socklab v6, modifier le fichier /etc/hosts en ajoutant par exemple la ligne suivant:

     2001:db8:46::2 pc2

Mise en oeuvre

Pour mettre en oeuvre mDNS dans FreeBSD, nous installons les paquets suivants:

Installation de nss_mdns

Nss_mdns est un plugin pour les fonctionnalités du nom de Service switch GNU (NSS) de la bibliothèque GNU C (glibc) offrant une résolution de nom d'hôte via Multicast DNS (aka Zeroconf, alias Apple Rendezvous, alias Apple Bonjour), de manière efficace permettant la résolution de noms par les programmes de la commune Unix/Linux dans le domaine local de mDNS.

Dans le terminal de chaque machine on tape:

     ensi# whereis nss_mdns
     ensi# cd /usr/ports/dns/nss_mdns
     ensi# make install clean

Fixing nss-mdns for IPv6 linklocal scoped addresses

Installation du démon Avahi

Avahi s'occupe d'attribuer automatiquement une adresse IPv6 même sans présence d'un serveur DHCPv6, de faire office de DNS (chaque machine est accessible par le nom ensi[x].local), de publier des services et d'y accéder facilement (les machines du réseau local sont prévenues de l'arrivée ou du départ d'un service). Dans le terminal de chaque machine on tape:

     ensi# whereis avahi
     ensi# cd /usr/ports/net/avahi
     ensi# make install clean
     

On s'assure que le service démarre en ajoutant la ligne suivante dans /etc/rc.conf:

     dbus_enable="YES"
     avahi_daemon_enable="YES"

On édite /etc/nsswitch.conf et on change :

     hosts: files dns
     

Par :

     hosts: files dns mdns

Maintenant, on redémarre toute les machines, et on peut faire des ping dans le réseau local sans connaître son adresse. On Note que le nom doit se terminer par .local (par exemple ensi1.local).

Configuration de mDNS avec IPv6

Pour activer IPv6 dans le service mDNS, il suffit de vérifier le fichier /usr/local/etc/avahi/avahi-daemon.conf s'il contient "use-ipv6 = yes". Après cela, on peut faire un ping6 avec le nom d'hôte, mDNS détecte automatiquement l'adresse IPv6. Remarque: on doit ajouter .local après le nom de la machine. Sinon on ajoute "search local" dans le fichier "/etc/resolv.local" et on tape donc juste le nom de la machine Par exemple:

     ensi1# ping6 ensi2.local
     ensi1# ping6 ensi2

Pour connaitre le hostname, taper:

     ensi1# hostname
     ensi1.imag.fr

On peut changer le nom de la machine en modifant le fichier /etc/rc.conf

     hostname="ensi1.imag.fr"

Machines virtuelles et évaluation des performances

Dans ce chapitre, nous allons étudier les différentes possibilités de déploiement entre machines, et l'on évaluera les performances de manière approfondie.

L'outil "iperf"

Iperf est un outil pour mesurer la bande passante et la qualité d'un lien réseau. Ce dernier est délimité par deux machines sur lesquelles est installé Iperf.

La qualité d'un lien est déterminée principalement par les facteurs suivants:

  • Latence (temps de réponse): peut être mesurée à l'aide d'un Ping.
  • Gigue (variation de la latence): peut être mesurée par un test Iperf UDP.
  • Perte de paquet: peut être mesurée avec un test Iperf UDP.
  • Bande passante : mesurée par des tests TCP.

Iperf utilise les différentes propriétés de TCP et d'UDP pour fournir des statistiques sur des liens réseaux.

Iperf peut être installé très facilement sur n'importe quel système UNIX/Linux. Un hôte doit être configuré en tant que client et l'autre en tant que serveur. On installe Iperf sur toute les machines :

     ensi# whereis iperf
     ensi# cd /usr/ports/benchmarks/iperf
     ensi# make install clean

Tests et Résultats

Figure 7.1: Commandes utilisés pour évaluer les performances d'un réseau IPv4 et IPv6

Pour évaluer les performances entre IPv4 et IPv6, nous avons testé 5 cas possibles entre machines réelles et autres virtuelles.

Les commandes que nous avons utilisé pour les essais sont les suivants (Figure 7.1) (remplacez @IP par l'adresse IP correspondant de la machine serveur). Nous obtenons les résultats suivants :

Machine virtuelle [Ensi1]/Machine réelle [Ensi1]

Pour que les deux machines se connectent, il faut choisir Host-Only Adapter comme option dans la Configuration du Virtualbox.

Figure 7.2: Évaluation des performances du réseau IPv4 et IPv6 entre MV[x]/MR[x]
Machine virtuelle 1 [Ensi1]/Machine virtuelle 2 [Ensi1]

Pour que les deux machines se connectent, il faut choisir Host-Only Adapter comme option dans la Configuration du Virtualbox.

Figure 7.3: Évaluation des performances du réseau IPv4 et IPv6 entre MV1[x]/MV2[x]
Machine réelle [Ensi1]/Machine réelle [Ensi2]
Figure 7.4: Évaluation des performances du réseau IPv4 et IPv6 entre MR[x]/MR[y]
Machine virtuelle [Ensi1]/Machine réelle [Ensi2]

Pour que les deux machines se connectent, il faut choisir Bridged Adapter comme option dans la Configuration du Virtualbox.

Figure 7.5: Évaluation des performances du réseau IPv4 et IPv6 entre MV[x]/MR[y]
Machine virtuelle [Ensi1]/Machine virtuelle [Ensi2]

Pour que les deux machines se connectent, il faut choisir Bridged Adapter comme option dans la Configuration du Virtualbox.

Figure 7.5: Évaluation des performances du réseau IPv4 et IPv6 entre MV[x]/MV[y]

Conclusion

Dans le cadre du projet de spécialité de la deuxième année, nous avons modernisé l'application socklab vers socklab v6 pour supporter IPv6 ainsi que l'implémentation des outils permettant l'étude de performances et de résolution d'adresse pour ce protocole.

Toutefois , la migration vers IPv6 pose de nombreux problèmes. D'après la journée d'IPv6 (IPv6 day) qui s'est déroulée récemment le 8 juin 2011, seuls 0,2% des utilisateurs en effet seraient équipés d'une connexion IPv6 « native », et le terme de « minorité » est parfaitement adapté. Ce chiffre ne pourrait en aucun cas être de 100%.

Le passage à IPv6 va en effet laisser une certaine proportion des utilisateurs sur le carreau. Le problème réside majoritairement dans les vieux équipements : non seulement les anciens systèmes d'exploitation ne le gèrent pas, ou à travers une mise à jour pas forcément installée, mais les vieilles infrastructures (serveurs, routeurs, etc.) ne sont pas forcément compatibles elles non plus.

Bibliographie