Camada de Rede
A Camada de Rede
Nesta camada, trabalha-se com o processo de encaminhamento de tráfego entre redes.
Para isso, usam-se equipamentos chamados routers (encaminhadores, em português) que são usados
para encaminhar o tráfego para o sítio certo.
Pode-se comparar o encaminhamento de tráfego a fazer uma viagem grande:
- Estradas: Os fios (ex. fios de cobre, fibra óptica, etc.) que levam o tráfego;
- Cruzamentos: Os routers, pois tem que ser tomada uma decisão de que caminho seguir;
- Mapa: A topologia da rede, que mostra todos os caminhos possíveis.
Nesta camada, diferente da camada de Aplicação e de Transporte, não são só os nós terminais que têm que interpretar os pacotes - os routers têm que implementar os protocolos de todas as camadas até à 3ª, de forma a perceberem suficientemente bem os pacotes para os conseguirem encaminhar.
Para ser possível fazer um envio de um pacote de um host A para um host B, existem dois desafios distintos:
- é necessário saber a topologia de rede para saber o caminho a seguir, ou seja, ter uma "vista aérea" do mapa de rede;
- cada router precisa de saber, quando recebe um pacote, para que porta o encaminhar.
Analogia
Se quisermos ir de Lisboa para Roma, temos que olhar para um mapa (topologia de
rede) e decidir o caminho que melhor se adequa (routing - escolher as rotas desde o
inicio até ao destino).
Depois, em cada cruzamento, temos que saber qual das alternativas tomar (forwarding - em cada um
dos routers, analiso o endereço IP do pacote e decido por qual dos caminhos
deve ser enviado).
Funcionamento de um Router
Para um router funcionar, é necessário considerar vários aspetos:
- Endereço IP e Subnetting - Um router tem que entender endereços IPs e Subnetting.
- Forwarding Table - Diz ao router por onde enviar os pacotes;
Datagram
Para além disso, é usado o paradigma Datagram - os pacotes são datagrams, ou seja, não existe relação entre pacotes e cada um é tratado independentemente dos outros, não existindo o conceito de sessão (connectionless).
Os datagrams têm o seguinte formato:
onde se destacam os campos:
- TTL - número de saltos entre routers que o pacote ainda pode dar.
- fragment offset - nas ligações mais problemáticas, convém trabalhar com pacotes mais pequenos, de forma a minimizar o erro. Pode ser necessário fragmentar numa parte do caminho, partindo em fatias pequenas (datagrams mais pequenos). Para saber que as fatias são do mesmo datagram, estas têm o mesmo identificador. Para saber a ordem das fatias, usa-se então o fragment offset, que indica a ordem. O último fragmento tem uma flag que diz que é o último.
Endereços IP e Subnetting
Cada um dos computadores que se liga a uma rede tem que ter um endereço IP. Um router faz a ligação entre subredes diferentes. Por exemplo,
No exemplo, existem 3 subredes e o router faz a ligação entre elas.
Interface - Conexão entre um host/router e um meio físico (tomada RJ-45, "tomada" de fibra óptica, ...).
Tipicamente, os hosts têm só uma interface enquanto que os routers têm várias.
Cada interface tem um endereço IP associado.
Subnetting
Um endereço IP pode ser dividido em duas partes:
- a primeira parte, chamada de Network ID, identifica em que rede um computador se encontra;
- a segunda parte, chamada de Host ID, identifica, dentro da rede, a qual dos hosts é que o IP se refere.
Se esta divisão for feita, existe uma melhor organização dos endereços IPs e consequentemente, os routers vão conseguir ser mais eficientes a encaminhar o tráfego.
Analogia
Para melhor entender esta comparação, podemos pensar numa morada:
Lisboa, Rua João Pedro, bloco 8, casa 51
Do endereço, podemos fazer várias divisões que o continuam a identificar inequivocamente, mas que têm significados diferentes e podem fazer mais sentido para entidades diferentes:
- Para o correio, pode fazer mais sentido dividir o endereço em
Lisboa, Rua João Pedro
ebloco 8, casa 51
pois os carteiros são atribuídos por ruas; - Para uma transportadora internacional, pode fazer mais sentido dividir em
Lisboa
eRua João Pedro, bloco 8, casa 51
, pois só lhe interessa entregar o produto a uma distribuidora mais local;
Para identificar a divisão de um IP, usa-se o conceito de subnet mask (máscara de rede) - um endereço com o formato
exatamente igual ao do endereço IP que indica quais os bits do IP que representam a rede.
A forma como se determinam as duas partes do endereço é através de um AND lógico.
Exemplo
Considere-se o seguinte IP e a seguinte Subnet Mask:
- IP =
123.221.222.68
- Subnet Mask =
255.255.255.0
Para determinar a subrede e o host da subrede do endereço IP,
- Transforma-se o IP para bits:
01111011.11011101.11011110.01000100
- Transforma-se a Subnet Mask para bits:
11111111.11111111.11111111.00000000
- A Subnet Mask tem os 24 primeiros bits "ligados". Isto significa que os primeiros 24 bits do IP representam a subrede. Os restantes bits (32 - 24 = 8) representam o host.
Portanto, dados esses IP e subnet mask, estamos a falar da subrede 01111011.11011101.11011110.00000000
= 123.221.222.0
e do host 01000100
= 68
dessa subrede.
Ou seja, determina-se a subrede olhando para o número de bits a 1 que a Subnet Mask tem.
Estes bits indicam qual a parte do endereço IP que representa a subrede.
Os restantes bits dizem qual o host dentro da subrede.
Com esta máscara, um host consegue decidir se uma mensagem destinada a um determinado IP deve ser entregue diretamente ao destinatário (pois os hosts estão na mesma rede), usando os endereços MAC e o protocolo da camada de Ligação de Dados, ou se deve ser entregue ao encaminhador (através da default gateway) para a fazer chegar à subrede de destino (pois os hosts estão em redes diferentes);
CIDR - Classless InterDomain Routing
Devido ao uso da máscara de rede não ser direto, criou-se uma nova notação - CIDR.
Visto que o interessante de uma máscara são o número de bits ligados (n
), esta quantidade pode
ser representada ao lado de um endereço IP (a.b.c.d
) da seguinte forma:
a.b.c.d/n
Para o exemplo apresentado anteriormente, a máscara de rede 255.255.255.0
tem 24 bits ligados,
por isso, para o endereço IP 123.221.222.68
, sabe-se que os 24 primeiros bits representam a rede
e os 8 bits restantes representam o host, podendo tudo ser representado da forma 123.221.222.68/24
.
IPs especiais
No exemplo apresentado acima, a rede era representada por 24 bits, ou seja, existiam
bits para representar os hosts dessa rede.
Isso implica que existam hosts possíveis para essa rede.
Contudo, para cada rede, existem dois hosts que não podem ser usados:
- o primeiro host da rede - serve para identificar a subrede (e.g.
123.221.222.0
); - o último host da rede - endereço de broadcast. Quando um pacote é enviado para este endereço, todos os hosts da subrede o recebem (e.g.
123.221.222.255
);
Para além disso, um dos hosts terá que ser o router, portanto, na realidade, para cada subrede, existem sempre 3 endereços reservados.
Finalmente, os endereços começados por 127
(127.0.0.0/8
ou, em intervalo: 127.0.0.0
- 127.255.255.255
) representam o localhost - a nossa própria máquina.
Apesar dela ter um endereço IP próprio, estes endereços também servem para a identificar.
Addressing Hierárquico
Apesar do apresentado acima, existe outra possibilidade que se pode fazer com endereços IP - subdividi-los ainda mais.
Como é que, para um dada instituição, é atribuída uma gama de endereços, ou seja, uma subrede para ela poder usar?
É o ISP (Internet Service Provider) que fornece um bloco de endereços de IP para a instituição/empresa usar.
Exemplo
Imagine-se que foi criada a IST (Instituição Super Trivial) e que esta precisa de endereços IP para dar aos diversos núcleos que nela vão existir.
Esta pede à sua ISP alguns endereços IP e, então, a ISP fornece os endereços 12.0.0.0/8
, ou seja, o intervalo de endereços entre 12.0.0.0
e 12.255.255.255
.
A IST fica, depois, encarregue da gestão destes endereços, precisando de ter em conta as necessidades dos seus núcleos:
- O núcleo A tem muita gente, então a IST fornece os endereços
12.128.0.0/9
, ou seja, de12.128.0.0
até12.255.255.255
(em bits,00001100.1 0000000.00000000.00000000
até00001100.1 1111111.11111111.11111111
). Este núcleo ficou com metade dos endereços disponíveis; - O núcleo B tem 5 pessoas, então a IST fornece os endereços
12.0.0.0/29
, ou seja, de12.0.0.0
até12.0.0.7
(em bits,00001100.00000000.00000000.00000 000
até00001100.00000000.00000000.00000 111
). Foram dados 8 IPs mas, como 3 não podem ser atribuídos a hosts, o núcleo só tem efetivamente 5 IPs.
Quando alguém na Internet quiser falar com o IP 12.0.0.5
, o tráfego vai funcionar
da seguinte forma:
Este esquema assemelha-se ao DNS na forma como os pedidos são distribuídos entre entidades mais locais até entidades mais gerais.
Forwarding Table
De forma a saber encaminhar pacotes, um router precisa de uma Forwarding Table (tabela de expedição) que diz, para um dado endereço IP, por que porta do router encaminhar.
Para construir esta tabela, são necessários algoritmos de expedição.
Alternativamente, um controlador remoto, com maior poder computacional, pode computar as forwarding tables e enviá-las para os routers.
Segue-se um exemplo de tabela:
Linha | Subnet | Máscara de rede | Custo de envio | Interface | Próximo router |
---|---|---|---|---|---|
1 | 128.171.0.0 | 255.255.0.0 (/16) | 47 | 2 | G |
2 | 172.30.33.0 | 255.255.255.0 (/24) | 0 | 1 | Local |
3 | 192.168.6.0 | 255.255.255.0 (/24) | 12 | 2 | G |
4 | 0.0.0.0 | 0.0.0.0 (/0) | 5 | 3 | H |
Para saber por onde enviar um dado endereço IP, o router:
- Aplica-lhe a máscara de rede para saber qual a sua network;
- Percorre a tabela, comparando a máscara de rede com as que ele conhece;
- Se encontrar pelo menos um match, envia o pacote para a subnet mais específica;
- Se não encontrar, envia para a default route, que é o caminho para um router mais genérico (neste caso, linha 4). Esta rota é representada pela máscara
0.0.0.0
, por isso, qualquer endereço consegue fazer match.
Forwarding
O pseudo-algoritmo do router para fazer forwarding de um pacote é o seguinte:
- Aplicar a máscara ao endereço IP de destino
- Para cada linha da tabela:
- Comparar a rede de destino com a máscara desta linha
- Se forem iguais, adicionar esta linha à lista de candidatos para encaminhar o pacote;
- Se não, ignorar esta linha;
- Escolher o caminho mais específico (mais longo):
- Se só existir um match, escolher esse;
- Se só existir um match com um caminho mais específico, escolher esse;
- Se existirem vários matches com a mesma especificidade, escolher a linha com a menor métrica.
- Enviar o pacote para a interface de rede (Pode ser um outro router ou o destinatário final).
DHCP - Dynamic Host Configuration Protocol
Como é que um host recebe um endereço IP? O que garante que não existem dois IPs iguais? Como é que é feita toda a gestão dos endereços?
A resposta a estas perguntas é o DHCP (Dynamic Host Configuration Protocol), que permite aos hosts obterem um endereço IP dinamicamente (sem o utilizador ter que o configurar manualmente) quando se juntam a uma rede.
Para isto acontecer, existe um serviço de DHCP a correr num servidor na rede. Este serviço vai responder a pedidos de atribuição de IPs e vai fazer a gestão automática dos endereços.
São usados 4 comandos para a comunicação:
DHCP discover
- O cliente envia este comando para o endereço de broadcast da rede (último host da subrede);DHCP offer
- O servidor de DHCP recebe o pedido e responde com um endereço IP;DHCP request
- O cliente vê o IP que lhe pode ser atribuído e pede-o ao servidor (ainda em broadcast);DHCP ACK
- O servidor regista o endereço na sua base de dados e avisa o cliente que pode ficar com ele.
Um exemplo da interação é o seguinte:
Os portos normalmente usados para o DHCP são o 67 do lado do cliente (para o servidor enviar as respostas) e o 68 do lado do servidor (para o cliente enviar pedidos).
Leasing
Os endereços IP não ficam eternamente associados a um host, tendo uma duração máxima definida (normalmente uma hora).
Passado esse tempo, o host deve deixar de usar o endereço e pedir um novo, refazendo o processo mostrado em cima.
Contudo, o cliente pode pedir para renovar o endereço IP. Tal pode ser efetuado nos seguintes momentos:
- 50% do Lease Time - O cliente pede ao servidor DHCP para renovar o endereço IP;
- 85% do Lease Time - Se o pedido anterior não foi aceite, o cliente volta a fazer o pedido.
- 100% do Lease Time - Se o pedido anterior não foi aceite, o cliente volta a fazer o pedido.
Numa renovação (renew), não é necessário voltar a efetuar discover/offer, dado que já sabemos a que servidor DCHP queremos fazer o pedido e que endereço IP queremos pedir. Somente no caso desde pedido ser recusado é que voltamos a iniciar o processo.
Encaminhamento
Agora, iremo-nos focar em como o encaminhamento é feito.
Para isso, é necessário conhecer alguns conceitos:
Endereços IP privados
De todos os endereços IP, existe um conjunto de endereços que são privados, ou seja, eles são apenas conhecidos localmente (só o router e a rede local é que conhecem estes endereços).
Existem três gamas de IPs privados:
Primeiro IP | Último IP | Representação CIDR | Quantidade de Hosts |
---|---|---|---|
10.0.0.0 | 10.255.255.255 | 10.0.0.0/8 | 16.777.214 () |
172.16.0.0 | 172.31.255.255 | 172.16.0.0/12 | 1.048.574 () |
192.168.0.0 | 192.168.255.255 | 192.168.0.0/16 | 65.534 () |
Por exemplo, o endereço IP 10.0.0.1
, que é privado, na empresa A pode ser o endereço do servidor
DHCP, na empresa B o computador de trabalho de um trabalhador e na empresa C não estar associado a
nenhum host.
Já o endereço 11.0.0.1
, que é público, tem apenas um host associado em todo o mundo e qualquer pessoa
pode comunicar diretamente com ele.
NAT - Network Address Translation
Numa rede local onde se ligam vários hosts (Ex. casa, escola, universidade, empresa, etc.), o ideal seria todos os hosts terem um endereço IP público.
Contudo, devido à sua escassez, a medidas de segurança, e a facilidades de gestão, isso não é feito.
Para resolver isso, os routers implementam NAT (Network Address Translation) - uma forma de mapear um endereço público para vários endereços privados, implementando essa lógica com portos.
O mapeamento é guardado na NAT translation table, guardando entradas do tipo (IpRouter
, PortoRouter
, IpPrivado
, PortoPrivado
), ou seja, quando um pacote for recebido no endereço IpRouter
para o porto PortoRouter
, o router irá convertê-lo para o IP IpPrivado
e para o porto PortoPrivado
.
Para isto ser possível, o router necessita de ter associado um endereço público.
Exemplo
Considerando uma rede privada, onde o processo X a correr no porto 123
do host A com IP 172.16.10.10/12
quer enviar um pacote para o processo Y do host B. Nesta rede, existe um router que tem o serviço NAT e com endereço público 12.12.12.12
e privado 127.16.10.13
.
- Quando X quer enviar o pacote, o host A tem que preencher o pacote com o IP e porto de origem: (
172.16.10.10
,123
). O pacote é então enviado para o router; - O router repara que o endereço de origem é privado, por isso associa o IP e o porto a uma porta sua e guarda esse mapeamento na sua tabela de tradução. Depois, troca os campos do pacote para o seu IP e para o porto associado e envia o pacote;
- O router recebe um pacote com o seu IP e com um porto de destino específico. Então, consulta a tabela e verifica qual o real destinatário do pacote;
- O router troca novamente os campos e reencaminha para o host certo.
Um exemplo desta interação é o seguinte:
Problema de travessia NAT
E se um cliente se quiser ligar a um servidor que tem o endereço 10.0.0.1 (ou seja, que está numa rede privada)?
O que foi apresentado anteriormente, funciona se for um host de dentro da rede a enviar primeiro um pacote para fora da rede (e esperar pela sua resposta). Contudo, existe um problema se o objetivo de um host dentro da rede for receber pedidos e responder a eles (e.g. um servidor).
Para resolver isso, existem algumas opções:
- configurar estaticamente o NAT - Desta forma, as solicitações de conexão de entrada são encaminhadas numa determinada porta para o servidor. Por exemplo, o pacote (
123.76.29.7
,2500
) é sempre encaminhado para a porta25000
do IP10.0.0.1
; - UPnP (Universal Plug and Play) e protocolo IGD (Internet Gateway Device) - permite que um host da rede aprenda o endereço IP público do router e adicione/remova mapeamentos de porta com prazos de locação, automatizando a configuração de mapa de porta NAT estático.
- Relaying (utilizado no caso do Skype) - o cliente NAT estabelece uma conexão com o Relay, funcionando como um intermediário. Um cliente externo conecta-se ao Relay e este encaminha os pacotes entre as duas conexões.
Endereços IPv6
Devido à escassez de endereços IPv4, surgiu uma nova versão deste protocolo - IPv6, que inclui endereços com 128 bits e que são, portanto, muito maiores do que os endereços IPv4, que tinham apenas 32.
Estes endereços trazem algumas mudanças, nomeadamente:
- A verificação de erros deixa de existir - devido ao uso de fibra óptica e da realização de outras melhorias, a frequência de erros desceu drasticamente e, assim, o processamento passou todo para as extremidades da rede;
- Pela mesma razão, a funcionalidade de fragmentação ficou a cabo de quem envia os pacotes. Isto tira um peso dos routers;
- Todos os routers têm que ser capazes de enviar, no mínimo, 1280 bytes em cada pacote.
Problema de Transição
A transição de IPv4 para IPv6 envolve considerações sobre como a rede funcionará com routers mistos de IPv4 e IPv6, já que nem todos os routers podem ser atualizados simultaneamente.
Uma solução é o uso de um "stack duplo", onde alguns routers podem traduzir entre cabeçalhos IPv4 e IPv6.
Outra opção é o tunneling, onde o IPv6 é transportado como payload num
datagrama IPv4 entre routers IPv4. O tunneling envolve o encapsulamento do
datagrama IPv6 num datagrama IPv4 para permitir que ele seja encaminhado por
uma rede IPv4.
Por exemplo,
Algoritmos de Routing
Os routers podem estar conectados a uma SDN (Software Defined Network). A SDN faz o cálculo de rotas e constrói as Forwarding Tables e, assim, os routers apenas têm que se preocupar com o encaminhamento.
Contudo, nem sempre é esse o caso e, muitas vezes, precisam de ser os routers a construir as Forwarding Tables.
Para simplificar isso, pode-se visualizar a topologia de rede como grafos:
Desta forma, associando um peso a cada ligação, podemos aplicar os algoritmos de grafos aprendidos anteriormente.
Existem duas classes de algoritmos:
Globais vs Descentralizados
- Globais - os routers sabem a topologia completa de rede e o custo de ligação (algoritmos Link State);
- Descentralizados - os routers comunicam apenas com os vizinhos, em processos iterativos de computação (algoritmos Distance Vector).
Estáticos vs Dinâmicos
- Estáticos - As rotas variam muito pouco ao longo do tempo;
- Dinâmicos - As rotas variam com frequência, o que implica atualizações periódicas devido a alterações de custo.
Algoritmo Link State
Neste tipo de algoritmos, é conhecido o estado total da rede.
Para isso, usando a notação de grafos, podemos utilizar o algoritmo de Dijkstra.
Usando o algoritmo de Dijkstra, conseguimos obter a árvore dos caminhos mais curtos (ou seja, sabemos o caminho mais curto para qualquer router da rede)
Um exemplo da execução deste algoritmo pode ser visualizado de seguida:
Algoritmo Distance Vector
Neste tipo de algoritmos, a comunicação é feita apenas com os vizinhos.
Para isso, usando a notação de grafos, podemo-nos basear no algoritmo de
Bellman-Ford.
Usando o algoritmo de Bellman-Ford, cada router sabe o custo do caminho para se ligar aos vizinhos e o custo que os vizinhos já têm acumulados.
Contudo, devido às alterações de custo que podem existir na rede, cada nó envia
de tempo em tempo a sua estimativa de distance vector aos vizinhos.
Estes atualizam o seu próprio distance vector usando a equação de Bellman-Ford:
Um exemplo da execução deste algoritmo pode ser visualizado de seguida:
Sistemas Autónomos
Até agora, o estudo de routing (encaminhamento) foi baseado numa idealização de que todos os routers são idênticos e a rede é "plana", o que não é verdade na prática.
Uma solução para este problema é o routing hierárquico, onde os routers são agregados em regiões chamadas AS (Autonomous Systems):
- Os routers dentro do mesmo AS executam o mesmo protocolo de routing (protocolo intra-AS);
- Os routers em diferentes AS podem executar diferentes protocolos intra-AS, desde que comuniquem com protocolos inter-AS bem estabelecidos.
Hierarchical Routing
Pode-se pensar num esquema hierárquico - A entrega é primeiro feita ao AS e este é que faz a entrega para a rede de destino, usando o protocolo que entender.
Desta forma, o tamanho das tabelas de routing pode ser consideravelmente reduzido.
Protocolos de routing Intra-AS
Existem protocolos bem definidos para comunicação dentro de AS. Estes protocolos também são conhecidos como IGP (Interior Gateway Protocols).
Os mais comuns são:
- RIP - Routing Information Protocol;
- OSPF - Open Shortest Path First;
- IGRP - Interior Gateway Routing Protocol (Proprietário da Cisco).
RIP - Routing Information Protocol
Este algoritmo usa um algoritmo Distance Vector, em que a distância é
medida em hops (número de saltos) entre as redes, sendo 16 o número máximo de
saltos.
Os distance vectors são partilhados em intervalos de 30s com os vizinhos,
através de um advertisement.
O RIP possui uma tabela de roteamento que é atualizada periodicamente com base em informações recebidas de outros routers na rede. Se um router não receber mensagens de um vizinho por 180 segundos, ele considera a conexão como falhada e atualiza a sua tabela de roteamento para refletir isso.
O RIP também usa uma técnica conhecida como "envenenamento reverso" para evitar loops de roteamento. As mensagens de roteamento do RIP são enviadas em pacotes UDP na porta 520.
Um exemplo deste protocolo pode ser visto neste video:
OSPF - Open Shortest Path First
Este algoritmo usa um algoritmo Link State e permite ter uma relação hierárquica, ou seja, permite ter ASs dentro de ASs.
Um exemplo deste protocolo pode ser visto neste video:
RIP vs OSPF
RIP é mais apropriado para redes mais pequenas, pois:
- É mais fácil de implementar;
- 15 hops não é um problema para redes pequenas;
- Faz sentido usar Distance Vector.
OSPF é mais escalável, pois:
- Funciona com redes de qualquer dimensão;
- Mais eficiente em redes maiores do que RIP;
- Pela dimensão, faz sentido usar Link State.
BGP - Protocolo de routing Inter-AS
O protocolo BGP (Border Gateway Protocol) é "a cola que mantém a Internet
unida", pois é bastante importante e vastamente utilizado.
Ele permite que uma subrede anuncie a sua existência e os destinos que ela pode alcançar para o resto da Internet.
O BGP fornece a cada AS:
- uma maneira de obter informações de alcançabilidade de subredes de ASs vizinhos, através do eBGP (External BGP);
- uma maneira de propagar essas informações para todos os routers internos do AS, através do iBGP (Internal BGP);
- mecanismos para determinar "boas" rotas para outras redes com base nas informações de alcançabilidade e políticas.
Básicos de BGP
- Sessão de BGP - Pares de routers BGP trocam mensagens BGP numa conexão TCP semi-permanente;
- Mensagens BGP - Existem quatro mensagens que podem ser trocadas:
OPEN
: abre uma conexão TCP para outro router BGP;UPDATE
: avisa a existência de um novo caminho ou remove antigo;KEEPALIVE
: avisa que a ligação ainda se mantém ativa, por não terem existido updates;NOTIFICATION
: avisa que existiram erros na última mensagem ou avisa que a conexão é para ser fechada.
Um exemplo da utilização de BGP pode ser visualizado aqui:
A Cloudflare publicou um artigo sobre a outage do Facebook em outubro de 2021, que aborda tanto BGP como DNS.
Broadcast e Multicast
Broadcast
O objetivo de um broadcast é enviar um pacote para todos os outros nós da rede.
Contudo, fazer um broadcast pode gerar problemas entre routers, por exemplo:
Nesta situação, existe um anel que fará com que o pacote seja enviado de volta para routers que já o receberam - a este problema chama-se Flooding.
Para o resolver, um nó só faz broadcast de um pacote, se ainda não fez broadcast desse mesmo pacote (Os routers guardam os identificadores dos pacotes) - Controlled Flooding.
Outra alternativa seria construir uma Spanning Tree - árvore que cobre todos os routers com o menor número de ligações e sem loops.
Multicast
O objetivo de um multicast é uma mensagem ser entregue a um grupo de destinatários específico.
Para isso, podem-se criar Spanning Trees que permitam ligar todos os destinatários.