linux网络故障排查应自下而上分层验证:先用 ip link show 检查物理层连通性,再通过 ip addr show 和 ping 本机 IP 确认 IP 配置与本地协议 栈,接着测试网关可达性及 dns 解析,最后用curl、mtr、nc 等验证端到端服务连通性。

Linux 网络状态检测不需要死记命令,关键在于分层排查——从物理层到应用层逐级验证,能快速定位绝大多数问题。下面这套流程覆盖有线、无线、容器、云主机等全部常见场景,不依赖特定 工具,用系统自带命令就能完成。
检查物理连接与网卡基础状态
先确认硬件和驱动是否就绪,这是所有网络通信的前提。
- 运行 ip link show 查看网卡是否存在、是否 UP(注意不是“UP”而是“state UP”),比如 enp0s3:
表示链路已通 - 若显示 NO-CARRIER 或 DOWN,检查网线 /Wi-Fi 开关、网卡驱动(lspci | grep -i net)、或执行 sudo ip link set enp0s3 up 尝试启用
- 无线网卡额外用 iw dev 和 iw dev wlan0 link 确认是否已关联到 AP
验证 IP 配置与本地连通性
有了物理连接,再看是否正确获取了 IP 地址并能响应本机请求。
- 用 ip addr show 检查是否有有效 IPv4 地址(非 169.254.x.x 或 0.0.0.0),特别留意子网掩码是否匹配预期
- 执行 ping -c 3 127.0.0.1 测试协议 栈;再 ping -c 3 [本机 IP] 验证 接口 回环能力
- 若失败,可能是 NetworkManager 冲突、systemd-networkd 未启动,或 防火墙 拦截了 ICMP(临时关掉:sudo ufw disable 或 sudo systemctl stop firewalld)
测试网关可达性与 DNS 解析能力
能通本机不代表能上网,必须确认能否到达出口网关,并能将域名转为 IP。
- 从 ip route | grep default 找出默认网关,然后 ping -c 3 [网关 IP] ——不通说明 路由 或上联设备问题
- 用 nslookup google.com 或 dig +short github.com 测试 DNS;若超时或返回空,检查 /etc/resolv.conf 内容是否合理(如含 nameserver 8.8.8.8)
- 容器或云主机中常见 DNS 被覆盖问题,可用 cat /run/systemd/resolve/resolv.conf 对比真实生效的解析配置
端到端服务连通性与路径分析
前面都正常,但业务仍不可用?需要模拟真实访问路径,区分是网络层阻断还是应用层拒绝。
- 用 curl -v http://example.com 查看 HTTP 响应头和连接阶段(DNS→TCP→TLS→HTTP),比单纯 ping 更贴近实际
- 怀疑中间设备限速或丢包?运行 mtr -rwc 10 example.com 获取全路径跳点延迟与丢包率,比 traceroute 更实用
- 若目标 端口 不通(如 ssh 22、Web 80),用 nc -zv example.com 443 直接测 端口 连通性,避免被 HTTP 重定向干扰判断
基本上就这些。整套流程不复杂但容易忽略层级关系——比如 DNS 失败时反复 ping 域名毫无意义,因为根本没走到网络层。养成从下往上查的习惯,90% 的网络故障三分钟内可初判。