# Internet group management protocol

Het Internet Group Management Protocol (IGMP) is een netwerkprotocol dat gebruikt wordt bij multicasting. Multicast streams maken gebruik van klasse-D IP-adressen en met IGMP wordt beheerd welke 'volgers' er zijn per multicast IP-adres. IGMP maakt het mogelijk voor routers om de multicast streams efficiënt te verwerken.
IGMP wordt gebruikt op de netwerklaag van het OSI-model en wordt alleen gebruikt op IPv4 netwerken.

## Versies

Er bestaan momenteel drie versies van IGMP. Deze staan elk beschreven in een Request for Comments (RFC) document van de Internet Engineering Task Force (IETF).
* IGMPv1 staat beschreven in RFC 1112.
* IGMPv2 staat beschreven in RFC 2236.
** Bij deze versie is er ingevoerd dat wanneer een groepslid zijn groep verlaat, het onmiddellijk wordt gemeld aan het routing protocol. Dit is veel efficiënter bij multicast groepen met een hoge bandbreedte en/of subnetten met een snel veranderende groepsgrootte.
* IGMPv3 stond eerst beschreven in RFC 3376, maar staat nu samen met MLDv2 beschreven in RFC 4604.
** Bij deze versie is er ondersteuning voor "source filtering" ingevoerd. Dit zorgt ervoor dat een host kan aangeven of het pakketten wil ontvangen of filteren van specifieke adressen binnen de multicast groep.
Bij IPv6 netwerken wordt er gebruikgemaakt van Multicast Listener Discovery (MLD). Dit werkt met ICMPv6 berichten in plaats van IGMP-berichten.

## Multicast versus unicast en broadcast

IGMP is inherent verbonden aan multicast. Multicast-datastromen maken gebruik van 'doeladressen' in klasse D. Dit zijn IP-adressen in het bereik van 224.0.0.0 tot 239.255.255.255, zoals 224.2.25.69. Bij unicast daarentegen wordt gecommuniceerd met een IP-adres van een geldige host op het netwerk. Bij broadcast worden specifieke broadcastadressen gebruikt, zoals 192.168.0.255.

## Werking IGMP

Een gebruiker abonneert zich op een multicast stream door een IGMP-bericht te sturen met het IP-adres van de multicast stream die het wil volgen. Echter, de multicast-datastroom is eenrichtingsverkeer beginnend bij een video-server en eindigend bij een client. De multicast stream wordt over het netwerk verzonden naar de dichtstbijzijnde router. Vervolgens beslist de router of de pakketten doorgestuurd moeten worden of dat ze gedropt mogen worden op basis van de volgers van de stream. Hiervoor gaat de router eerst controleren of de multicast groep al bestaat. Indien de groep bestaat, stuurt de router de pakketten door naar de hosts van die groep. Indien de groep niet bestaat, maakt het de groep aan. Als er echter geen hosts zijn die aan de router vragen om pakketten te ontvangen van deze groep, dropt het de pakketten.

### Voorbeeld

Hieronder is een voorbeeld zichtbaar van een netwerk dat gebruikmaakt van multicasting aan de hand van IGMP.
De video client gaat eerst een toegewijd multicast IP-adres versturen naar alle routers in zijn subnet. Dit IP-adres is een bericht dat zegt dat de client lid wil worden van een multicast groep. Als de router in het subnet de groep herkent, gaat het de datastroom afkomstig van de video server beginnen doorgeven aan de video client. Indien de router het subnet niet herkent, gaat het berichten uitsturen naar andere routers om zo de groep te vinden. De communicatie tussen de routers gebeurt via routing protocollen die zijn aangepast voor het gebruik met IGMP, zoals Protocol Independent Multicast (PIM) en Multicast Open Shortest Path First (MOSPF). Deze zorgen er ook voor dat de datastroom kan doorgegeven worden van de router naar de multicast router en zo naar meerdere multicast clients. Wanneer de multicast groep gevonden wordt door een andere router, gaat deze router zogezegd als video server dienen en de datastroom doorgeven of ze dupliceren en dan doorgeven.
Switches die uitgerust zijn met IGMP snooping gaan de IGMP conversaties tussen hosts en routers afluisteren. Hierdoor kan de switch een map bijhouden waarin staat welke verbinding welke IP multicast datastroom nodig heeft. Dit zorgt er dus voor dat multicast datastromen gefilterd kunnen worden van de verbindingen die ze niet nodig hebben en er dus gecontroleerd kan worden welke poorten specifiek multicast verkeer ontvangen.

## Toepassingen

De voornaamste toepassingen die gebruikmaken van IGMP zijn:
* Streaming media
* Online gaming
Beide toepassingen moeten lange tijd veel en dezelfde data verzenden naar meerdere gebruikers waardoor het gebruik van multicasting via IGMP veel efficiënter is tegenover een unicast methode.

## Gevaren

IGMP is kwetsbaar voor sommige netwerk aanvallen, zoals spoofing en Denial-of-Service aanvallen.
DoS aanvallen kunnen voorkomen worden indien het netwerk beschikt over switches die uitgerust zijn met IGMP snooping. Dit zorgt ervoor dat hosts geen dataverkeer kunnen ontvangen van een multicast groep waar ze niet expliciet lid van zijn geworden.
De beste manier om spoofing tegen te gaan, is door het gebruik van een firewall.
Indien er geen gebruik wordt gemaakt van IGMP of MLD in het netwerk, is het mogelijk om het netwerkverkeer hiervan te laten blokkeren door de firewall.
* (en) RFC 1112: Host Extensions for IP Multicasting obsoleted RFC 988 and RFC 1054
* (en) RFC 2236: Internet Group Management Protocol, Version 2 obsoleted RFC 1112
* (en) RFC 3376: Internet Group Management Protocol, Version 3 obsoleted RFC 2236
* (en) RFC 4604: Using Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Protocol Version 2 (MLDv2) for Source-Specific Multicast obsoleted RFC 3376
* ↑ RFC 1112
* ↑ RFC 2236
* ↑ RFC 3376
* ↑ RFC 4604
* ↑ (en) Spoofing vulnerability: Microsoft Security Bulletin MS08-001:
* ↑ (en) DoS vulnerability: Microsoft Security Bulletin MS06-007:. Gearchiveerd op 16 december 2013.