Saúde de Interface de Rede
Use esta habilidade quando um sintoma de rede pode ser causado por um link físico, porta de switch, cabo, transceptor, configuração de duplex ou interface congestionada.
Quando Usar
- Um host ou VLAN apresenta perda de pacotes, picos de latência ou conectividade intermitente.
- A interface de um switch ou roteador mostra CRCs, runts, giants, quedas, resets ou flapping.
- Você precisa comparar ambas as extremidades de um link antes de substituir hardware.
- Uma janela de mudança precisa de evidências de contadores de interface antes/depois.
- O monitoramento relata aumento em
ifInErrors,ifOutErrorsouifOutDiscards.
Como Funciona
Os contadores de interface são uma evidência, mas a tendência importa mais do que o número absoluto. Capture uma linha de base, aguarde um intervalo de medição, capture novamente e compare os incrementos.
show interfaces <interface>
show interfaces <interface> status
show logging | include <interface>|changed state|line protocol
Em hosts Linux:
ip -s link show <interface>
ethtool <interface>
ethtool -S <interface>
Referência de Contadores
| Contador | Significado | Causa comum |
|---|---|---|
| CRC | Falha na soma de verificação do quadro recebido | Cabo ruim, fibra suja, óptica ruim, incompatibilidade de duplex |
| input errors | Erros agregados do lado da recepção | Verifique os subcontadores antes de concluir |
| runts | Quadros abaixo do tamanho mínimo Ethernet | Incompatibilidade de duplex, domínio de colisão, NIC defeituosa |
| giants | Quadros maiores que o MTU esperado | Incompatibilidade de MTU ou limite de jumbo-frame |
| input drops | Dispositivo não pôde aceitar pacotes recebidos | Rajada, superassinatura, caminho de CPU, pressão de fila |
| output drops | Fila de saída descartou pacotes | Congestionamento, política de QoS, uplink subdimensionado |
| resets | Reinicialização de hardware da interface | Flapping, keepalive, driver, óptica, energia |
| collisions | Contador de colisão Ethernet | Half duplex ou incompatibilidade de negociação |
Fluxo de Diagnóstico
CRCs Ou Erros de Entrada
- Confirme que os contadores estão incrementando, não são apenas históricos.
- Verifique ambas as extremidades do link. Erros no lado da recepção geralmente apontam para o sinal que chega naquele lado, não necessariamente para a porta que relata o erro.
- Substitua o cabo de conexão ou limpe/substitua fibra e ópticas.
- Confirme se as configurações de velocidade/duplex correspondem em ambos os lados.
- Verifique os logs em busca de eventos de flapping ao redor do mesmo timestamp.
Quedas
- Separe quedas de entrada de quedas de saída.
- Compare a taxa da interface com a capacidade.
- Verifique a política de QoS, contadores de fila e se o link é um uplink superassinado.
- Trate o ajuste de fila como secundário. Primeiro, prove se o link está congestionado.
Duplex E Velocidade
Prefira auto-negociação em links Ethernet modernos quando ambos os lados a suportam. Se um lado precisar ser fixo, configure ambos os lados explicitamente e documente o motivo. Nunca misture velocidade/duplex fixo de um lado com auto do outro.
show interfaces <interface> | include duplex|speed
Exemplo de Parser Seguro
Divida cada bloco de interface de um cabeçalho ao próximo. Não use uma janela de caracteres arbitrária; blocos grandes de interface podem fazer com que contadores sejam perdidos ou atribuídos à porta errada.
import re
from typing import Any
HEADER_RE = re.compile(
r"^(?P<nome>\S+) is (?P<status>(?:administratively )?down|up), "
r"line protocol is (?P<protocolo>up|down)",
re.I | re.M,
)
ERROR_RE = re.compile(r"(?P<entrada>\d+) input errors, (?P<crc>\d+) CRC", re.I)
DROP_RE = re.compile(r"(?P<saida>\d+) output errors", re.I)
DUPLEX_RE = re.compile(r"(?P<duplex>Full|Half|Auto)-duplex,\s+(?P<velocidade>[^,]+)", re.I)
def parse_show_interfaces(raw: str) -> list[dict[str, Any]]:
headers = list(HEADER_RE.finditer(raw))
interfaces = []
for index, header in enumerate(headers):
end = headers[index + 1].start() if index + 1 < len(headers) else len(raw)
block = raw[header.start():end]
errors = ERROR_RE.search(block)
drops = DROP_RE.search(block)
duplex = DUPLEX_RE.search(block)
interfaces.append({
"nome": header.group("nome"),
"status": header.group("status"),
"protocolo": header.group("protocolo"),
"duplex": duplex.group("duplex") if duplex else "desconhecido",
"velocidade": duplex.group("velocidade").strip() if duplex else "desconhecido",
"erros_entrada": int(errors.group("entrada")) if errors else 0,
"erros_crc": int(errors.group("crc")) if errors else 0,
"erros_saida": int(drops.group("saida")) if drops else 0,
})
return interfaces
Exemplos
CRCs Em Uma Porta de Switch
- Capture contadores na porta local.
- Capture contadores na porta remota conectada.
- Substitua o cabo ou a óptica antes de alterar regras de roteamento ou firewall.
- Limpe contadores apenas após registrar a linha de base.
- Verifique novamente após um intervalo fixo.
Internet Lenta Mas LAN Está OK
- Verifique quedas/erros da interface WAN.
- Verifique utilização do uplink LAN e quedas de saída.
- Verifique CPU do gateway se o link WAN estiver limpo mas a taxa de transferência ainda estiver baixa.
- Compare testes com e sem fio antes de culpar o serviço upstream.
Anti-Padrões
- Limpar contadores antes de salvar uma linha de base.
- Olhar apenas para um lado de um link.
- Assumir que todos os CRCs históricos são problemas ativos sem uma janela de tempo.
- Misturar auto-negociação de um lado com velocidade/duplex fixo do outro.
- Tratar quedas de saída como um problema de cabo antes de verificar congestionamento.
Veja Também
- Agente:
network-troubleshooter - Skill:
network-config-validation - Skill:
homelab-network-setup