跳到主要内容
约 7 分钟6 张卡

Linux 网络排查

Linux 网络排查按解析、连接和应用响应逐层定位。本文负责命令、抓包证据与 netfilter 路径。

1. 面试核心​

先记住这几条,再读正文

2. 分层确认连通性​

层次命令与证据
DNSdig example.com、dig @解析器 example.com
路由ip route get 目标IP 查看出口与源地址
三层路径ping、traceroute、mtr
TCP 端口nc -zv host 443
TLS 与 HTTPcurl -v https://example.com
本机监听ss -lntp 查看地址、端口与进程
防火墙按实际后端检查 iptables 或 nftables 规则

ping 发送 Echo Request,并等待 Echo Reply。time 是往返时间,ttl 是响应包的剩余跳数。初始 TTL 未知时,无法精确推算路径跳数。

序号缺口需结合最终统计判断。抓取时尚未返回的响应也会形成暂时缺口。ICMP 被过滤时,业务 TCP 连接仍能正常工作。

TCP 连接还依赖监听地址、端口及路径策略。只监听 127.0.0.1 的服务只能接受本机回环访问。排查应按实际源地址与目的地址验证。

3. 端口与连接状态​

ss -lntp 'sport = :8080'
lsof -nP -iTCP:8080 -sTCP:LISTEN
ss -s
ss -Hant | awk '{print $1}' | sort | uniq -c | sort -nr
ss -Hant state time-wait | wc -l

精确端口过滤避免把 18080 等端口混入。-H 去掉表头,计数时只统计连接。查看其他用户的进程信息需要相应权限。

状态排查方向
LISTEN地址、端口与监听队列
SYN-RECV握手未完成、丢包与 SYN 请求压力
ESTABLISHED活跃连接及收发队列
CLOSE-WAIT本地关闭路径与阻塞线程
TIME-WAIT短连接速率、端口与内存压力

4. TIME_WAIT 与 CLOSE_WAIT 诊断​

TIME_WAIT 的协议作用和复用条件见 TCP 连接。本篇只处理现场定位。

先确认主动关闭端、目标分布和连接创建速率。短连接多时,检查客户端连接池及代理上游复用。端口不足需结合临时端口范围和目标四元组判断。

Nginx 上游连接复用可显式配置 HTTP/1.1 与 keepalive。是否复用仍取决于请求头和对端行为。配置方式见 Nginx 与负载均衡。

持续 CLOSE_WAIT 表示本地发送方向尚未关闭。先用 ss -antp state close-wait 定位进程和对端。再检查异常分支、流关闭逻辑与线程栈。应用有意半关闭时,也需核对其业务期限。

5. tcpdump 抓包​

tcpdump -i eth0 -nn 'host 10.0.0.2 and tcp port 8080' -c 1000 -w a.pcap
tcpdump -i any -nn 'tcp port 443 and (tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0)'
tcpdump -nn -r a.pcap

-i 指定接口,-nn 关闭名称解析。-c 限制数量,-w 保存原始包。-r 读取已有文件。-s 控制截取长度,-s 0 使用工具支持的最大默认长度。

现象证据边界
只有 SYN尚未看到应答,需继续查目标与回程
收到 RST对端或中间设备主动拒绝或复位
SYN 重传发送方等待确认,需区分去程与回程丢失
接收窗口趋近零接收端提供的缓冲空间不足

单端抓包无法确认包在哪里丢失。双端对比能区分请求未达和响应未返。时间间隔还会受处理延迟、抓包丢失与卸载影响。应结合序列号、重传和工具丢包统计。

6. iptables 规则​

iptables 配置 netfilter 规则。内核在网络路径中提供多个 hook。

内建链主要路径位置
PREROUTING入站后的路由判断前
INPUT送往本机进程
FORWARD经本机转发
OUTPUT本机进程发包
POSTROUTING出站前
表作用
filter过滤与放行
natDNAT、SNAT 和 MASQUERADE
mangle修改标记、TTL 等字段
raw在连接跟踪前处理
security强制访问控制相关规则

同一 hook 的表按内核优先级执行。每条链内再按规则顺序匹配。ACCEPT 结束当前相关过滤处理。后续 hook 仍可丢弃报文。

NAT 规则主要为连接首包建立映射。后续包按 conntrack 保存的映射转换。修改 NAT 规则后,已有连接仍会使用旧映射。

kube-proxy 的 iptables 模式用 DNAT 选择后端。其他代理模式的数据路径不同。模式选择和集群网络见 工作负载、Service 与集群网络。

7. DNS、TLS 与 HTTP 耗时​

curl 的 time 字段多为从请求开始累计的时间。

curl -sS -o /dev/null --connect-timeout 3 --max-time 10 \
-w 'dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} first=%{time_starttransfer} total=%{time_total}\n' \
https://example.com/
curl --resolve example.com:443:192.0.2.10 https://example.com/

一次新的直连 HTTPS 请求可用相邻时间差定位阶段。TCP 时间用 time_connect 减 time_namelookup。TLS 时间用 time_appconnect 减 time_connect。首字节时间还包含请求传输与服务端处理。

重定向、代理和连接复用会改变解释方式。排查时应先固定访问路径。

--resolve 指定连接地址,并保留域名语义。HTTP Host、TLS SNI 与证书校验仍使用原域名。仅访问 IP 再修改 Host,会遗漏 TLS 名称差异。

8 · 面试题卡片​

本页题目与参考回答

8.1 怎样查看某个端口被哪个进程监听?怎样统计服务器上各状态(TIME_WAIT、ESTABLISHED 等)的连接数?​

考察重点

  • ss、lsof 的常用参数。
  • 用管道统计状态;各状态的含义。

相关内容:端口与连接状态。

参考回答

监听 8080 可用 ss -lntp 'sport = :8080'。

-l 选监听,-t 选 TCP,-p 显示进程。-n 关闭名称解析。其他用户进程信息需要相应权限。

统计状态可用 ss -Hant | awk '{print $1}' | sort | uniq -c。-H 去掉表头,避免计数多一行。再按对端、端口和时间趋势缩小异常范围。

8.2 TIME_WAIT 和 CLOSE_WAIT 是什么?服务器上这两种状态过多分别是什么原因,怎样处理?​

考察重点

  • 两个状态分别出现在主动关闭和被动关闭的一方。
  • 结合资源压力判断 TIME_WAIT,并检查 CLOSE_WAIT 关闭路径。

相关内容:TIME_WAIT 与 CLOSE_WAIT 诊断、TCP 连接。

参考回答

TIME_WAIT 保留关闭状态,CLOSE_WAIT 等待应用关闭。

协议细节与内核参数见 TCP 连接。

TIME_WAIT 多时先确认短连接和实际资源压力。检查应用连接池及 Nginx 上游 keepalive。Nginx 可显式配置 HTTP/1.1,配合上游连接复用。

CLOSE_WAIT 持续堆积时,定位进程和对端。再检查关闭路径、异常分支及阻塞线程。半关闭业务也应有完成期限。

8.3 能 ping 通对方 IP,是否说明业务端口一定是通的?ping 的原理是什么,怎样确认端口连通?​

考察重点

  • ICMP 与 TCP 端口是不同的检查;ping 输出各字段的含义。
  • 分层排查的工具;端口不通的常见原因。

相关内容:分层确认连通性。

参考回答

ping 通只能确认 ICMP 回显路径。

业务端口还依赖 TCP 监听与路径规则。nc -zv B 3389 可验证 TCP 建连。HTTP 服务需继续用 curl 验证响应。

ping 的 time 是往返时间,ttl 是剩余跳数。序号和最终统计帮助确认丢包。端口不通时,检查监听地址、防火墙与安全组。再用两端抓包定位去程和回程。

8.4 用 tcpdump 抓 TCP 握手时会用哪些参数?抓包后关注哪些字段?​

考察重点

  • 网卡、过滤表达式、不解析名称、写文件等参数。
  • 从标志位、序列号和时间间隔判断问题位置。

相关内容:tcpdump 抓包。

参考回答

用接口、地址和端口过滤缩小抓包范围。

例如 tcpdump -i eth0 -nn 'tcp port 8080' -c 1000 -w a.pcap。-nn 避免解析干扰,-c 限制数量。

分析 SYN、ACK、FIN、RST 和序列号。只有 SYN 表示当前抓包未看到应答。它不足以确定目标未监听。对比双端抓包,再检查回程路由和策略。接收窗口、重传和时间间隔提供进一步线索。

8.5 iptables 的原理是什么?有哪些表和链?工作在网络的哪一层?Kubernetes 中哪里用到了 DNAT?​

考察重点

  • netfilter 的五个挂载点与常用表的用途。
  • 工作层次与连接跟踪;kube-proxy 的 DNAT 与 IPVS 的区别。

相关内容:iptables 规则。

参考回答

iptables 配置 netfilter 的过滤与转换规则。

五条主要内建链对应入站、本地和转发路径。filter 用于过滤,nat 用于地址转换。mangle 修改报文属性,raw 在连接跟踪前处理。

规则可匹配 IP、端口和连接状态。这些匹配覆盖网络层与传输层。conntrack 保存状态及 NAT 映射。路由表则选择下一跳和出口。

Kubernetes 的 iptables 代理模式用 DNAT 转到端点。IPVS 等模式有各自实现。

8.6 怎样区分 DNS、TLS 与应用响应慢?为什么只改 Host 头还不够?​

考察重点:累计时间差、SNI 与指定解析。

相关内容:DNS、TLS 与 HTTP 耗时。

参考回答

先用 curl 的 time 字段区分请求阶段。

新建直连 HTTPS 可通过相邻时间差估算耗时。首字节时间包含请求传输和服务端处理。访问 IP 只改 Host,TLS SNI 仍会不同。使用 --resolve 可固定 IP,同时保留域名与证书校验。

9. 参考资料​