当前位置:首页>Linux>从应用到网卡:Linux网络栈7层排查全景图

从应用到网卡:Linux网络栈7层排查全景图

  • 2026-09-30 23:30:29
从应用到网卡:Linux网络栈7层排查全景图

在真实线上环境中,网络问题通常是这样出现的:

  • 用户访问接口 突然变慢

  • API 请求 偶尔超时

  • 服务之间 调用失败

  • Kubernetes Pod 偶发连接断开

很多工程师的排查方式是:

pingcurl
如果不行就开始 重启服务、怀疑网络、怀疑人生。

但真正成熟的排查方式是:

从应用层 → 一直向下排查到网卡层。

因为绝大多数问题 最先表现为应用异常。

这篇文章会给你一套完整方法:

从第7层 → 第1层逐层定位问题,同时配套 Linux 工具全景图。


一、Linux 网络栈 7 层工具地图(从上往下)

工程师最实用的网络排查视角:

+-----------------------------+| 7 应用层   HTTP / DNS      |  curl httpie dig+-----------------------------+| 6 表示层   TLS / SSL       |  openssl s_client+-----------------------------+| 5 会话层   Session / TCP   |  ss netstat+-----------------------------+| 4 传输层   TCP / UDP       |  ss tcpdump+-----------------------------+| 3 网络层   IP / Routing    |  ip traceroute mtr+-----------------------------+| 2 数据链路  ARP / MAC      |  arp tcpdump+-----------------------------+| 1 物理层   NIC / 带宽      |  ethtool iftop+-----------------------------+
排查原则:

从应用层往下,一层层验证。

因为:

  • 如果 HTTP 都不通说明问题可能在 任意一层

  • 但如果 TCP 都不通说明问题一定在 更底层


二、第 7 层:应用层(HTTP / DNS)

这是 绝大多数问题的入口层。

典型问题:

  • API 请求慢

  • HTTP 返回 500

  • DNS 解析失败

常用工具:

1 curl(HTTP 调试神器)

测试接口:

curl -v https://example.com
输出:
> GET / HTTP/1.1> Host: example.com< HTTP/1.1 200 OK
-v 可以看到:
  • DNS 解析

  • TCP 连接

  • TLS 握手

  • HTTP 请求

如果请求慢,可以使用:

curl -o /dev/null -s -w "DNS: %{time_namelookup}sTCP: %{time_connect}sTLS: %{time_appconnect}sTTFB: %{time_starttransfer}sTOTAL: %{time_total}s" http://example.com
示例输出:
DNS: 0.017310sTCP: 0.046498sTLS: 0.168062sTTFB: 0.211482sTOTAL: 0.211935s
可以定位:
  • DNS 慢

  • TCP 慢

  • 服务慢


2 dig(DNS 诊断)

DNS问题非常常见。

查询解析:

dig example.com
输出:
ANSWER SECTION:example.com 300 IN A 142.250.72.14

如果 DNS 异常:

connection timed out
说明:
  • DNS server 不可达

  • 或网络问题


三、第 6 层:表示层(TLS / SSL)

很多线上问题其实是:

TLS 握手失败

例如:

  • HTTPS 无法连接

  • Java SSLHandshakeException

Linux 最好用的工具:

openssl

测试 TLS:

openssl s_client -connect example.com:443
输出:
SSL handshake has read 3123 bytesVerify return code: 0 (ok)
如果失败:
handshake failure
可能原因:
  • TLS 版本不兼容

  • 证书错误

  • cipher 不支持


四、第 5 层:会话层(连接状态)

这一层关注:

TCP 连接生命周期

常见问题:

  • 连接泄漏

  • keepalive 异常

  • 连接过多

核心工具:

ss

查看连接:

ss -ant
示例:
ESTABSYN-SENTTIME-WAIT
统计:
ss -s
输出:
TCP:estab 120timewait 300
如果:
TIME_WAIT非常多

说明:

  • 短连接过多

  • 连接复用不合理


五、第 4 层:传输层(TCP / UDP)

这一层关注:

端口与连接

典型问题:

  • 服务没监听

  • 端口被占用

  • SYN backlog 满

查看监听端口:

ss -lntp
输出:
LISTEN 0 128 0.0.0.0:8080
含义:
服务监听 8080
如果端口不存在:

说明:应用根本没启动


六、第 3 层:网络层(IP / 路由)

这一层负责:

  • IP 地址

  • 路由

  • 跨网段通信

常见问题:

  • 路由错误

  • NAT 问题

  • 网络不通


查看 IP

ip addr
示例:
inet 192.168.1.10/24

查看路由

ip route
输出:
default via 192.168.1.1 dev eth0
如果没有 default route:所有外网都不通。

traceroute

查看网络路径:

traceroute example.com
输出:
1 192.168.1.12 10.1.0.13 72.14.233.1
可以看到:

哪一跳延迟或丢包。


mtr(更强)

mtr是traceroute+ping的结合。

mtr example.com
输出:
Host      Loss%  Avgrouter     0%   1.2msisp-node   5%   20ms

七、第 2 层:数据链路层(ARP / MAC)

局域网通信依赖:

ARP表

常见问题:

  • ARP 冲突

  • MAC 改变

  • 虚拟网络错误

查看 ARP:

arp -n
或:
ip neigh
示例:
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55
如果出现:
INCOMPLETEFAILED
说明:

ARP 解析失败。


抓 ARP 包

tcpdump -i eth0 arp
示例:
Who has 192.168.1.1? Tell 192.168.1.10
可以发现:
  • ARP 风暴

  • ARP 欺骗


八、第 1 层:物理层(网卡)

最底层的问题:

  • 网卡故障

  • 带宽打满

  • duplex mismatch


查看网卡状态

使用 ethtool:

ethtool eth0
输出:
Speed: 1000Mb/sDuplex: FullLink detected: yes
关键指标:
字段
含义
Speed
网卡速率
Duplex
全双工/半双工
Link detected
链路是否连接

查看带宽

使用iftop:

sudo iftop
显示实时流量:
10.0.0.1 => 10.0.0.2  200Mb
可以快速发现:
  • 哪个IP占满带宽

  • 是否有异常流量


九、跨越所有层的终极工具:tcpdump

如果前面工具都没找到问题:

一定要抓包。

抓HTTP:

tcpdump -i eth0 port 80
抓TCP SYN:
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
抓DNS:
tcpdump port 53
tcpdump的核心作用:

看到真实的网络包。

只要包在网络中存在:

tcpdump就能看到。


十、完整排查流程

真实线上问题排查流程:

1 应用层curl2 TLSopenssl3 会话层ss4 传输层ss -lnt5 网络层ip routetraceroute6 链路层arp7 物理层ethtooliftop
如果还找不到:
tcpdump

十一、总结

Linux 网络排查的核心思想:

从应用层一路向下,直到网卡。

完整工具链:

应用层   curl dig表示层   openssl会话层   ss传输层   ss网络层   ip traceroute mtr链路层   arp物理层   ethtool iftop抓包     tcpdump
真正的工程师调试网络时会记住一句话:

网络没有玄学,只有没抓到的包。


文章推荐
tcpdump常用命令详解
HTTPie:比curl更懂人的HTTP调试工具
curl工程级用法30例|把HTTP调试、排障、自动化,一次讲透

最新文章

随机文章