linux网络排查需分层操作:物理层用 ip a、operstate、ethtool 确认链路;协议层分段 ping(127.0.0.1→网关→8.8.8.8→域名);应用层用 ss/netstat 查 端口 、systemctl 查服务、telnet/nc 测连通;疑难问题用tcpdump 抓包分析。

Linux 网络状态检测不靠猜,靠命令组合和逻辑判断。核心是分层排查:物理层→协议层→应用层,每层用对应 工具 快速验证。
看网卡是否在线、IP 配对没
先确认网卡有没有被识别、是否启用、IP 是否正确分配。常用命令:
- ip a(推荐):查看所有 接口 状态、IP、UP/DOWN 标记,比 ifconfig 更现代
- cat /sys/class/net/eth0/operstate:直接读取物理链路状态(up/down)
- ethtool eth0:查双工、速率、连接是否建立(需 root),特别适合怀疑网线或交换机 端口 问题
常见误区:看到 ip a 里有 IP 就以为通了——其实可能只是配置成功,链路没通。务必结合 operstate 或 ethtool 确认“物理连通”。
测通不通:从本地到远端分段验证
别一上来就 ping百度,要像修水管一样分段堵点:
- ping 127.0.0.1:验证本机协议 栈是否正常
- ping 网关 IP(如 192.168.1.1):验证局域网可达性,失败大概率是网卡、网线、交换机或网关问题
- ping 8.8.8.8:绕过dns,验证外网 IP 层连通性
- ping www.baidu.com:最后一步,验证 DNS 解析 + 全链路
如果卡在某一步,就聚焦那一层。比如能 ping 通网关但 ping 不通 8.8.8.8,重点查 路由 表(ip route)或 防火墙(iptables -L -n 或 nft list ruleset)。
查端口和服务:应用层是否真在听
网络通≠服务可用。常见场景:Web 打不开、ssh连不上、数据库 拒绝连接。
- ss -tuln | grep :22:查 22 端口有没有进程监听(-t TCP, -u udp, -l listening, -n 数字端口)
- netstat -tulnp | grep :3306:同上,兼容老系统(需安装 net-tools)
- systemctl is-active sshd:确认服务进程是否运行中
- telnet 192.168.1.100 80 或 nc -zv 192.168.1.100 443:从客户端侧测试端口是否可连(模拟真实访问)
注意:ss 比 netstat 更快更轻量;若 ss 没结果,先确认服务是否启动,再查是否绑定在 127.0.0.1(只本机可连)而非 0.0.0.0(全网可连)。
抓包定位诡异问题:不是所有故障都报错
当 ping 通、端口开着,但业务仍异常(如 http 超时、TLS 握手失败),就得看实际收发了什么包:
- tcpdump -i eth0 host 1.1.1.1 -w debug.pcap:抓指定主机通信,保存为文件供 wireshark 分析
- tcpdump -i any port 53 -nn:监控 DNS 请求响应,排查解析慢或失败
- sudo ss -i:显示 TCP 连接的详细指标(重传、RTT、丢失率),适合怀疑网络质量差
小技巧:加 -nn 跳过 DNS 反解,避免干扰;抓包前先用 ping 或 curl 复现问题,再立刻抓,避免信息过载。
基本上就这些。熟练掌握这四类操作,90% 的 Linux网络问题 都能快速定位。关键是别跳步——先确认物理连通,再查 IP路由,然后验端口,最后抓包。顺序对了,效率翻倍。