HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 网络架构师学习手册

    • 网络架构师学习教程
    • 基础篇

      • 第1章 网络模型与数据流转
      • 第2章 以太网与二层通信
      • 第3章 IP路由与三层转发
      • 第4章 TCP与可靠传输
      • 第5章 应用层协议
    • Linux网络栈

      • 第6章 数据包接收路径
      • 第7章 多核网络优化
      • 第8章 Netfilter与防火墙
      • 第9章 流量控制与QoS
    • 虚拟网络

      • 第10章 Network Namespace基础
      • 第11章 Bridge与互联
      • 第12章 VXLAN与Overlay网络
      • 第13章 OVS与SDN
    • Kubernetes网络

      • 第14章 CNI模型与实现
      • 第15章 kube-proxy与Service实现
      • 第16章 CoreDNS与服务发现
      • 第17章 NetworkPolicy与安全隔离
      • 第18章 Calico网络深度解析
      • 第19章 Cilium与eBPF网络
    • 网络架构

      • 第20章 网络设备与拓扑设计
      • 第21章 网络容量规划与计算
      • 第22章 负载均衡架构设计
      • 第23章 高可用网络架构
      • 第24章 网络安全架构
    • 性能调优

      • 第25章 系统级网络调优
      • 第26章 故障排查方法论
      • 第27章 生产环境案例分析
    • 前沿技术

      • 第28章 eBPF深度实践
      • 第29章 ServiceMesh与边车代理
      • 第30章 网络技术趋势与未来展望
    • 附录

      • 附录A:命令速查手册
      • 附录B:排错决策树
      • 附录C:学习资源
      • 附录D:技能图谱

附录B:排错决策树

网络问题排查流程

1. 完全不通

1.1 ping不通

ping不通
├── 检查IP配置
│   ├── ip addr show
│   ├── 确认IP地址正确
│   └── 确认子网掩码正确
├── 检查路由
│   ├── ip route show
│   ├── 确认默认路由
│   └── 确认静态路由
├── 检查防火墙
│   ├── iptables -L -n
│   ├── 检查INPUT链
│   └── 检查FORWARD链
└── 检查链路
    ├── 网线连接
    ├── 网卡状态
    └── 交换机状态

1.2 ping通但端口不通

端口不通
├── 检查服务监听
│   ├── ss -tuln | grep 端口
│   ├── netstat -tuln | grep 端口
│   └── 确认服务启动
├── 检查防火墙端口
│   ├── iptables -L -n | grep 端口
│   ├── 检查INPUT链
│   └── 检查FORWARD链
└── 检查NetworkPolicy
    ├── kubectl get networkpolicies
    ├── 检查策略规则
    └── 确认允许访问

2. 间歇性不通

2.1 连接数问题

连接数问题
├── 检查连接数上限
│   ├── ss -s
│   ├── cat /proc/sys/net/core/somaxconn
│   └── 检查应用配置
├── 检查conntrack表
│   ├── sudo conntrack -S
│   ├── cat /proc/sys/net/nf_conntrack_max
│   └── 检查表是否满
└── 检查端口范围
    ├── cat /proc/sys/net/ipv4/ip_local_port_range
    ├── 检查端口是否耗尽
    └── 调整端口范围

2.2 软中断问题

软中断问题
├── 检查软中断CPU
│   ├── cat /proc/softirqs | head -n2
│   ├── mpstat -P ALL 1
│   └── 确认CPU使用率
├── 检查中断亲和性
│   ├── cat /proc/irq/*/smp_affinity_list
│   ├── 检查中断分布
│   └── 调整中断绑定
└── 检查网卡丢包
    ├── ethtool -S eth0 | grep drop
    ├── 检查Ring Buffer
    └── 调整队列大小

3. 延迟高

3.1 网络延迟

网络延迟
├── 检查RTT
│   ├── ping 目标IP
│   ├── 检查基线延迟
│   └── 对比正常值
├── 检查队列延迟
│   ├── tc -s qdisc show dev eth0
│   ├── 检查队列长度
│   └── 调整队列参数
├── 检查重传率
│   ├── ss -ti | grep retrans
│   ├── 检查重传次数
│   └── 分析重传原因
└── 检查CPU软中断
    ├── mpstat -P ALL 1
    ├── 检查软中断分布
    └── 优化中断处理

3.2 应用延迟

应用延迟
├── 检查应用处理时间
│   ├── 应用日志
│   ├── 性能监控
│   └── 分析瓶颈
├── 检查数据库延迟
│   ├── 数据库连接时间
│   ├── 查询执行时间
│   └── 连接池状态
└── 检查缓存命中率
    ├── 缓存统计
    ├── 命中率分析
    └── 缓存配置

4. 吞吐量低

4.1 网络吞吐量

网络吞吐量
├── 检查TCP窗口
│   ├── ss -ti | grep rtt
│   ├── 检查窗口大小
│   └── 调整窗口参数
├── 检查拥塞算法
│   ├── cat /proc/sys/net/ipv4/tcp_congestion_control
│   ├── 测试不同算法
│   └── 选择合适算法
├── 检查MTU
│   ├── ip link show | grep mtu
│   ├── 检查MTU设置
│   └── 避免分片
└── 检查offload特性
    ├── ethtool -k eth0
    ├── 检查GRO/GSO/TSO
    └── 启用offload

4.2 应用吞吐量

应用吞吐量
├── 检查连接池
│   ├── 连接池大小
│   ├── 连接复用
│   └── 连接超时
├── 检查批处理
│   ├── 批处理大小
│   ├── 批处理频率
│   └── 批处理效率
└── 检查零拷贝
    ├── sendfile使用
    ├── io_uring使用
    └── 减少拷贝次数

具体问题排查

问题1:无法建立连接

症状:客户端无法连接到服务器

排查步骤:

  1. 检查服务是否监听

    ss -tuln | grep 端口
    netstat -tuln | grep 端口
    
  2. 检查防火墙规则

    sudo iptables -L -n | grep 端口
    sudo iptables -L -n | grep ACCEPT
    
  3. 检查网络连通性

    ping 服务器IP
    telnet 服务器IP 端口
    
  4. 检查服务状态

    systemctl status 服务名
    journalctl -u 服务名
    

解决方案:

  • 启动服务
  • 配置防火墙
  • 检查网络配置
  • 修复服务配置

问题2:连接超时

症状:连接建立缓慢或超时

排查步骤:

  1. 检查网络延迟

    ping 目标IP
    traceroute 目标IP
    
  2. 检查连接队列

    ss -s
    cat /proc/sys/net/core/somaxconn
    
  3. 检查重传情况

    ss -ti | grep retrans
    cat /proc/net/snmp | grep -i tcp
    
  4. 检查系统负载

    top
    mpstat -P ALL 1
    

解决方案:

  • 优化网络配置
  • 调整连接参数
  • 增加系统资源
  • 优化应用代码

问题3:频繁重传

症状:网络连接不稳定,频繁重传

排查步骤:

  1. 检查网络质量

    ping -c 100 目标IP
    mtr 目标IP
    
  2. 检查MTU设置

    ip link show | grep mtu
    ping -M do -s 1472 目标IP
    
  3. 检查拥塞控制

    cat /proc/sys/net/ipv4/tcp_congestion_control
    ss -ti | grep rtt
    
  4. 检查网卡状态

    ethtool -S eth0 | grep -i error
    ethtool -S eth0 | grep -i drop
    

解决方案:

  • 修复网络问题
  • 调整MTU设置
  • 优化拥塞控制
  • 更换网卡或驱动

问题4:DNS解析慢

症状:域名解析耗时过长

排查步骤:

  1. 检查DNS配置

    cat /etc/resolv.conf
    nslookup 域名
    
  2. 检查DNS服务器

    dig @8.8.8.8 域名
    dig +trace 域名
    
  3. 检查DNS缓存

    systemctl status systemd-resolved
    systemd-resolve --status
    
  4. 检查网络延迟

    ping 8.8.8.8
    ping 1.1.1.1
    

解决方案:

  • 更换DNS服务器
  • 启用DNS缓存
  • 优化网络配置
  • 检查防火墙规则

问题5:Kubernetes网络问题

症状:Pod间无法通信

排查步骤:

  1. 检查Pod状态

    kubectl get pods -o wide
    kubectl describe pod pod-name
    
  2. 检查Service配置

    kubectl get svc
    kubectl get endpoints
    kubectl describe svc service-name
    
  3. 检查NetworkPolicy

    kubectl get networkpolicies
    kubectl describe networkpolicy policy-name
    
  4. 检查CNI配置

    kubectl get nodes -o wide
    kubectl describe node node-name
    

解决方案:

  • 修复Pod配置
  • 调整Service配置
  • 修改NetworkPolicy
  • 检查CNI插件

常用排查工具

网络诊断工具

  • ping: 测试连通性
  • traceroute: 路由追踪
  • tcpdump: 抓包分析
  • wireshark: 图形化抓包
  • netstat: 网络连接状态
  • ss: 套接字统计
  • iftop: 实时流量监控
  • nethogs: 进程流量监控

系统监控工具

  • top: 进程监控
  • htop: 增强版top
  • mpstat: CPU监控
  • iostat: 磁盘监控
  • sar: 系统活动报告
  • vmstat: 虚拟内存统计
  • free: 内存使用情况
  • df: 磁盘使用情况

网络配置工具

  • ip: 网络配置
  • ethtool: 网卡配置
  • iptables: 防火墙配置
  • nftables: 新一代防火墙
  • tc: 流量控制
  • bridge: 网桥管理
  • ovs-vsctl: Open vSwitch管理

预防措施

监控告警

  • 设置网络监控
  • 配置性能告警
  • 定期健康检查
  • 建立监控仪表板

定期维护

  • 更新系统补丁
  • 优化网络配置
  • 清理日志文件
  • 检查硬件状态

备份恢复

  • 配置文件备份
  • 网络拓扑备份
  • 故障恢复预案
  • 定期演练

返回目录 | 上一章:命令速查 | 下一章:学习资源

Prev
附录A:命令速查手册
Next
附录C:学习资源