Endereços Multicast

Na Internet, a comunicação multicast é bastante usada, embora nem sempre os usuários finais saibam disso. Isso ocorre porque a maior parte do tráfego na Internet é realmente unicast (ou anycast, que é um tipo de unicast usado por sistemas globalmente espalhados). Contudo, quando falamos de redes locais de grande porte existe uma quantidade não-desprezível de tráfego multicast sendo trocado, principalmente entre equipamentos de rede como switches, pontos de acesso e roteadores.

Tenho uma aula em vídeo explicando como o roteamento multicast é feito nas redes IP e quais os principais algoritmos usados, mas neste artigo quero explicar como o endereçamento Multicast é definido. Em particular quero mostrar a relação do endereçamento IP, na camada de rede, com o endereçamento MAC, na camada de enlace.

Bom, independentemente do nível, em toda comunicação multicast e broadcast, o endereço de destino é um endereço de grupo. No caso do broadcast nos protocolos da família 802 usa-se sempre o endereço MAC FF:FF:FF:FF:FF:FF. Note que precisamos apenas de um único endereço, já que a comunicação broadcast nada mais é do que uma comunicação multicast onde existe apenas um "grupão" com todos os nós da rede.

Já no caso do multicast, o endereço e destino usado indica um grupo, de modo que os nós que participam da comunicação multicast possam separar o tráfego de cada grupo. No nível IP existem faixas de endereço reservadas para comunicação multicast, tanto no IPv4 quanto no IPv6. Alguns destes endereços são inclusive reservados para protocolos de roteamento unicast como OSPF ou EIGRP. Mais detalhes sobre a faixa de endereços usada e os endereços reservados para o IPv4 pode ser encontrada na RFC 5771.

Similarmente, no nível de enlace vários endereços foram reservados ao longo dos anos para comunicação multicast. Procure a tabela Some well known Ethernet multicast addresses no verbete Multicast Address na Wikipedia para ver uma lista dos endereços MAC reservados. A única coisa em comum entre estes endereços é que o bit menos significativo do primeiro byte é sempre 1. O que difere endereços multicast e unicast é justamente este bit, que no caso do unicast é 0.

Os demais bytes, no caso de MACs multicast, podem ser reservados de acordo com cada uso previsto. Um uso comum é para criar os endereços MAC de datagramas que sejam parte de um stream multicast. No caso de datagramas IPv4, por exemplo, usa-se os endereços MAC iniciados por 01:00:5E. Assim, o endereço MAC é definido inserindo, após a parte inicial, uma parte do endereço IPv4 (os 23 bits menos significativos do endereço IPv4, para ser exato).

Um ponto importante é que um hospedeiro, antes de receber qualquer dado de um stream multicast IP, deve entrar em um grupo de multicast a partir de um endereço multicast IPv4 (ou IPv6) específico (usando o protocolo IGMP). Portanto um hospedeiro "sabe" a que grupos pertence e quais MAC multicast deve aceitar.

Assim, quando um quadro Ethernet multicast chega em um switch ele é copiado em todas as portas, tal como um quadro broadcast (isso gera flood, quando o stream multicast é grande, mas pode ser reduzido configurando um grupo multicast no switch). Quando o quadro chega no hospedeiro, o hospedeiro checa se o MAC é do grupo multicast ao qual ele pertence (se pertencer a algum). Se for do grupo, então o datagrama será retirado do quadro e repassado para a camada de cima, senão for o quadro será descartado.

Se quiser ler um pouco mais sobre este assunto sugiro o texto Multicast - Understand how IP multicast works do site firewall.cx.

Comentários