250403 - 网络问题排查

以下是针对嵌入式 Linux 系统 网关信息丢失网络掉线 问题的故障树分析,结合硬件、驱动、协议栈、配置及外部环境因素,按优先级分步排查:


故障树分析

graph LR A[网关丢失 + 网络掉线] --> B[物理层问题] A --> C[网络配置异常] A --> D[驱动/固件缺陷] A --> E[系统资源不足] A --> F[协议栈/内核问题] A --> G[外部设备干扰] B --> B1[网线/接口接触不良] B --> B2[电磁干扰/信号衰减] B --> B3[网卡硬件故障] B --> B4[电源不稳导致网卡复位] C --> C1[DHCP配置错误] C --> C2[静态网关被覆盖] C --> C3[路由表误删/未持久化] C --> C4[MTU不匹配导致分片失败] D --> D1[网卡驱动不兼容] D --> D2[固件版本过低] D --> D3[中断处理异常] D --> D4[卸载功能(TSO/GRO)冲突] E --> E1[内存泄漏占用网络缓冲区] E --> E2[CPU过载导致协议栈延迟] E --> E3[进程争用网络资源] F --> F1[ARP表异常] F --> F2[ICMP协议栈丢包] F --> F3[路由缓存失效] F --> F4[防火墙规则误拦截] G --> G1[网关设备故障] G --> G2[交换机/路由器MTU限制] G --> G3[网络环路/广播风暴]

分步排查指南

1. 物理层问题(B 分支)

  • 检测方法

    # 检查网卡接口状态(LINK/SPEED)
    ethtool eth0          # 确认连接状态及速率
    dmesg | grep eth0     # 查看硬件错误日志
    
    # 更换网线或接口测试
    
  • 解决方案

    • 重新插拔网线或更换接口。
    • 添加磁环抑制电磁干扰。
    • 检查电源稳定性(示波器测量电压波动)。

2. 网络配置异常(C 分支)

  • 检测方法

    # 检查当前路由表和网关
    route -n              # 查看网关是否消失
    ip route show        # 显示详细路由规则
    
    # 验证 DHCP 或静态配置
    cat /etc/network/interfaces  # Debian 系配置
    cat /etc/sysconfig/network-scripts/ifcfg-eth0  # RHEL 系配置
    
    # 测试 MTU 兼容性
    ping -M do -s 1472 <网关IP>   # 检查分片问题
    
  • 解决方案

    • 禁用冲突服务(如 NetworkManager​ 与 systemd-networkd​ 共存)。
    • 持久化路由配置(写入 /etc/rc.local​ 或 systemd​ 服务)。
    • 调整 MTU 至路径最小值(如 ip link set eth0 mtu 1400​)。

3. 驱动/固件缺陷(D 分支)

  • 检测方法

    # 查看驱动和固件版本
    ethtool -i eth0       # 驱动名称及版本
    ethtool -S eth0       # 统计信息(error/drop 计数)
    
    # 关闭卸载功能测试
    ethtool -K eth0 tso off gro off gso off
    
  • 解决方案

    • 更新驱动或回退稳定版本。
    • 调整中断亲和性(smp_affinity​)或启用多队列(ethtool -L​)。

4. 系统资源不足(E 分支)

  • 检测方法

    # 监控资源使用
    free -m               # 内存占用
    top -p $(pidof 主进程) # 查看 CPU 和内存占用
    ss -s                 # 统计套接字缓冲区使用
    
    # 检查 OOM 日志
    dmesg | grep "Out of memory"
    
  • 解决方案

    • 优化应用程序内存使用(避免内存泄漏)。
    • 增大内核网络缓冲区(sysctl -w net.core.rmem_max=16777216​)。

5. 协议栈/内核问题(F 分支)

  • 检测方法

    # 检查 ARP 表
    arp -n                # 网关 MAC 是否正常
    
    # 跟踪内核丢包
    cat /proc/net/netstat | grep -i "TcpExtTCPSynRetrans"  # SYN 重传统计
    
  • 解决方案

    • 启用 ARP 缓存持久化(arp -s <网关IP> <MAC>​)。
    • 调整 TCP 参数(sysctl -w net.ipv4.tcp_retries2=3​)。

6. 外部设备干扰(G 分支)

  • 检测方法

    # 测试网关设备状态
    ping <网关IP> -c 100 -i 0.2 -W 1  # 连续 ping 网关,统计丢包率
    
    # 检查交换机日志
    # (需登录交换机 CLI,查看端口错误计数)
    
  • 解决方案

    • 更换网关设备或交换机端口。
    • 在交换机启用 STP 防止环路。

优先级排序

  1. 物理层问题(B1/B2) → 最易排查且常见。
  2. 网络配置异常(C1/C2) → 检查静态/DHCP 配置。
  3. 驱动/固件缺陷(D1/D2) → 更新驱动或关闭卸载功能。
  4. 系统资源不足(E1/E2) → 监控内存和 CPU。
  5. 协议栈问题(F1/F3) → 分析 ARP 和路由缓存。
  6. 外部设备干扰(G1/G3) → 协同网络管理员排查。

关键工具总结

工具 用途
ethtool 网卡状态、驱动信息、错误统计
route -n​ / ip route 路由表及网关验证
ping -M do -s MTU 兼容性测试
dmesg 内核日志(硬件错误、驱动故障)
tcpdump 抓包分析分片/丢包问题

通过逐层排除,可快速定位根本原因,优先解决物理层和配置问题,再深入内核和外部设备。

  • 网络
    140 引用 • 184 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...