O tráfego IP multicast tem regras diferentes do tráfego unicast ou de difusão comum. Um endereço IP multicast nunca é usado como um endereço de origem: é sempre apenas um endereço de destino. Um sistema que está enviando multicasts usará seu endereço IP regular como o endereço de origem. Cada endereço IP multicast designará um grupo multicast : qualquer coisa enviada para esse endereço multicast será recebida por todos os hosts pertencentes a esse grupo. (Ou essa é a teoria. Na prática, a menos que você tenha tomado providências específicas para rotear multicasts além de sua sub-rede ou organização, o tráfego multicast tende a parar nesses limites por padrão.)
Quando algum software em um host deseja receber tráfego multicast, ele informará ao kernel do host "Desejo receber multicasts endereçados a este endereço IP multicast". O kernel adicionará então esse endereço IP multicast à lista de endereços multicast que ele escutará e enviará uma mensagem de relatório IGMP: "Desejo receber tráfego multicast endereçado a esses IPs multicast:". Este relatório IGMP é em si uma mensagem IP multicast. No Linux, o IGMP é tratado no nível do kernel: é por isso que você não vê nenhum processo responsável por ele.
Roteadores com capacidade de difusão seletiva enviam periodicamente (geralmente a cada 60 segundos) mensagens de consulta IGMP, essencialmente: "Para todos os sistemas neste segmento: informe agora se você ainda estiver interessado em qualquer tráfego multicast." Esta é também uma mensagem IP multicast, enviada para 224.0.0.1 = all-systems.mcast.net. Isso é provavelmente o que o seu roteador está enviando. Como o nome DNS dado a esse endereço implica, todos os hosts compatíveis com multicast devem sempre ouvir o tráfego multicast endereçado a 224.0.0.1.
Um host com capacidade para multicast deve enviar um relatório IGMP em duas situações:
- quando deseja iniciar ou parar de ouvir o tráfego endereçado a um determinado IP multicast ou
- quando recebe uma mensagem de consulta IGMP.
Normalmente, o kernel do host manipula isso automaticamente. No Linux, você pode usar cat /proc/net/igmp
para ver quais IPs de multicast que seu sistema está ouvindo atualmente em cada interface de rede. Infelizmente, os IPs multicast são reportados em hexadecimal e a ordem de bytes é invertida a partir do formato usual de endereço IP: por exemplo, 224.0.0.1 é apresentado como "010000E0"; 224.0.0.251 é "FB0000E0".
Um roteador com capacidade para multicast enviará consultas IGMP para cada segmento de rede do qual faz parte e acompanhará os relatórios IGMP obtidos como resposta. É assim que se sabe se o tráfego multicast para algum endereço IP multicast precisa ser roteado de um segmento de rede para outro.
Exceção: se já houver outra fonte se o IGMP consultar um segmento e ele tiver um endereço IP de origem mais baixo que esse roteador, esse roteador não enviará consultas e, em vez disso, apenas escutará. Ele pode tentar se comunicar com a outra fonte de consulta IGMP usando algum protocolo de roteamento multicast para coordenar o tráfego multicast entre roteadores.
Se um host com capacidade para multicast não responder a três consultas IGMP consecutivas (ou seja, 180 segundos), o roteador assumirá que o host não está mais interessado em nenhum tráfego multicast. Isso limpa todos os fluxos de multicast desnecessários se um host for reinicializado, perder energia ou perder a conectividade de rede.
Em uma rede Wi-Fi doméstica simples, o multicast é de utilidade limitada: qualquer grupo de hosts em uma rede Wi-Fi ainda consumirá a largura de banda de rádio compartilhada de todos, seja por usar multicast ou simplesmente por difusão. Mas em uma rede com fio, ou em uma malha de rede Wi-Fi, o multicast permite que switches e / ou APs monitorem as mensagens IGMP e, assim, saibam se um determinado pacote multicast precisa ser enviado para uma porta de switch ou célula Wi-Fi específica. não. Isso economiza largura de banda para aqueles que não estão interessados em um determinado multicast, em detrimento de mais trabalho para switches / APs. Esse recurso é conhecido como "snooping IGMP".