Le Multicast
et le Broadcast utilisent tous les
deux le même protocole pour l'échange de message, ils utilisent le protocole
UDP.
Le protocole UDP (User Datagram Protocol) permet aux applications d'échanger des
datagrammes. Celui-ci fournit un service en mode non-connecté et sans reprise
sur erreur. Il n'utilise aucun acquittement, ne séquence pas les messages, et
ne met en place aucun contrôle de flux. Les messages UDP peuvent être traités
lors de leur réception.
Nous avons choisi d'utiliser la
diffusion multipoint (Multicast) car
celle-ci permet d'adresser des groupes de machines en étant plus sélectif
qu'une diffusion (Broadcast).
Le broadcast est un moyen d'envoyer un
message sur toutes les machines du réseau en utilisant une adresse de
diffusion, celle-ci est déterminée selon l'adresse IP du réseau.
Prenons comme exemple:
Adresse IP de la machine foobar: 192.168.0.1
Adresse de diffusion est: 192.168.0.255
Nous n'avons pas voulu utiliser le
broadcast car cette méthode a tendance à surcharger le réseau, de plus elle ne
permet pas de pouvoir envoyer des messages à des machines qui sont sur un autre
réseau.
Nous avons retenu comme solution,
l'utilisation du Multicast. Les diffusions multipoints IP sont envoyées en
utilisant des adresses de destination de classe D (comprises entre 224.0.0.0 et
239.255.255.255). Ces groupes peuvent être créés dynamiquement et les membres
du groupe peuvent changer au cours du temps.
Le Multicast permet l'envoi de
datagrammes vers plusieurs destinations de façon transparente. Ce protocole a
été conçu pour être efficace et optimiser l'utilisation des ressources réseaux.
Nous avons donc opté pour le Multicast
pour de nombreuses raisons. Tout d'abord il permet de diffuser les trames sur
n'importe quelle machine de n'importe quel réseau, ensuite les trames arrivent
uniquement aux machines pour lesquelles elles sont destinées.
Tout d’abord il faut activer le routage
Multicast dans le routeur avec la commande :
ip multicast-routing
Pour la désactiver il suffit de taper
la commande :
no ip
multicast-routing
Ensuite il faut choisir le style de
multicasting, nous avons choisi le PIM (Protocol Independant Multicast) pour
les raisons suivantes :
·
PIM
marche avec tous les protocoles de routage Multicast
·
PIM
a deux modes (dense et sparse) qui nous donnent un peu de
liberté quant à la configuration.
On peut aussi utiliser IGMP (Internet
Group Management Protocol), qui est bien pour les WAN, ou DVMRP (Distance
Vector Multicast Routing Protocol) qui est très peu supporté. Pour utiliser
DVRMP, il faut indiquer directement à notre routeur le routeur qui supporte
DVMRP.
Des deux choix que nous avions pour le
PIM, nous avons retenu le mode dense.
Voici la description des deux modes :
Dense
mode : Quand le
routeur reçoit un paquet Multicast. Le routeur envoie le paquet à toutes les
interfaces en sortie sauf à l’interface d’origine de l’envoi.
Si le routeur découvre qu’une certaine
interface n’a pas de destinataire Multicast, il envoie un message
« prune » en retour à l’envoyeur lui déclarant qu’il n’est pas
nécessaire d’envoyer des messages à cette interface/sous réseau/lien/hôte.
Sparse
mode : Dans ce
mode, il est supposé qu’il n’y ait aucun hôte qui veuille des paquets Multicast
à moins qu’un hôte ne le demande spécifiquement. Donc contrairement à
l’approche « brutale » du dense
mode, un routeur devient le foyer (hub). Ce foyer log tous les hôtes qui
veulent recevoir du Multicast. De plus les paquets Multicast sont envoyés
uniquement à ces hotes.
Pour ne pas surcharger notre routeur
dans le cas où beaucoup d’hotes veulent du Multicast, nous avons choisi de
mettre en place le dense mode.
Donc pour configurer le PIM en dense mode pour le routage Multicast il
suffit de taper les commandes suivantes :
interface ethernet 0
ip pim dense-mode
interface ethernet 1
ip pim dense-mode
Dernière étape, il faut configurer le threshold (seuil).
Tous les paquets Multicast ont une TTL (durée
de vie). C’est normal dans le monde IP. En mettant en place le multicast threshold sur une interface de
routeur donné, on crée un obstacle. Si la TTL du paquet est plus haute
que le multicast threshold, le paquet
peut passer. Si la TTL du paquet est plus
basse que le multicast threshold,
le paquet est stoppé.
L’intervalle du multicast threshold est compris entre 0 et 255. 0 correspond au
fait que tous les paquets peuvent en théorie passer et 255 que tous les paquets
sont théoriquement stoppés.
Nous avons mis le threshold à 0 (valeur par défaut).
[no] ip
multicast ttl-threshold <ttl-value>
Nous avons besoin
d’un certains nombre de logiciels pour la voix et l’image ainsi que pour se
rallier à un groupe Multicast de vidéoconférence (VIC, SDR,RAT)
Le réseau dans les salles de projets ne
permet pas de faire du Multicast car les routeurs en amont ne sont pas
configurés pour. Il faut donc définir notre propre réseau pour arriver à nos
fins
Dans un premier temps, nous avons été
amenés à programmer des Sockets.
Les Sockets sont à notre avis l’un des
meilleurs moyens de mettre en œuvre le Multicast, étant donné les moyens
limités que nous avons dans les salles de TP.
En théorie, un Socket correspond à la paire (adresse IP, Port). Une communication via un socket est donc
identifiée par le numéro du port utilisé pour la communication et les adresses
IP des intervenants de la communication. En pratique, on peut assimiler les
Sockets à un tuyau par lequel transitent des informations entre un serveur et
des clients. Il est important pour que la communication soit établie et que
chaque équipement connaisse le port de communication. Ainsi, l’envoi d’un
datagramme à une machine est identifiée par le port de communication et
l’adresse IP de la machine distante.
Il est possible par la programmation des
Sockets d’effectuer du Multicast sur un réseau de machines. Chose que nous nous
sommes attachés à faire. Dans un premier temps, on a réalisé un programme
serveur (en langage C) qui permet d’envoyer sur un même réseau, via un Socket,
des datagrammes à un groupe de machines dites clientes, dont le programme en
langage C a également été conçu.
Topologie du réseau pour la mise en
œuvre du Multicast sur un réseau.
Le programme serveur permet d’envoyer
un datagramme vers un groupe de machines. Ici, le Socket identifié par la paire
(Port=5603 ; @ IP=225.50.1.6) permet l’envoi d’un datagramme en
Multicast à un groupe de machines 1, 2 et 3. Ce groupe de machines est en fait
désigné par une adresse IP Multicast (225.50.1.6).
Une adresse Multicast est une adresse
IP classe D qui est comprise dans la gamme de 224.0.0.0 à 239.255.255.255. Il
n'y a pas de champ network ni de champ host. Il s'agit en fait
d'une adresse immatérielle dite adresse de groupe. Les 28 bits du champ
adresse offrent ainsi 250 millions d'adresses possibles. Pour qu’une machine
puisse recevoir un datagramme Multicast, elle doit appartenir au groupe
Multicast, si ce n’est pas le cas elle doit s’ajouter dans ce groupe. Ainsi,
dans l’exemple ci-dessus, si la machine « 1 » ne fait pas partie du
groupe Multicast, elle ne recevra pas le datagramme émis via le Socket par le
serveur, par contre les machines « 2 » et « 3 » le
recevront.
Ceci a donc été réalisé dans les salles
TP. Ici nous ne détaillerons pas la partie technique de la réalisation des programmes
serveur et client Socket, car ce n’est pas le sujet. Cependant ces programmes
sont consultables avec des commentaires en Annexe (cf. programmes client et
serveur multicast).
Une fois le Multicast réalisé sur le
réseau de la salle TP via les Sockets, il a été appliqué sur deux réseaux gérés
par le routeur Cisco.
Voici ci-dessous la topologie du
réseau.
Topologie du réseau pour la mise en
œuvre du Multicast sur deux réseaux
Réseau
en 192.168.50.0
Réseau en
10.1.1.0
Pour que le routeur puisse laisser
passer tous les paquets Multicast du réseau 10.1.1.0 vers le réseau
192.168.50.0. Il a fallu dans un premier temps configurer le routeur pour qu’il
gère le routage de paquets Multicast C’est le rôle de la commande :
Cisco1600# ip
multicast-routing
Puis il est nécessaire de définir le
protocole Multicast à appliquer sur les interfaces du routeur qui véhiculent
les paquets Multicast.
Voici les commandes
correspondantes :
Pour l’interface Ethernet 0 (dont l’adresse
avait précédemment et définie)
Cisco1600# conf t
Cisco1600(config)# int
e0
// choix de la configuration de // l’interface Ethernet 0
Cisco1600(config-if)#ip pim sparse-mode // ou sparse-dense-mode
Cisco1600# conf t
Cisco1600(config)# int
e1
// choix de la configuration de // l’interfaces Ethernet 1 Cisco1600(config-if)#ip
pim sparse-mode // ou
sparse-dense-mode
Pour l’interface
Ethernet 1 ( dont l’adresse avait précédemment et définie )
Il est aussi important de modifier la
valeur du TTL à TTL=2, car par défaut il est à « 1 ». Si ce dernier
reste à « 1 » le paquet Multicast ne sortira jamais du réseau local
10.1.1.0. Rappelons que le champ TTL indique le nombre maximum de routeurs que
peut traverser un datagramme. Cette modification a été faite dans le programme
en C du Socket serveur (cf. programme source socket_multicast_serveur.c
en Annexe).
A partir de maintenant les machines 1,
2 et 3 (si elles sont membres du groupe Multicast ) sont capables de recevoir
les datagrammes Multicast émis par le serveur via le Socket identifié par la paire (adresse IP, Port) .
Il a été dans un premier temps non pas
complexe, mais peu évident de se familiariser avec la programmation des Sockets
en langage C.
Puis la seconde étape concernant la programmation
du Multicast Socket fut une autre paire de manche.
Mais la partie correspondant à la
configuration du routeur était assez intuitive.