ARP & Tabela ARP
Resolução de Endereços e Proxy ARP
O que é ARP?
O Address Resolution Protocol (ARP) mapeia endereços IPv4 (32 bits) para endereços MAC (48 bits) na Camada de Enlace, dentro de uma mesma sub-rede (Kurose 4.3; Tanenbaum 5.5.2). Ele é essencial para enviar pacotes Ethernet em uma LAN, como a VLAN 10 da Aula 3 (`192.168.10.0/24`).
Processo ARP:
- PC1 (`192.168.10.1`) quer enviar um pacote para PC2 (`192.168.10.2`), mas só conhece o IP.
- PC1 envia um ARP Request em broadcast (MAC destino:
ff:ff:ff:ff:ff:ff
): "Quem tem192.168.10.2
?" - PC2 responde com um ARP Reply (unicast), informando seu MAC (e.g.,
00:1A:2B:3C:4D:5E
). - PC1 armazena o par IP↔MAC na tabela ARP e envia o pacote Ethernet.
ARP Request: "Quem tem 192.168.10.2?" (Broadcast)
PC2 (192.168.10.2, 00:1A:2B:3C:4D:5E):
ARP Reply: "Eu, meu MAC é 00:1A:2B:3C:4D:5E" (Unicast)
Nota: ARP opera na Camada de Enlace, mas usa IPs da Camada de Rede (Aula 4), conectando hosts na mesma sub-rede (e.g., `192.168.10.0/24`).
Estrutura do Pacote ARP
• Protocol Type: IPv4 (0x0800)
• Hardware Size: 6 bytes (MAC)
• Protocol Size: 4 bytes (IPv4)
• Opcode: 1 (Request) ou 2 (Reply)
• Sender MAC/IP: MAC e IP do remetente (e.g., 00:11:22:33:44:55, 192.168.10.1)
• Target MAC/IP: MAC (desconhecido no Request) e IP do destino (e.g., 192.168.10.2)
Tabela ARP
A tabela ARP (cache) armazena pares IP↔MAC para evitar ARP Requests repetitivos. Entradas expiram após 5–20 minutos, dependendo do sistema, para refletir mudanças na rede (Tanenbaum 5.5.2).
192.168.10.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.10.2 dev eth0 lladdr 00:1A:2B:3C:4D:5E STALE
Campos: IP, interface (e.g., eth0), MAC, estado (REACHABLE: ativo; STALE: expirando). Use ip neigh flush all
para limpar o cache.
Proxy ARP
Proxy ARP permite que um roteador responda a ARP Requests em nome de hosts em outra sub-rede, facilitando comunicação sem configurar rotas nos hosts (Kurose 4.3). Exemplo: PC1 (`192.168.10.2`) se comunica com PC2 (`192.168.20.2`).
Router G0/0: 192.168.10.1/24
Router G0/1: 192.168.20.1/24
Funcionamento: PC1 envia ARP Request para `192.168.20.2`. O roteador (com Proxy ARP ativado) responde com seu MAC (G0/0), encaminhando os pacotes para PC2.
Router# configure terminal
Router(config)# interface g0/0
Router(config-if)# ip proxy-arp
Router(config-if)# ip address 192.168.10.1 255.255.255.0
Router(config-if)# no shutdown
Router(config-if)# exit
Router(config)# interface g0/1
Router(config-if)# ip proxy-arp
Router(config-if)# ip address 192.168.20.1 255.255.255.0
Router(config-if)# no shutdown
Router(config-if)# exit
Limitações: Proxy ARP aumenta o tráfego de broadcast e pode ser vulnerável a ataques (e.g., ARP spoofing). É menos usado hoje, substituído por roteamento explícito.
Atividade Prática
Parte 1: Packet Tracer (com VLANs da Aula 3)
- Configure a topologia acima: 2 PCs, 2 switches (2950), 1 roteador (2911).
- Configure VLANs: PC1 em VLAN 10 (`192.168.10.2/24`), PC2 em VLAN 20 (`192.168.20.2/24`).
- Configure IPs: Router G0/0 (`192.168.10.1/24`), G0/1 (`192.168.20.1/24`).
- Ative Proxy ARP no roteador (ver configuração acima).
- Pingue de PC1 para PC2 (`ping 192.168.20.2`). Use Wireshark para capturar o ARP Request/Reply.
- Verifique a tabela ARP em PC1:
arp -a
.
Parte 2: Linux
- Em duas VMs Linux na mesma sub-rede (`192.168.10.0/24`):
- Limpe o cache:
sudo ip neigh flush all
- Pingue:
ping -c 1 192.168.10.2
- Verifique:
ip neigh show
- Limpe o cache:
- Capture pacotes ARP:
sudo tcpdump -i eth0 arp -n
- Teste com
arping
:sudo arping -c 3 192.168.10.1
- Configure entrada estática:
sudo arp -s 192.168.10.20 aa:bb:cc:dd:ee:ff
Entregável: Screenshots de: topologia (Packet Tracer), captura Wireshark (ARP), saídas de ip neigh show
, tcpdump
, arping
.
Leitura: Kurose & Ross, Capítulo 4.3, 4.4; Tanenbaum & Wetherall, Capítulo 5.5. 5.6.
ICMP & Traceroute
Mensagens de Controle e Diagnóstico
O que é ICMP?
O Internet Control Message Protocol (ICMP) é um protocolo da Camada de Rede (Aula 4) que envia mensagens de controle e erro para gerenciar e diagnosticar redes IP (Kurose 4.3; Tanenbaum 5.5.3). Ele é usado por ferramentas como ping
e traceroute
.
Principais Mensagens ICMP:
Tipo | Código | Descrição |
---|---|---|
8 | 0 | Echo Request (ping) |
0 | 0 | Echo Reply (resposta ao ping) |
11 | 0 | Time Exceeded (TTL expirou, usado por traceroute) |
3 | 0–15 | Destination Unreachable (e.g., rede/host/port inacessível) |
Estrutura do Pacote ICMP:
• Code (8 bits): Subtipo da mensagem (e.g., 0 para Time Exceeded)
• Checksum (16 bits): Verifica integridade
• Data: Dados específicos (e.g., identificador e sequência no ping)
Ping (Echo Request/Reply)
O ping
envia um ICMP Echo Request (Type 8) para testar conectividade e medir o RTT (Round-Trip Time). O destino responde com um Echo Reply (Type 0). Exemplo na sub-rede da Aula 3 (VLAN 10, 192.168.10.0/24
):
PING 192.168.10.2 (192.168.10.2): 56 data bytes
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.23 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=1.15 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=1.18 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=1.20 ms
--- 192.168.10.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 1.15/1.19/1.23/0.04 ms
Interpretação: RTT médio de ~1.19 ms indica baixa latência. ttl=64
é típico em Linux (decrementado por cada roteador). Perda de 0% confirma conectividade.
Traceroute
O traceroute
mapeia o caminho de pacotes até o destino, enviando pacotes (UDP em Linux, ICMP em Windows) com TTL crescente (1, 2, 3, ...). Cada roteador que zera o TTL retorna um ICMP Time Exceeded (Type 11). Exemplo na sub-rede da Aula 3:
TTL=1: Enviado, Roteador (192.168.10.1) retorna Time Exceeded
TTL=2: Enviado, destino (192.168.10.1) responde (se alcançado)
traceroute to 192.168.10.1 (192.168.10.1), 30 hops max, 60 byte packets
1 192.168.10.1 1.123 ms 1.098 ms 1.087 ms
Nota: Use traceroute -I
em Linux para forçar ICMP (padrão é UDP). Em Windows, tracert
usa ICMP.
Detalhes Avançados
- Ping com Opções:
ping -c 4 -s 100 192.168.10.2
(tamanho do pacote: 100 bytes). - Captura ICMP:
sudo tcpdump -i eth0 icmp -n
para ver Echo Request/Reply e Time Exceeded. - TTL Inicial: Linux (64 ou 255), Windows (128). TTL decresce a cada roteador.
- Cenário Real: Em uma LAN (VLAN 10, Aula 3),
ping 192.168.10.1
verifica o gateway;traceroute
mapeia saltos.
Atividade Prática
Parte 1: Packet Tracer (com VLANs da Aula 3)
- Configure a topologia: 2 PCs, 1 switch (2950), 1 roteador (2911).
- Configure VLAN 10: PC1 (
192.168.10.2/24
), PC2 (192.168.10.3/24
), Roteador G0/0 (192.168.10.1/24
). - De PC1, pingue PC2 (
ping 192.168.10.3
) e capture com Wireshark (filtro:icmp
). - De PC1, execute
tracert 192.168.10.1
(Windows) ou simule traceroute no Packet Tracer. - Analise: RTT no ping, saltos no traceroute, campos ICMP no Wireshark (Type, Code, Checksum).
Parte 2: Linux
- Em duas VMs Linux na sub-rede
192.168.10.0/24
:- Pingue:
ping -c 4 192.168.10.2
- Capture:
sudo tcpdump -i eth0 icmp -n -c 8
- Pingue:
- Execute traceroute:
traceroute -I 192.168.10.1
- Teste com tamanho de pacote:
ping -c 4 -s 100 192.168.10.2
- Verifique TTL: Compare
ping
local (TTL=64) e externo (e.g.,ping 8.8.8.8
).
Entregável: Screenshots de: topologia (Packet Tracer), Wireshark (ICMP), saídas de ping
, tcpdump
, traceroute
.
Leitura: Kurose & Ross, Capítulo 4.3; Tanenbaum & Wetherall, Capítulo 5.5.
Fragmentação de Datagramas & MTU
Como IPv4 Lida com Tamanhos Variáveis
Por que Fragmentar?
Cada link de rede impõe uma MTU (Maximum Transmission Unit), o maior tamanho de pacote (incluindo cabeçalho IPv4) que pode ser transmitido sem fragmentação (Kurose 4.4.2; Tanenbaum 5.5.5). Exemplo: Ethernet tem MTU típico de 1500 bytes. Se um datagrama IPv4 excede a MTU do próximo salto, o roteador o divide em fragmentos, que são remontados apenas no destino.
Exemplo de Fragmentação:
MTU: 1500 bytes (1480 bytes dados + 20 bytes cabeçalho)
Fragmento 1: 1500 bytes (20 bytes cabeçalho + 1480 bytes dados, Offset=0, MF=1)
Fragmento 2: 520 bytes (20 bytes cabeçalho + 500 bytes dados, Offset=185, MF=0)
Nota: Offset é medido em unidades de 8 bytes (1480 ÷ 8 = 185).
Campos de Fragmentação no Cabeçalho IPv4
- Identification: Identificador único (16 bits) para todos os fragmentos de um datagrama (e.g., 12345).
- Flags (3 bits):
DF
(Don’t Fragment): Se 1, proíbe fragmentação; gera ICMP Destination Unreachable (Type 3, Code 4) se necessário.MF
(More Fragments): 1 em todos os fragmentos, exceto o último (0).
- Fragment Offset: Deslocamento (13 bits) em unidades de 8 bytes, indicando a posição do fragmento (e.g., 0, 185).
Verificando a MTU
A MTU de uma interface (e.g., eth0) pode ser verificada em Linux. Para testar fragmentação, use ping
com tamanhos específicos na sub-rede da Aula 3 (192.168.10.0/24
):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
$ ping -c 1 -M do -s 1472 192.168.10.2 # 1472 + 20 (IPv4) + 8 (ICMP) = 1500 bytes
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.23 ms
Forçando Fragmentação
Enviar um pacote maior que a MTU (sem DF
) força a fragmentação. Exemplo:
PING 192.168.10.2 (192.168.10.2) 2000(2028) bytes of data.
1480 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.25 ms
520 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.27 ms
Detalhes Avançados
- Remontagem: Apenas o destino final remonta os fragmentos, usando Identification, Offset, e MF.
- Impacto: Perda de um fragmento exige retransmissão de todo o datagrama no TCP.
- Path MTU Discovery: Envia pacotes com
DF=1
e ajusta o tamanho com base em ICMP Type 3, Code 4 (Fragmentation Needed). - Cenário Real: Em uma LAN (VLAN 10, Aula 3), um servidor (
192.168.10.2
) envia dados grandes (e.g., 4000 bytes), fragmentando se a MTU for 1500.
Atividade Prática
Parte 1: Packet Tracer (com VLANs da Aula 3)
- Configure a topologia: 2 PCs, 1 switch (2950), 1 roteador (2911).
- Configure VLAN 10: PC1 (
192.168.10.2/24
), PC2 (192.168.10.3/24
), Roteador G0/0 (192.168.10.1/24
). - No roteador, ajuste a MTU:
interface g0/0
,mtu 1000
. - De PC1, pingue PC2:
ping 192.168.10.3 -l 1500
(Windows) ouping -s 1500 192.168.10.3
(Linux). - Repita com
-f
(Windows) ou-M do
(Linux) e observe o ICMP Type 3, Code 4. - Capture com Wireshark (filtro:
ip.flags.mf==1 || ip.flags.df==1
).
Parte 2: Linux
- Em duas VMs Linux na sub-rede
192.168.10.0/24
:- Verifique MTU:
ip link show eth0
- Ajuste MTU:
sudo ip link set eth0 mtu 1000
- Pingue sem fragmentação:
ping -c 1 -M do -s 972 192.168.10.2
- Pingue com fragmentação:
ping -c 1 -s 1500 192.168.10.2
- Verifique MTU:
- Capture fragmentos:
sudo tcpdump -i eth0 'ip[6:2] & 0x1fff != 0 || ip[6] & 0x20 != 0' -n
Entregável: Screenshots de: topologia (Packet Tracer), Wireshark (fragmentos), saídas de ip link show
, ping
, tcpdump
.
Leitura: Kurose & Ross, Capítulo 4.4.2; Tanenbaum & Wetherall, Capítulo 5.5.
Ferramentas de Diagnóstico
Explorando Redes com ARP, Ping, Traceroute e Mais
Descoberta e Cache
- arp / ip neigh: Exibe o cache ARP (Slide 1) com pares IP↔MAC.
arp_cache.sh$ ip neigh show
192.168.10.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.10.2 dev eth0 lladdr 00:1A:2B:3C:4D:5E STALE - arp-scan: Escaneia a LAN via ARP Request (Slide 1).
arp_scan.sh$ sudo arp-scan --localnet
192.168.10.1 00:11:22:33:44:55 Cisco Systems, Inc
192.168.10.2 00:1A:2B:3C:4D:5E Dell Inc.
Conectividade e Roteamento
- ping: Testa conectividade via ICMP Echo Request/Reply (Slide 2).
ping_test.sh$ ping -c 4 192.168.10.2
PING 192.168.10.2 (192.168.10.2): 56 data bytes
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=1.23 ms
...
rtt min/avg/max/mdev = 1.15/1.19/1.23/0.04 ms - traceroute / mtr: Mapeia saltos via ICMP Time Exceeded (Slide 2).
traceroute_test.sh$ traceroute -I 192.168.10.1
traceroute to 192.168.10.1 (192.168.10.1), 30 hops max, 60 byte packets
1 192.168.10.1 1.123 ms 1.098 ms 1.087 ms
Análise de Sockets
- ss: Lista sockets TCP/UDP com processos e PIDs.
ss_sockets.sh$ ss -tulpen
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* uid:0 ino:12345 - netstat: (Legado) Similar ao
ss
.
netstat_sockets.sh$ sudo netstat -tulpen
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
Captura de Pacotes
- tcpdump: Captura pacotes em nível de enlace.
tcpdump_capture.sh$ sudo tcpdump -i eth0 icmp -n
12:34:56.789012 IP 192.168.10.2 > 192.168.10.1: ICMP echo request, id 1, seq 1, length 64 - tshark: Versão terminal do Wireshark.
tshark_capture.sh$ sudo tshark -i eth0 -f "arp or icmp"
1 0.000000 00:1A:2B:3C:4D:5E -> ff:ff:ff:ff:ff:ff ARP Who has 192.168.10.1?
Configuração de Interfaces
- ip: Gerencia endereços e rotas (Aula 4).
ip_config.sh$ ip a show eth0
2: eth0:mtu 1500 state UP
inet 192.168.10.2/24 brd 192.168.10.255
$ ip r
default via 192.168.10.1 dev eth0 - ethtool: Exibe estatísticas da NIC.
ethtool_stats.sh$ sudo ethtool eth0
Speed: 1000Mb/s
Duplex: Full
Link detected: yes - macchanger: Altera o endereço MAC.
macchanger.sh$ sudo macchanger -r eth0
Current MAC: 00:1A:2B:3C:4D:5E
New MAC: 00:12:34:56:78:9A
Detalhes Avançados
- arp-scan vs. nmap:
arp-scan
é mais rápido em LANs (Camada 2), enquantonmap -sn
usa ICMP/ARP (Camada 3). - mtr: Combina ping e traceroute, ideal para monitoramento contínuo.
- tcpdump Filtros: Use
tcpdump -i eth0 'tcp port 80'
para HTTP ou'ip[6:2] & 0x1fff != 0'
para fragmentos (Slide 3). - Cenário Real: Em VLAN 10 (Aula 3), use
arp-scan
para mapear dispositivos,ping
para testar o gateway (192.168.10.1
), etcpdump
para diagnosticar falhas.
Atividade Prática
Parte 1: Packet Tracer (com VLANs da Aula 3)
- Configure a topologia: 2 PCs, 1 switch (2950), 1 roteador (2911).
- Configure VLAN 10: PC1 (
192.168.10.2/24
), PC2 (192.168.10.3/24
), Roteador G0/0 (192.168.10.1/24
). - Teste conectividade:
ping 192.168.10.3
(PC1 para PC2). - Mapeie saltos:
tracert 192.168.10.1
(Windows) ou simule traceroute. - Capture pacotes: Wireshark (filtro:
arp or icmp
).
Parte 2: Linux
- Em duas VMs Linux na sub-rede
192.168.10.0/24
:- Mapear LAN:
sudo arp-scan --localnet
,nmap -sn 192.168.10.0/24
- Limpar cache ARP:
sudo ip neigh flush all
- Testar conectividade:
ping -c 4 192.168.10.2
- Mapear rotas:
traceroute -I 192.168.10.1
- Verificar sockets:
ss -tulpen
- Capturar pacotes:
sudo tcpdump -i eth0 'arp or icmp' -n -c 10
- Mapear LAN:
- Spoof de MAC:
sudo macchanger -r eth0
, teste comping 192.168.10.2
, verifiqueip neigh show
. - Path MTU Discovery (Slide 3):
ping -c 1 -M do -s 2000 192.168.10.2
, capturesudo tcpdump -i eth0 icmp -n
.
Entregável: Screenshots de: topologia (Packet Tracer), Wireshark (ARP/ICMP), saídas de arp-scan
, nmap
, ip neigh
, ping
, traceroute
, ss
, tcpdump
, macchanger
.
Leitura: Kurose & Ross, Capítulo 4.7; Tanenbaum & Wetherall, Capítulo 5.5.7.
Quiz Interativo
Teste seus Conhecimentos IPv4 Avançado
1. Qual protocolo resolve endereços IPv4 para MAC na LAN?
Resposta: a) ARP
O ARP mapeia IP→MAC na mesma sub-rede (Kurose 4.3).
2. Qual comando exibe o cache ARP no Linux?
Resposta: b) ip neigh show
Mostra o cache ARP (Tanenbaum 5.5.2).
3. Em IPv4, qual campo indica o deslocamento do fragmento?
Resposta: c) Fragment Offset
Define a posição do fragmento dentro do datagrama (Kurose 4.4).
4. Qual tipo ICMP corresponde a “Echo Request”?
Resposta: a) 8
Tipo 8 é Echo Request; tipo 0 é Echo Reply (Kurose 4.6).
5. Qual o MTU padrão da Ethernet?
Resposta: a) 1500 bytes
MTU padrão para quadros Ethernet (IEEE 802.3).
6. Qual ferramenta altera endereço MAC da interface?
Resposta: a) macchanger
Utilitário dedicado para mascarar MAC (Packet Tracer / Linux).
7. Qual comando captura pacotes ICMP no terminal?
Resposta: a) tcpdump -i eth0 icmp
Filtra apenas pacotes ICMP na interface.
8. Qual ferramenta combina traceroute + ping em tempo real?
Resposta: a) mtr
mtr faz traceroute contínuo e estatísticas de RTT.
9. Qual o valor padrão do TTL no Linux?
Resposta: c) 64
Linux usa TTL 64 por padrão.
10. Qual comando lista sockets TCP/UDP, processos e PIDs?
Resposta: a) ss -tulpen
ss substitui netstat para visualizar sockets e PIDs.
Atividade Prática
- Limpe o cache ARP e singele um ping:
$ sudo ip neigh flush all && ping -c1 192.168.10.1
- Traceie até google.com e capture ICMP:
$ traceroute google.com && sudo tcpdump -i eth0 icmp
- Force fragmentação e observe:
$ ping -M do -s 2000 8.8.8.8
- Altere seu MAC e valide no ARP:
$ sudo macchanger -r eth0 && arp -n
Veja abaixo exemplos de saídas esperadas:
REPLY from 192.168.10.1: bytes=64 time=1ms TTL=64
2. traceroute mostra saltos; tcpdump exibe ICMP echo.
3. “Packet too large” indica fragmentação proibida.
4. Novo MAC e arp -n reflete novo endereço.
Leitura complementar: Kurose & Ross Cap. 4.6–4.7; Tanenbaum & Wetherall 5.5–5.5.7.