Multicast to sposób przesyłania danych, w którym jeden nadawca wysyła jedną kopię pakietu, a sieć dostarcza ją tylko tym hostom, które zapisały się do konkretnej grupy odbiorców. Stoi pośrodku między unicast (jeden do jednego) a broadcast (jeden do wszystkich w segmencie). Zamiast wysyłać ten sam strumień osobno do każdego klienta albo zalewać nim całą sieć, nadajesz raz pod adres grupowy, a routery i switche same kopiują pakiet tam, gdzie ktoś faktycznie słucha.
Jak to działa
W IPv4 multicast korzysta z zakresu adresów 224.0.0.0/4 (czyli od 224.0.0.0 do 239.255.255.255). To nie są adresy konkretnych maszyn, tylko etykiety grup. Host, który chce odbierać dany strumień, zgłasza sieci zainteresowanie protokołem IGMP (w IPv6 odpowiednikiem jest MLD). Switche dzięki IGMP snooping wiedzą, na które porty pchać ruch, a routery budują drzewo dystrybucji protokołem PIM (Protocol Independent Multicast). Efekt: jedna transmisja zamiast setek identycznych kopii, co realnie odciąża łącze nadawcy i rdzeń sieci.
Najsensowniej wypada tam, gdzie ten sam strumień trafia do wielu odbiorców naraz: IPTV, transmisje wideo na żywo, notowania giełdowe, aktualizacje danych w systemach finansowych czy mechanizmy wykrywania usług w LAN-ie.
Przykład z praktyki
Klasyk to IPTV: dekodery zamiast pobierać film osobno, dołączają do grupy multicastowej kanału. Możesz to podejrzeć narzędziem iperf, generując strumień pod adres grupowy:
iperf -s -u -B 239.1.1.1 -i 1 po stronie odbiorcy oraz iperf -c 239.1.1.1 -u -T 32 -t 30 po stronie nadawcy. Na hoście z Linuksem aktywne grupy sprawdzisz przez ip maddr show, a podsłuchanie ruchu zrobisz przez tcpdump -i eth0 multicast.
Częste błędy i pułapki
Po pierwsze: multicast działa świetnie w LAN-ie, ale przez publiczny internet praktycznie się nie przebije — operatorzy go nie routują, więc do dostawy „jeden do wielu” w sieci globalnej i tak skończysz na unicaście, CDN-ie albo tunelach. Po drugie: brak IGMP snooping na switchu sprawia, że ruch grupowy zalewa wszystkie porty jak broadcast i niweczy cały zysk. Po trzecie: multicast jedzie po UDP, więc nie ma retransmisji ani gwarancji dostarczenia — zgubiony pakiet jest zgubiony na zawsze. I po czwarte, mit: adres grupowy to nie adres maszyny — nie pingniesz go ot tak licząc na odpowiedź konkretnego hosta.
Pojęcia powiązane
Unicast, broadcast, anycast, IGMP, MLD, PIM, IGMP snooping, UDP, IPTV, grupa multicastowa, zakres 224.0.0.0/4.