
关于
诊断路由器、交换机和 Linux 主机上的接口错误、丢包、CRC 错误、双工不匹配、端口抖动、速率协商问题和计数器趋势。
name: network-interface-health description: 诊断路由器、交换机和 Linux 主机上的接口错误、丢包、CRC、双工不匹配、抖动、速度协商问题和计数器趋势。 origin: community
网络接口健康
当网络症状可能由物理链路、交换机端口、线缆、光模块、双工设置或拥塞接口引起时使用此技能。
何时使用
- 主机或 VLAN 有丢包、延迟尖峰或间歇性可达性问题。
- 交换机或路由器接口显示 CRC、短帧、超大帧、丢包、重置或抖动。
- 你需要在更换硬件前比较链路两端。
- 变更窗口需要接口计数器的前后对比证据。
- 监控报告
ifInErrors、ifOutErrors或ifOutDiscards上升。
工作原理
接口计数器是证据,但趋势比绝对数字更重要。捕获基线,等待测量间隔,再次捕获,然后比较增量。
show interfaces <interface>
show interfaces <interface> status
show logging | include <interface>|changed state|line protocol
在 Linux 主机上:
ip -s link show <interface>
ethtool <interface>
ethtool -S <interface>
计数器参考
| 计数器 | 含义 | 常见原因 | | --- | --- | --- | | CRC | 接收帧校验和失败 | 坏线缆、脏光纤、坏光模块、双工不匹配 | | input errors | 接收侧错误汇总 | 在得出结论前检查子计数器 | | runts | 低于最小以太网大小的帧 | 双工不匹配、冲突域、故障网卡 | | giants | 大于预期 MTU 的帧 | MTU 不匹配或巨型帧边界 | | input drops | 设备无法接受入站数据包 | 突发、超额订阅、CPU 路径、队列压力 | | output drops | 出口队列丢弃数据包 | 拥塞、QoS 策略、上行链路不足 | | resets | 接口硬件重置 | 抖动、keepalive、驱动、光模块、电源 | | collisions | 以太网冲突计数器 | 半双工或协商不匹配 |
诊断流程
CRC 或输入错误
- 确认计数器正在递增,而非仅是历史数据。
- 检查链路两端。接收侧错误通常指向到达该侧的信号,不一定是报告错误的端口。
- 更换跳线或清洁/更换光纤和光模块。
- 确认两侧的速度/双工设置匹配。
- 检查日志中同一时间戳附近的抖动事件。
丢包
- 区分输入丢包和输出丢包。
- 将接口速率与容量进行比较。
- 检查 QoS 策略、队列计数器,以及链路是否为超额订阅的上行链路。
- 将队列调优视为次要。首先证明链路是否拥塞。
双工和速度
在两端都支持时,现代以太网链路优先使用自动协商。如果一端必须固定,则明确配置两端并记录原因。永远不要一端固定速度/双工而另一端自动。
show interfaces <interface> | include duplex|speed
安全解析器示例
从一个头部到下一个头部切片每个接口块。不要使用任意字符窗口;大型接口块可能导致计数器被遗漏或分配到错误的端口。
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")
def parse_interfaces(output: str) -> list[dict[str, Any]]:
blocks = HEADER_RE.split(output)
results = []
for i in range(1, len(blocks), 4):
name, status, protocol, body = blocks[i:i+4]
errors = ERROR_RE.search(body)
results.append({
"name": name,
"status": status,
"protocol": protocol,
"input_errors": int(errors.group("input")) if errors else 0,
"crc": int(errors.group("crc")) if errors else 0,
})
return results
最佳实践
- 始终比较链路两端的计数器
- 关注增量而非绝对值
- 在更换硬件前排除配置问题
- 记录变更前后的计数器快照
- 使用 SNMP 或流式遥测进行持续监控
限制
- 仅在任务明确匹配上述范围时使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少所需的输入、权限、安全边界或成功标准,请停下来寻求澄清。
兼容工具
Claude CodeCursor
标签
前端开发
