在 Linux 运维和开发岗位的面试中,网络排查能力几乎是必考项。面试官通常会抛出一个模糊的故障场景,比如“服务起不来”“连不上数据库”“访问外网超时”,然后观察你如何一步步定位问题。端口占用、连接状态和路由问题是三类最高频的考点,下面逐一拆解排查思路和常用命令。
一、端口占用排查
端口占用是最常见的“服务起不来”原因。面试中如果被问到“启动服务提示 Address already in use,你怎么查”,可以从以下几个层面回答。
1. 确认端口是否真的被占用
最常用的命令是 ss 和 lsof:
# 查看所有监听端口
ss -tulnp
# 查看指定端口(如 8080)
ss -tulnp | grep :8080
# 使用 lsof 查看
lsof -i :8080
ss 是 netstat 的现代替代品,性能更好。参数含义需要记牢:-t 表示 TCP,-u 表示 UDP,-l 表示监听状态,-n 表示不解析域名(显示数字端口),-p 表示显示进程信息(需要 root 权限)。
如果面试官追问“netstat 和 ss 有什么区别”,可以回答:netstat 通过读取 /proc/net 下的文件获取信息,连接数多时性能差;ss 直接使用 netlink 接口,效率更高,在高并发场景下优势明显。
2. 定位占用进程并处理
找到 PID 后,进一步确认进程身份:
ps -fp <PID>
# 或
cat /proc/<PID>/cmdline
处理方式要分情况讨论:
- 确认是废弃进程:
kill <PID>,必要时kill -9。 - 是重要服务但端口冲突:修改配置文件更换端口,而不是直接杀进程。
- 端口被 TIME_WAIT 状态占用:这不是真正的“占用”,而是内核保留了连接状态。可以通过
ss -tan state time-wait查看,必要时调整net.ipv4.tcp_tw_reuse参数。
3. 面试加分点
提到 SO_REUSEADDR 和 SO_REUSEPORT 的区别:前者允许绑定处于 TIME_WAIT 的地址,后者允许多个进程绑定同一端口做负载均衡。能主动说出这两个 socket 选项,通常会让面试官眼前一亮。
二、连接状态排查
“服务在监听,但客户端连不上”是第二类高频问题。排查核心是理解 TCP 连接的状态机。
1. 查看连接状态分布
# 统计各状态连接数
ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c
# 查看与某个 IP 的连接
ss -tan | grep 192.168.1.100
常见状态及含义:
- LISTEN:服务端正在监听。
- ESTABLISHED:连接已建立,正常通信。
- SYN_SENT:客户端发了 SYN,等待服务端响应。大量此状态通常意味着服务端未响应或网络不通。
- SYN_RECV:服务端收到 SYN,发了 SYN-ACK,等待客户端 ACK。大量此状态可能是 SYN Flood 攻击。
- TIME_WAIT:主动关闭方等待 2MSL,属于正常状态,但过多会耗尽本地端口。
- CLOSE_WAIT:被动关闭方未调用 close()。大量 CLOSE_WAIT 说明应用程序有 bug,没有正确关闭连接。
2. 抓包验证
当状态异常但原因不明时,tcpdump 是终极武器:
# 抓取指定端口的数据包
tcpdump -i eth0 -nn port 8080 -w /tmp/cap.pcap
# 只看 SYN 包
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'
面试中如果能说出“通过抓包看三次握手是否完成,可以区分是网络问题还是应用问题”,会显得很有实战经验。
3. 防火墙与安全组
连接问题经常出在防火墙:
# 查看 iptables 规则
iptables -L -n -v
# 查看 firewalld 状态
firewall-cmd --list-all
云服务器还要检查安全组规则,这是面试中容易被忽略但实际工作中极高频的排查点。
三、路由问题排查
“能 ping 通 IP 但访问不了域名”或“内网通外网不通”属于路由问题。
1. 查看路由表
ip route show
# 或
route -n
输出中需要关注:
- default via:默认网关是否正确。
- 目标网段:是否有到目标网络的明细路由。
- metric:多条路由时的优先级。
2. 路由追踪
traceroute 8.8.8.8
# 或使用更现代的
tracepath 8.8.8.8
traceroute 默认用 UDP,很多防火墙会丢弃,可以改用 ICMP:traceroute -I 8.8.8.8。如果某一跳之后全是 *,说明问题出在该节点之后。
3. DNS 解析排查
路由问题常与 DNS 混淆。区分方法:
# 直接 ping IP,通说明路由没问题
ping 8.8.8.8
# ping 域名不通,检查 DNS
nslookup example.com
dig example.com
cat /etc/resolv.conf
如果 IP 通而域名不通,问题在 DNS 而非路由。
4. 策略路由与多网卡
服务器有多张网卡时,可能存在策略路由:
ip rule show
ip route show table <table_id>
面试中如果被问到“双网卡服务器回包走错网卡怎么办”,可以回答通过 ip rule 配置源地址路由,确保回包从正确的网卡出去。
四、综合排查思路
面试官最想听到的不是零散命令,而是一套结构化思路。推荐按以下顺序回答:
- 确认现象:是连不上、连得慢,还是时通时断?
- 分层排查:从物理层到应用层,先
ping通不通,再telnet/nc测端口,最后看应用日志。 - 本机 vs 远端:在本机
curl 127.0.0.1通不通,区分是服务问题还是网络问题。 - 命令组合:
ss看状态,tcpdump抓包,ip route看路由,iptables看规则。 - 验证修复:改完后用同样命令复测,确认问题解决。
# 快速测试端口连通性
nc -zv 192.168.1.100 3306
# 或
telnet 192.168.1.100 3306
五、常见面试追问
- TIME_WAIT 过多怎么办? 调整
net.ipv4.tcp_tw_reuse=1,或让客户端主动关闭连接,使用连接池。 - CLOSE_WAIT 过多说明什么? 应用程序未正确关闭 socket,检查代码中的 close() 调用。
- 如何查看某个进程打开了哪些端口?
ss -tulnp | grep <PID>或lsof -p <PID>。 - 路由表和 ARP 表的关系? 路由表决定下一跳 IP,ARP 表将下一跳 IP 解析为 MAC 地址。
掌握以上命令和思路,不仅能应对面试,也能在实际故障排查中快速定位问题。建议在实验环境中多动手复现各类场景,形成肌肉记忆。
未经允许不得转载:任鹏个人博客 » Linux 面试中如何排查端口占用、连接状态与路由问题

