¿Qué hace Salud de Interfaces de Red?
Usa esta habilidad cuando un síntoma de red pueda estar causado por un enlace físico, puerto de switch, cable, transceptor, configuración de dúplex o interfaz congestionada.
Cuándo Usarlo
- Un host o VLAN tiene pérdida de paquetes, picos de latencia o accesibilidad intermitente.
- Una interfaz de switch o router muestra CRC, runts, giants, descartes, resets o flapping.
- Necesitas comparar ambos extremos de un enlace antes de reemplazar hardware.
- Una ventana de cambio necesita evidencia de contadores de interfaz antes/después.
- El monitoreo reporta aumento de
ifInErrors,ifOutErrorsoifOutDiscards.
Cómo Funciona
Los contadores de interfaz son evidencia, pero la tendencia importa más que el valor absoluto. Captura una línea base, espera un intervalo de medición, captura de nuevo y luego compara los incrementos.
show interfaces <interface>
show interfaces <interface> status
show logging | include <interface>|changed state|line protocol
En hosts Linux:
ip -s link show <interface>
ethtool <interface>
ethtool -S <interface>
Referencia de Contadores
| Contador | Significado | Causa común |
|---|---|---|
| CRC | Falló checksum de trama recibida | Cable defectuoso, fibra sucia, óptica mala, discrepancia de dúplex |
| input errors | Errores agregados del lado de recepción | Revisa sub-contadores antes de concluir |
| runts | Tramas por debajo del tamaño mínimo Ethernet | Discrepancia de dúplex, dominio de colisión, NIC defectuosa |
| giants | Tramas más grandes que la MTU esperada | Discrepancia de MTU o límite de tramas jumbo |
| input drops | El dispositivo no pudo aceptar paquetes entrantes | Ráfaga, sobresuscripción, ruta de CPU, presión de cola |
| output drops | La cola de salida descartó paquetes | Congestión, política QoS, uplink subdimensionado |
| resets | Reinicio de hardware de la interfaz | Flapping, keepalive, driver, óptica, alimentación |
| collisions | Contador de colisiones Ethernet | Semidúplex o discrepancia de negociación |
Flujo de Diagnóstico
CRC o Errores de Entrada
- Confirma que los contadores están incrementando, no solo son históricos.
- Revisa ambos extremos del enlace. Los errores del lado receptor generalmente apuntan a la señal que llega a ese lado, no necesariamente al puerto que reporta el error.
- Reemplaza el cable de conexión o limpia/reemplaza la fibra y las ópticas.
- Confirma que las configuraciones de velocidad/dúplex coincidan en ambos lados.
- Revisa los logs en busca de eventos de flapping en la misma marca de tiempo.
Descartes
- Separa los descartes de entrada de los de salida.
- Compara la tasa de la interfaz con la capacidad.
- Revisa la política QoS, los contadores de cola y si el enlace es un uplink sobresuscrito.
- Trata el ajuste de colas como secundario. Primero demuestra si el enlace está congestionado.
Dúplex y Velocidad
Prefiere la auto-negociación en enlaces Ethernet modernos cuando ambos lados la soportan. Si un lado debe ser fijo, configura ambos lados explícitamente y documenta el motivo. Nunca mezcles velocidad/dúplex fijo en un lado con auto en el otro.
show interfaces <interface> | include duplex|speed
Ejemplo de Parser Seguro
Divide cada bloque de interfaz desde un encabezado hasta el siguiente. No uses una ventana de caracteres arbitraria; los bloques grandes de interfaz pueden hacer que se pierdan contadores o se asignen al puerto incorrecto.
import re
from typing import Any
HEADER_RE = re.compile(
r"^(?P<name>\S+) is (?P<status>(?:administratively )?down|up), "
r"line protocol is (?P<protocol>up|down)",
re.I | re.M,
)
ERROR_RE = re.compile(r"(?P<input>\d+) input errors, (?P<crc>\d+) CRC", re.I)
DROP_RE = re.compile(r"(?P<output>\d+) output errors", re.I)
DUPLEX_RE = re.compile(r"(?P<duplex>Full|Half|Auto)-duplex,\s+(?P<speed>[^,]+)", 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({
"name": header.group("name"),
"status": header.group("status"),
"protocol": header.group("protocol"),
"duplex": duplex.group("duplex") if duplex else "unknown",
"speed": duplex.group("speed").strip() if duplex else "unknown",
"input_errors": int(errors.group("input")) if errors else 0,
"crc_errors": int(errors.group("crc")) if errors else 0,
"output_errors": int(drops.group("output")) if drops else 0,
})
return interfaces
Ejemplos
CRC en un Puerto de Switch
- Captura contadores en el puerto local.
- Captura contadores en el puerto remoto conectado.
- Reemplaza el cable o la óptica antes de cambiar reglas de enrutamiento o firewall.
- Limpia los contadores solo después de registrar la línea base.
- Vuelve a verificar después de un intervalo fijo.
Internet Lento Pero la LAN Funciona Bien
- Revisa los descartes/errores de la interfaz WAN.
- Revisa la utilización del uplink LAN y los descartes de salida.
- Revisa la CPU del gateway si el enlace WAN está limpio pero el rendimiento sigue siendo bajo.
- Compara pruebas por cable e inalámbricas antes de culpar al proveedor de servicios.
Antipatrones
- Limpiar contadores antes de guardar una línea base.
- Mirar solo un lado de un enlace.
- Asumir que todos los CRC históricos son problemas activos sin una ventana de tiempo.
- Mezclar auto-negociación en un lado con velocidad/dúplex fijo en el otro.
- Tratar los descartes de salida como un problema de cable antes de verificar congestión.
Ver También
- Agente:
network-troubleshooter - Habilidad:
network-config-validation - Habilidad:
homelab-network-setup