Salud de la Interfaz de Red
Utiliza 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 conectividad intermitente.
- Una interfaz de switch o router muestra CRCs, runts, giants, drops, resets o flaps.
- 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
ifInErrors,ifOutErrorsoifOutDiscardsen aumento.
Cómo Funciona
Los contadores de interfaz son evidencia, pero la tendencia importa más que el número absoluto. Captura una línea base, espera un intervalo de medición, captura de nuevo, 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ó la suma de verificación de la trama recibida | Cable defectuoso, fibra sucia, óptica defectuosa, desajuste de dúplex |
| input errors | Errores agregados del lado de recepción | Verificar subcontadores antes de concluir |
| runts | Tramas por debajo del tamaño mínimo de Ethernet | Desajuste de dúplex, dominio de colisión, NIC defectuosa |
| giants | Tramas más grandes que el MTU esperado | Desajuste de MTU o límite de jumbo-frame |
| 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 insuficiente |
| resets | Reinicio de hardware de la interfaz | Fluctuación, keepalive, controlador, óptica, energía |
| collisions | Contador de colisiones Ethernet | Half dúplex o desajuste de negociación |
Flujo de Diagnóstico
CRCs o Errores de Entrada
- Confirmar que los contadores están incrementando, no solo son históricos.
- Verificar ambos extremos del enlace. Los errores del lado de recepción generalmente apuntan a la señal que llega a ese lado, no necesariamente al puerto que reporta el error.
- Reemplazar el cable de conexión o limpiar/reemplazar fibra y ópticas.
- Confirmar que las configuraciones de velocidad/dúplex coincidan en ambos lados.
- Revisar los registros en busca de eventos de fluctuación alrededor del mismo timestamp.
Descartados (Drops)
- Separar los descartes de entrada de los de salida.
- Comparar la tasa de la interfaz contra la capacidad.
- Revisar la política QoS, contadores de cola y si el enlace es un uplink sobresuscrito.
- Tratar el ajuste de cola como secundario. Primero probar si el enlace está congestionado.
Dúplex y Velocidad
Prefiere la autonegociación en enlaces Ethernet modernos cuando ambos lados la soportan. Si un lado debe ser fijo, configura ambos lados explícitamente y documenta por qué. 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 omitan contadores o se asignen al puerto equivocado.
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
CRCs en un Puerto de Switch
- Capturar contadores en el puerto local.
- Capturar contadores en el puerto remoto conectado.
- Reemplazar el cable o la óptica antes de cambiar reglas de enrutamiento o firewall.
- Limpiar contadores solo después de registrar la línea base.
- Volver a verificar después de un intervalo fijo.
Internet Lenta Pero LAN Funciona Bien
- Revisar caídas/errores de la interfaz WAN.
- Revisar la utilización del uplink LAN y los descartes de salida.
- Revisar la CPU del gateway si el enlace WAN está limpio pero el rendimiento aún es bajo.
- Comparar pruebas cableadas e inalámbricas antes de culpar al servicio ascendente.
Antipatrones
- Limpiar contadores antes de guardar una línea base.
- Mirar solo un lado de un enlace.
- Asumir que todos los CRCs históricos son problemas activos sin una ventana de tiempo.
- Mezclar autonegociació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