Netzwerkschnittstellen-Integrität
Verwende diese Fähigkeit, wenn ein Netzwerksymptom durch eine physische Verbindung, einen Switch-Port, ein Kabel, einen Transceiver, eine Duplex-Einstellung oder eine überlastete Schnittstelle verursacht werden könnte.
Wann zu verwenden
- Ein Host oder VLAN weist Paketverlust, Latenzspitzen oder intermittierende Erreichbarkeit auf.
- Ein Switch- oder Router-Interface zeigt CRCs, Runts, Giants, Drops, Resets oder Flaps.
- Du musst beide Enden einer Verbindung vergleichen, bevor du Hardware austauschst.
- Ein Änderungsfenster benötigt Vorher/Nachher-Nachweise der Schnittstellenzähler.
- Die Überwachung meldet steigende
ifInErrors,ifOutErrorsoderifOutDiscards.
Funktionsweise
Schnittstellenzähler sind Beweise, aber der Trend ist wichtiger als der absolute Wert. Erfasse eine Baseline, warte ein Messintervall ab, erfasse erneut und vergleiche dann die Inkremente.
show interfaces <interface>
show interfaces <interface> status
show logging | include <interface>|changed state|line protocol
Auf Linux-Hosts:
ip -s link show <interface>
ethtool <interface>
ethtool -S <interface>
Zählerreferenz
| Zähler | Bedeutung | Häufige Ursache |
|---|---|---|
| CRC | Empfangene Frame-Prüfsumme fehlgeschlagen | Schlechtes Kabel, verschmutzte Faser, schlechter Optik, Duplex-Mismatch |
| input errors | Aggregierte empfangsseitige Fehler | Vor dem Schlussfolgern Unterzähler prüfen |
| runts | Frames unterhalb der minimalen Ethernet-Größe | Duplex-Mismatch, Kollisionsdomäne, fehlerhafte NIC |
| giants | Frames größer als erwartete MTU | MTU-Mismatch oder Jumbo-Frame-Grenze |
| input drops | Gerät konnte eingehende Pakete nicht annehmen | Burst, Überbuchung, CPU-Pfad, Warteschlangendruck |
| output drops | Ausgangswarteschlange verwarf Pakete | Überlastung, QoS-Richtlinie, zu kleine Uplink |
| resets | Hardware-Reset der Schnittstelle | Flapping, Keepalive, Treiber, Optik, Strom |
| collisions | Ethernet-Kollisionszähler | Halbduplex oder Aushandlungskonflikt |
Diagnoseablauf
CRCs oder Eingabefehler
- Bestätige, dass die Zähler inkrementieren und nicht nur historisch sind.
- Überprüfe beide Enden der Verbindung. Empfangsseitige Fehler deuten normalerweise auf das Signal hin, das auf dieser Seite ankommt, nicht unbedingt auf den Port, der den Fehler meldet.
- Ersetze das Patchkabel oder reinige/ersetze Faser und Optik.
- Bestätige, dass die Geschwindigkeits-/Duplex-Einstellungen auf beiden Seiten übereinstimmen.
- Überprüfe die Protokolle auf Flapping-Ereignisse zum gleichen Zeitstempel.
Drops
- Trenne Eingabe-Drops von Ausgabe-Drops.
- Vergleiche die Schnittstellenrate mit der Kapazität.
- Überprüfe QoS-Richtlinie, Warteschlangenzähler und ob die Verbindung ein überbuchter Uplink ist.
- Behandle die Warteschlangenoptimierung als zweitrangig. Beweise zuerst, ob die Verbindung überlastet ist.
Duplex und Geschwindigkeit
Bevorzuge Auto-Aushandlung bei modernen Ethernet-Verbindungen, wenn beide Seiten dies unterstützen. Wenn eine Seite fest eingestellt sein muss, konfiguriere beide Seiten explizit und dokumentiere den Grund. Mische niemals feste Geschwindigkeit/Duplex auf einer Seite mit Auto auf der anderen.
show interfaces <interface> | include duplex|speed
Sicheres Parser-Beispiel
Schneide jeden Schnittstellenblock von einem Header zum nächsten. Verwende kein willkürliches Zeichenfenster; große Schnittstellenblöcke können dazu führen, dass Zähler übersehen oder dem falschen Port zugeordnet werden.
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
Beispiele
CRCs auf einem Switch-Port
- Erfasse Zähler auf dem lokalen Port.
- Erfasse Zähler auf dem angeschlossenen entfernten Port.
- Ersetze das Kabel oder die Optik, bevor du Routing- oder Firewall-Regeln änderst.
- Lösche Zähler erst nach dem Aufzeichnen der Baseline.
- Überprüfe erneut nach einem festgelegten Intervall.
Internet langsam, aber LAN funktioniert
- Überprüfe WAN-Schnittstellen-Drops/Fehler.
- Überprüfe LAN-Uplink-Auslastung und Ausgabe-Drops.
- Überprüfe die Gateway-CPU, wenn die WAN-Verbindung sauber ist, aber der Durchsatz dennoch niedrig ist.
- Vergleiche kabelgebundene und kabellose Tests, bevor du den Upstream-Dienst beschuldigst.
Anti-Patterns
- Löschen von Zählern vor dem Speichern einer Baseline.
- Nur eine Seite einer Verbindung betrachten.
- Alle historischen CRCs ohne Zeitfenster als aktive Probleme annehmen.
- Auto-Aushandlung auf einer Seite mit fester Geschwindigkeit/Duplex auf der anderen mischen.
- Ausgabe-Drops als Kabelproblem behandeln, bevor die Überlastung geprüft wird.
Siehe auch
- Agent:
network-troubleshooter - Skill:
network-config-validation - Skill:
homelab-network-setup