Linux 面试中如何排查端口占用、连接状态与路由问题

在 Linux 运维和开发岗位的面试中,网络排查能力几乎是必考项。面试官通常会抛出一个模糊的故障场景,比如“服务起不来”“连不上数据库”“访问外网超时”,然后观察你如何一步步定位问题。端口占用、连接状态和路由问题是三类最高频的考点,下面逐一拆解排查思路和常用命令。

一、端口占用排查

端口占用是最常见的“服务起不来”原因。面试中如果被问到“启动服务提示 Address already in use,你怎么查”,可以从以下几个层面回答。

1. 确认端口是否真的被占用

最常用的命令是 sslsof

# 查看所有监听端口
ss -tulnp

# 查看指定端口(如 8080)
ss -tulnp | grep :8080

# 使用 lsof 查看
lsof -i :8080

ssnetstat 的现代替代品,性能更好。参数含义需要记牢:-t 表示 TCP,-u 表示 UDP,-l 表示监听状态,-n 表示不解析域名(显示数字端口),-p 表示显示进程信息(需要 root 权限)。

如果面试官追问“netstatss 有什么区别”,可以回答: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_REUSEADDRSO_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 配置源地址路由,确保回包从正确的网卡出去。

四、综合排查思路

面试官最想听到的不是零散命令,而是一套结构化思路。推荐按以下顺序回答:

  1. 确认现象:是连不上、连得慢,还是时通时断?
  2. 分层排查:从物理层到应用层,先 ping 通不通,再 telnet/nc 测端口,最后看应用日志。
  3. 本机 vs 远端:在本机 curl 127.0.0.1 通不通,区分是服务问题还是网络问题。
  4. 命令组合ss 看状态,tcpdump 抓包,ip route 看路由,iptables 看规则。
  5. 验证修复:改完后用同样命令复测,确认问题解决。
# 快速测试端口连通性
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 面试中如何排查端口占用、连接状态与路由问题

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏