Pour aller plus loin et bien comprendre l’IGMP : Snooping & QuerierComme nous l’avons vu plus haut, pour regarder une chaine on s’abonne à son groupe multicast en envoyant un message IGMP nommé « Membership Report » au routeur multicast, dans notre cas le routeur Mikrotik qui est un proxy vers le routeur multicast d’Orange. Une fois abonné on reçoit donc le flux de chaine en question.
Pourquoi l’IGMP Snooping ?Les switches (commutateurs) de niveau 2 n’ont pas connaissance de cette notion d’abonnement multicast (l’IGMP est un protocole de niveau 3). Autrement dit, ils considéreront le trafic multicast comme des trames de diffusion (broadcast) et donc répliqueront le trafic sur tous les ports.
Cela peut poser de gros problème de performance car le ou les flux multicast pour lequel vous êtes abonné seront diffusés sur tous les ports de vos switches et donc reçu par tous les équipements connectés à votre réseau !
Pour optimiser ce comportement il existe un mécanisme nommé « IGMP Snooping » permettant à un switch de niveau 2 d’analyser le trafic IGMP afin d’apprendre « qui est abonné à quoi » (= quel port du switch à quel groupe multicast).
Ainsi en scrutant (snoop) les rapports IGMP qui le traverse, le switch peut apprendre et donc construire une table de mapping reliant un port à un groupe afin de répliquer le trafic multicast seulement sur les bons ports pour chaque groupe.
Dans mon architecture c’est optionnel car j’ai fait le choix d’isoler la partie TV dans un VLAN dédié. Dans ce VLAN il n’y a qu’un client : le décodeur TV. Ainsi sans l’« IGMP Snooping » mes deux switches répliqueront bêtement le flux TV multicast en broadcast mais seulement sur les ports du VLAN « TV » ! Et ce VLAN ne contient qu’un port : celui du décodeur TV ! De ce fait, avec ou sans l’IGMP Snooping le trafic sera toujours envoyé sur ce même port !
Par contre, si vous configurez votre proxy IGMP dans le même VLAN que votre réseau LAN ou bien si vous comptez brancher plusieurs décodeurs dans le VLAN « TV », il est important d’activer l’IGMP Snooping afin d’envoyer le bon flux TV au décodeur qui en fait la demande et non de l’envoyer sur tous les ports ! Autrement dit s’il y a plus d’un périphérique sur le réseau/VLAN sur lequel se trouve votre routeur multicast (IGMP proxy) vous devez activer l’IGMP Snooping !
Subtilités dans l’implèmentation de l’IGMP SnoopingDans la réalité, l’« IGMP Snooping » est assez subtile à comprendre car ce n’est pas vraiment une norme. Chaque constructeur peut l’implèmenter avec plus ou de moins de liberté créant des différences de fonctionnement et de paramétrage entre les différentes marques voire même entre les différents modèles/versions d’une même marque.
En effet, l’IGMP Snooping est décrit dans la RFC4541 classée dans la catégorie « Informational ». Le document précise bien en entête :
This memo provides information for the Internet community. It does not specify an Internet standard of any kind.
Dans les grandes lignes, tous les switches et équipements implèmentant l’IGMP Snooping fonctionnent de la même manière : ils analysent le trafic IGMP, c’est-à-dire les différents messages IGMP pour déterminer quel port est abonné à quel groupe multicast de façon à acheminer le flux multicast seulement aux ports abonnés et non à tout le monde (broadcast).
Il y a cependant des différences dans l’implèmentation de cette fonctionnalité, notamment en ce qui concerne le « report suppression ».
Certain font ce qu’on appelle de l’« IGMP Snooping passif », c’est-à-dire que le « snooping » n’intervient pas dans le trafic IGMP : le switch se contente d’analyser les messages IGMP qui le traverse pour apprendre tout en laissant passer ces messages (d’où le terme « passif »).
D’autre font de l’« IGMP Snooping proxy reporting » aussi nommé « reports suppression » qui en plus d’apprendre du trafic IGMP, filtre (= bloque) certain message IGMP pour réduire ce trafic et la charge du routeur multicast. De ce fait le switch ne se contente pas seulement d’analyser le trafic IGMP de façon passive, il devient « actif » en bloquant certain message !
Le report-suppressionL’idée est simple, si vous avez deux hôtes connectés sur un même switch (avec IGMP Snooping) lui-même connecté sur un routeur multicast. L’un des deux hôtes s’abonne à un groupe multicast en envoyant un « Membership report » au routeur multicast. Le switch analysant le trafic IGMP comprend que cet hôte s’est abonné à un groupe et donc met à jour sa table de mapping de façon à diriger le trafic multicast de ce groupe seulement pour lui. Le deuxième hôte ne recevra donc aucun trafic grâce à l’IGMP Snooping.
Maintenant, le deuxième hôte décide de s’abonner au même groupe multicast, il envoie donc un « Membership report » pour ce groupe au routeur multicast. Mais si notre switch implèmente l’IGMP Snooping avec « report suppression », la demande d’adhésion ne parviendra jamais au routeur.
En effet il y a « suppression du report ». Pourquoi ? Tout simplement parce que le switch considère que le routeur n’a pas à avoir connaissance de cette information. En effet, comme le switch reçoit déjà le flux multicast de ce groupe pour le 1er hôte, il peut tout simplement mettre à jour sa table de mapping pour envoyer ce flux également au 2ème hôte car il a compris en « snoopant » le message IGMP que ce 2ème hôte souhaitait également se joindre à ce même groupe.
Le fait d’envoyer cette demande d’adhésion au routeur n’apporte rien car le flux transite déjà du routeur au switch. Ainsi dans l’idée de réduire le trafic et la charge du routeur, le switch « absorbe » ce report.
Il en va de même en cas de désabonnement d’un des deux hôtes. Si le 1er hôte décide de quitter le groupe, il enverra un message IGMP de type « Leave ». Comme le switch sait d’après sa table de mapping qu’il y a toujours le 2ème hôte sur ce groupe, il décidera de ne pas communiquer cette information au routeur mais ajustera sa table pour ne plus envoyer ce flux sur le port du 1er hôte. Ce n’est seulement lorsque le dernier quitte un groupe que le message IGMP « Leave » sera acheminé jusqu’au routeur multicast.
Les messages absorbés le sont sur une période de temps assez courte (une dizaine de seconde) car n’oubliez pas que le routeur multicast, élu « requérant », envoie périodiquement des requêtes de type « Membership Queries » pour savoir « qui est encore dans le groupe ». Les hôtes, pour confirmer leur présence dans le groupe, répondent par des « Membership report ». Or si le switch considère que nos hôtes sont déjà dans le groupe, il bloquera ces reports et donc sans réponse, le routeur multicast coupera le flux.
C’est pourquoi le « reports-suppression » opère donc sur des fenêtres de temps de quelques secondes. Lorsque le requérant envoie les « Membership Queries », les hôtes répondent tous par « Membership report » avec un délai aléatoire de réponse de quelques secondes (pour éviter les pics de réponse simultanées). Le switch décide alors de laisser passer un des reports mais de supprimer les autres. Le routeur sait donc qu’il y a au moins un hôte dans ce groupe via le switch et le flux est maintenu.
L’IGMP QuerierS’il y a « IGMP Snooping » sur un réseau il est nécessaire d’avoir également un « IGMP Querier », c’est-à-dire un « requérant IGMP ».
Comme nous l’avons dit plus haut, le requérant (ou « IGMP Querier ») envoie régulièrement des messages de types « Membership Queries » afin de savoir « qui » est (toujours) là pour un groupe donné. Les clients, dans notre cas le décodeur TV, doivent répondre par un « Membership report » sous peine d’être exclus du groupe.
Ces « Queries » sont indispensable pour l’IGMP Snooping car les « Membership report » permettent au switch de maintenir la table de mapping à jour. En effet, lorsque le switch ajoute un port à un groupe il y a un timeout au-delà duquel, sans « report », le switch supprimera le port de sa table. Sur un switch Netgear GS724T il est possible de configurer ce temps d’expiration (paramètre « Host timeout ») par défaut défini à 260 secondes (4min 20s).
En d’autre terme, si pendant plus de 4 min 20 (par défaut avec le GS724T), un hôte n’a pas renvoyé de « Membership report », son ou ses flux multicast seront coupés au niveau du switch par l’IGMP Snooping.
Dans notre cas c’est le Mikrotik qui est le « Querier » sur notre interface locale (downstream) pour confirmer les abonnements en cours auprès du routeur multicast d’Orange via « upstream » sur le VLAN 840.
Pour être exact, c’est le routeur multicast d’Orange qui lance ces « Queries » toutes les 60 secondes pour s’assurer qu’il y a au moins un hôte par groupe multicast. Notre routeur Mikrotik étant un IGMP Proxy relaie les « queries » sur l’interface locale, il est donc le « Querier » local.
[admin@ROUTER-AJS] > /routing igmp-proxy interface print status
Flags: X - disabled, I - inactive, D - dynamic, U - upstream
0 U interface=vlan840-tv threshold=1
alternative-subnets=193.0.0.0/8,81.0.0.0/8,172.0.0.0/8,80.0.0.0/8
upstream=yes source-ip-address=192.168.255.254 rx-bytes=2695867916
rx-packets=5151365 tx-bytes=0 tx-packets=0
1 interface=ether7-TV threshold=1 alternative-subnets="" upstream=no
querier=yes source-ip-address=192.168.42.254 rx-bytes=0 rx-packets=0
tx-bytes=2695867916 tx-packets=5151365
Seulement, avec l’IGMP Snooping activé sur un Netgear GS724T (ou modèle équivalent), si la fonctionnalité « IGMP Querier » n’est pas activé sur le switch, vous aurez toujours des coupures toutes les 4 minutes sur les chaines TV !
La complexité de l’IGMP Snooping d’un modèle à l’autre : attention à l’IGMP Querier sur un NetgearC’est pourquoi l’IGMP Snooping est pour moi compliqué à mettre en place. Comme il ne s’agit pas d’un standard chaque marque, modèle ou version implèmente cette fonctionnalité sous le même nom « IGMP Snooping » mais pas rigoureusement avec le même fonctionnement. Et certain détail ont toute leur importance !
En lisant les spécifications ou documentations techniques, on a beaucoup de mal à comprendre exactement comment cette fonctionnalité a été implèmenté. De plus en fonction du modèle, vous aurez plus ou moins de liberté quant au paramétrage.
Par exemple, sur le switch dans mon salon, un TP-Link SG108E (8 ports et manageable, série E = Easy Smart) on peut activer ou non l’IGMP Snooping et activer ou non le « Report Message Suppression » expliqué précédemment.
En clair on peut activer l’IGMP Snooping en mode passif ou actif au niveau global (et non sur un port ou VLAN particulier). Et rien à propos de l’IGMP Querier, les « Queries » sont forwardées à tous les ports du VLAN (et ce d’après mes expériences, car on ne trouve pas ce comportement décrit noir sur blanc).
Sur mon switch central, le Netgear GS724T c’est une autre histoire. Il faut d’abord activer la fonctionnalité au niveau global ce qui bloquera tout le trafic IGMP qui traverse le switch (là encore, ce n’est pas clairement expliqué, il faut le déduire).
Ensuite, il faudra activer le Snooping soit au niveau des ports ou soit au niveau des VLANs. Pour chaque port ou VLAN on pourra configurer les différents timeouts, le mode « fast-leave » (expliqué un peu plus bas), etc…
Les routeurs multicast sont détectés automatiquement par le switch lorsqu’il voit passer des « Queries IGMP ». Mon GS724T arrive bien à détecter (en moins de 60 secondes) le routeur multicast d’Orange sur le port « g1 » (où est connecté l’ONT) qui èmet une « Query » sur 224.0.0.1 toutes les 60 secondes mais par contre aucune détection de l’IGMP Proxy du routeur Mikrotik connecté sur le « g8 » (pourtant cette interface èmet bien une Query en 224.0.0.1). C’est assez obscure, la documentation precise seulement « If a multicast router is attached to the switch, its existence can be learned dynamically. You can also statically configure an interface as a multicast router interface, which is an interface that faces a multicast router or IGMP querier and receives multicast traffic ». Bon heureusement on peut définir explicitement les ports sur lesquels on a un routeur (ou proxy) multicast.
Bien qu’on puisse configurer beaucoup de paramètre en rapport avec l’IGMP sur le GS724T, rien à propos du mode actif/passif de l’IGMP Snooping. En clair il n’est possible d’activer ou non le « report suppression ». D’après mes tests (car encore une fois ce n’est pas explicitement décrit), ce mode est activé par défaut. En d’autre terme le GS724T réalise de l’IGMP Snooping en mode proxy reporting.
D’ailleurs en consultant des documentations techniques des autres modèles de la même gamme, on retrouve le GS108T (équivalent en 8 ports) qui propose les mêmes fonctionnalités mais qui dans sa 1ere version (de 2007) laissait la possibilité d’activer ou non ce mode « report suppression ».
Mais la « palme de l’ambiguïté » concerne l’IGMP Querier. Comme expliqué ci-dessus, sans IGMP Snooping, le visionnage des chaines TV depuis le décodeur Orange fonctionne parfaitement avec mon installation. Par contre avec l’IGMP Snooping activé sur mes deux switches (en configurant les VLANs « à snooper », en mode actif et routeur multicast proprement déclaré) on a une coupure du flux toutes les 4 minutes environ.
L’image se fige quelques secondes puis repart. Quatre minutes, ce qui correspond parfaitement au « Host timeout ». Il semble donc, qu’en l’absence de « Membership report » de la part du décodeur TV, le switch décide de couper la diffusion du flux « pensant qu’il n’y a plus personne ». Or si le décodeur n’èmet pas de « Membership report » c’est qu’il n’a pas reçu de « Query » laissant à supposer qu’il n’y a pas de requérant, rôle normalement assuré par le routeur Mikrotik.
Sans sortir un analyseur réseau type Wireshark pour analyser le trafic sur le port « ether7 » via un mirroring au niveau du switch, j’ai utilisé l’outil « Torch » intégré au routeur Mikrotik permettant d’avoir une idée du trafic réseau sur les interfaces du routeur.
Ainsi si on écoute le trafic sur le VLAN840 (en provenance d’Orange) et sur l’interface « ether7 » (interface locale) on retrouve toutes les 60 secondes un paquet IGMP envoyé depuis le réseau Orange (ici 172.28.99.118) sur l’adresse multicast 224.0.0.1 (qui correspond à « tout le monde ») et instantanèment dernière, on voit un package IGMP sur l’interface locale partir de notre routeur (192.168.42.254) vers tout le monde (224.0.0.1).
Je ne peux pas analyser le contenu du paquet directement depuis « Torch » mais tout laisse à penser qu’il s’agit là d’un « General Query ». D’après la RFC 2236 (le standard qui décrit l’IGMPv2) :
Routers periodically send a General Query on each attached network for which this router is the Querier, to solicit membership information. [….] A General Query is addressed to the all-systems multicast group (224.0.0.1) [….]
Avec cela j’en déduis donc qu’il y a bien un Querier sur le réseau local, notre Mikrotik assure ce rôle comme nous l’avons vu dans la partie précédente. Alors comment expliquer cette coupure dans le flux ? Si notre routeur, le Querier IGMP, envoie bien des « Membership Queries » sur 224.0.0.1, le décodeur TV devrait y répondre avec un « Membership Report » ce qui forcera le switch à mettre à jour sa table de mapping l’empêchant ainsi de le sortir du groupe après le délai d’expiration de 4 minutes !
Sur l’interface de configuration du Netgear GS724T on trouve bien une section dédiée à la configuration de l’ «IGMP Snooping Querier » et je répète IGMP Snooping Querier (et non d’IGMP Querier). Je ne sais pas si les deux sont identiques, la documentation n’est pas très claire. Le Querier ou requérant en français, est une notion propre à l’IGMP. Le Snooping en a besoin mais sans Snooping le Querier a aussi son importance pour savoir si des clients sont toujours abonnés à des groupes !
Alors comme vous allez le voir au chapitre suivant, pour que votre TV fonctionne sans aucune coupure, il faut activer « IGMP Snooping Querier » en spécifiant l’adresse IP de votre routeur multicast (ou plutôt le proxy IGMP, ici notre routeur Mikrotik).
Sur Wikipédia on peut lire à propos de l’IGMP Querier sur la page d’
IGMP Snooping Some IGMP snooping implementations include full querier capability. Others are able to proxy and retransmit queries from the multicast router
J’ai d’abord pensé que cette fonctionnalité sur le Netgear permettait d’activer un « IGMP Querier » complet (full) et je ne comprenais donc pas l’intérêt dans la mesure où mon routeur Mikrotik assurait déjà ce rôle ! Mais dans la documentation, une phrase m’a mis la puce à l’oreille :
Use this screen to enable or disable the IGMP snooping querier feature, specify the IP address of the router to perform the querying, and configure the related parameters
« Specify the IP address of the router to perform the querying » : pourquoi déclarer l’adresse IP du routeur multicast ? Mais surtout « to perform the querying », sous-entendu ce n’est pas le switch qui le fait ?
De ce fait en relisant la phrase sur Wikipedia, j’en ai donc déduit que le Netgear est un « proxy qui retransmet les queries du routeur multicast », d’où la nécessité de déclarer l’adresse du « Snooping Querier VLAN Address » bien que sa description n’est encore une fois pas très claire : « the snooping querier IP address to be used as the source address in periodic IGMP queries sent on the specified VLAN. ».
Bref après toutes ces déductions, recoupement d’information et de tests, les « Membership Queries » semblent bloquées par le GS274T ce qui nous oblige à activer explicitement l’«IGMP Snooping Querier » en spécifiant l’IP de notre routeur requérant pour que les queries se propagent bien dans le VLAN, forçant le décodeur TV et les autres abonnés à renvoyer des « reports » actualisant ainsi la table de mapping des switches ce qui empêchera les coupures de flux !
Cela parait logique en fin de compte, mais ça aurait été bien de pouvoir le lire noir sur blanc !
A noter que sur le TP Link SG108E, beaucoup plus simple, pas besoin de faire tout çà. Les Queries sont normalement propagées. Ainsi si j’active l’IGMP Snooping seulement sur ce switch et non pas sur le Netgear, tout marchait très bien sans aucun paramétrage !
C’est donc à voir au cas par cas, en fonction de chaque switch !