1. ICMP 层
1.1 icmp_echo_ignore_all 参数
# 检查是否禁用了 ICMP 回应
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
# 0 表示响应,1 表示忽略所有 ICMP echo 请求
1.2 ICMP checksum 错误
# 查看 ICMP 校验和错误计数
cat /proc/net/snmp | grep Icmp
# 重点关注 InCsumErrors 字段
1.3 其他 ICMP 相关参数
# 忽略广播 ping
cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# ICMP 速率限制
cat /proc/sys/net/ipv4/icmp_ratelimit
cat /proc/sys/net/ipv4/icmp_ratemask
2. IP 层
2.1 iptables 防火墙规则
# 查看 iptables 规则
iptables -L -n -v
iptables -t nat -L -n -v
iptables -t mangle -L -n -v
# 查看具体的 DROP/REJECT 计数
iptables -L -n -v | grep -E "DROP|REJECT"
2.2 rp_filter 反向路径过滤
# 检查反向路径过滤设置
cat /proc/sys/net/ipv4/conf/all/rp_filter
cat /proc/sys/net/ipv4/conf/default/rp_filter
cat /proc/sys/net/ipv4/conf/eth0/rp_filter # 具体网卡
2.3 路由问题
# 查看路由表
ip route show
ip rule show
# 查看策略路由
ip route show table all
2.4 IP 转发设置
# 检查 IP 转发是否开启(作为网关时需要)
cat /proc/sys/net/ipv4/ip_forward
3. 链路层
3.1 TC (Traffic Control) 规则
# 查看 tc 规则
tc qdisc show
tc filter show
tc class show
3.2 TC 队列满
# 查看队列统计信息和丢包计数
tc -s qdisc show
# 重点关注 dropped 字段
3.3 网卡硬件问题
# 查看网卡统计信息
ip -s link show
ethtool -S eth0 # 查看详细硬件统计
# 查看网卡驱动信息
ethtool -i eth0
# 查看 Ring Buffer 设置
ethtool -g eth0
3.4 网卡中断问题
# 查看中断分布
cat /proc/interrupts | grep eth0
# 查看 CPU 亲和性设置
cat /proc/irq/[irq_number]/smp_affinity
4. 中间网络或对端问题
4.1 MTU 问题
# 测试不同大小的包
ping -M do -s 1472 目标IP # 禁止分片测试 MTU
# 查看接口 MTU
ip link show
4.2 网络延迟和丢包
# 使用 mtr 综合诊断
mtr 目标IP
# 使用 traceroute 追踪路径
traceroute 目标IP
5. 其他情况
5.1 MAC 地址变化/冲突
# 查看 ARP 缓存
ip neigh show
arp -n
# 监控 ARP 变化
arpwatch
5.2 ARP 表项满
# 查看 ARP 表大小限制
cat /proc/sys/net/ipv4/neigh/default/gc_thresh1
cat /proc/sys/net/ipv4/neigh/default/gc_thresh2
cat /proc/sys/net/ipv4/neigh/default/gc_thresh3
# 查看当前 ARP 表项数
ip neigh show | wc -l
5.3 ARP 无应答
# 手动发送 ARP 请求
arping -c 3 目标IP
# 查看 ARP 超时设置
cat /proc/sys/net/ipv4/neigh/default/base_reachable_time
5.4 CPU 负载过高
# 查看 CPU 使用情况
top
htop
mpstat -P ALL 1
# 查看软中断
cat /proc/softirqs
watch -n 1 'cat /proc/softirqs'
5.5 收发网卡不一致(非对称路由)
# 抓包确认收发路径
tcpdump -i any -n icmp
tcpdump -i eth0 -n icmp
tcpdump -i eth1 -n icmp
5.6 收发 MAC 不一致
# 查看网卡 MAC 地址
ip link show
# 检查是否有 MAC 地址伪装
5.7 IP 地址冲突
# 使用 arping 检测 IP 冲突
arping -D -I eth0 -c 3 本机IP
# 查看系统日志
dmesg | grep -i "duplicate"
journalctl -xe | grep -i "duplicate"
6. 补充诊断方法
6.1 内核参数检查
# 检查连接跟踪表
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_count
# 检查 TIME_WAIT 相关参数
cat /proc/sys/net/ipv4/tcp_tw_reuse
cat /proc/sys/net/ipv4/tcp_tw_recycle
6.2 SELinux/AppArmor
# 检查 SELinux 状态
getenforce
# 查看 SELinux 日志
ausearch -m avc -ts recent
6.3 网络命名空间
# 查看网络命名空间
ip netns list
# 在特定命名空间执行 ping
ip netns exec <namespace> ping 目标IP
6.4 虚拟化环境特有问题
# 检查网桥设置
brctl show
bridge link show
# 检查 OVS(Open vSwitch)
ovs-vsctl show
6.5 诊断工具使用
# 使用 ss 查看 socket 统计
ss -s
# 使用 netstat 查看网络统计
netstat -s
# 使用 nstat 查看网络统计变化
nstat -az
# 实时监控网络流量
iftop -i eth0
nethogs
6.6 系统日志排查
# 查看系统日志
journalctl -xe
tail -f /var/log/messages
tail -f /var/log/syslog
7. 系统化排查流程
- 确认基本连通性
- ping 127.0.0.1(本地回环)
- ping 本机 IP
- ping 网关
- ping 外网
- 逐层排查
- 从物理层开始(网线、网卡状态)
- 链路层(ARP、MAC)
- 网络层(路由、防火墙)
- 传输层(如果涉及 TCP/UDP)
- 对比测试
- 其他机器是否能 ping 通
- 反向 ping 是否正常
- 其他协议是否正常(如 TCP 80 端口)
- 抓包分析
分析包的往返路径
在本机抓包看是否发出 ICMP 请求
在对端抓包看是否收到请求
本文版权归原作者zhaofujian所有,采用 CC BY-NC-ND 4.0 协议进行许可,转载请注明出处。