欢迎光临
我们一直在努力

第十二篇:《网络排查工具:netstat、ss、tcpdump、Wireshark》

网络问题排查的本质是“看数据包怎么走的、在哪里丢了、为什么慢了”。netstat 和 ss 帮你查看连接状态和统计信息,tcpdump 和 Wireshark 让你深入数据包内部观察每一个细节。本文详细讲解这四款工具的核心用法、TCP 状态机的实际意义、以及如何通过抓包分析定位网络延迟和丢包问题。

一、netstat vs ss:连接状态查看器
1.1 netstat(经典但已过时)
netstat 是传统的网络统计工具,但它逐行读取 /proc/net/ 下的文件,在连接数较多时(如 > 1000)性能极差,且输出信息有限。

常用命令:

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

# 查看所有 TCP 连接
netstat -ant

# 查看网络统计信息(重传、丢包等)
netstat -s

1.2 ss(现代替代,推荐)
ss(Socket Statistics)直接通过内核的 Netlink 接口获取数据,速度快、信息丰富,是 netstat 的完全替代品。

常用命令:

命令含义
ss -tulnp查看所有监听的 TCP/UDP 端口(-t TCP, -u UDP, -l 监听, -n 数字, -p 进程)
ss -ant查看所有 TCP 连接(-a 所有,-n 数字)
ss -ant | grep ESTAB查看已建立的连接
ss -ant | grep TIME-WAIT查看处于 TIME-WAIT 状态的连接数量
ss -ti显示 TCP 连接的详细信息(拥塞窗口、重传超时等)

示例输出:

$ ss -ti
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.100:5432 192.168.1.50:45678
cubic wscale:7,7 rto:204 rtt:0.5/0.25 cwnd:10 send 10.0Mbps rcv_space:14600

关键信息:

cwnd:拥塞窗口大小。如果很小(如 2-3),说明网络拥塞或发送端受限。

rtt:往返时间。持续增大说明网络延迟增加。

rto:重传超时时间。频繁超时说明丢包严重。

1.3 TCP 状态机与常见问题状态
TCP 连接在不同阶段会处于不同的状态。理解这些状态是排查连接问题的基本功。

text
[CLOSED] –(主动打开)–> [SYN_SENT]
[LISTEN] –(被动打开)–> [SYN_RECV] –(三次握手完成)–> [ESTABLISHED]
[ESTABLISHED] –(主动关闭)–> [FIN_WAIT_1] –> [FIN_WAIT_2] –> [TIME_WAIT] –> [CLOSED]
[ESTABLISHED] –(被动关闭)–> [CLOSE_WAIT] –> [LAST_ACK] –> [CLOSED]
需要重点关注的状态:

状态含义风险信号
SYN_RECV服务端收到 SYN,等待 ACK 完成三次握手大量 SYN_RECV(> 几百)可能遭受 SYN Flood 攻击
TIME_WAIT主动关闭方等待 2MSL 以确保 ACK 被收到大量 TIME_WAIT(> 几万)可能导致 端口耗尽,无法新建连接
CLOSE_WAIT被动关闭方等待应用程序调用 close()大量 CLOSE_WAIT 表示应用程序没有正确关闭 socket(代码 bug)

TIME_WAIT 调优(适用于高并发短连接场景):

# 启用 TCP 时间戳,允许 TIME_WAIT 复用(需谨慎,仅在 NAT 环境外使用)
sysctl net.ipv4.tcp_tw_reuse=1
# 注意:tcp_tw_recycle 已在 Linux 4.12+ 中移除,不再使用。

二、tcpdump:命令行抓包神器
tcpdump 是 Linux 上最强大的命令行抓包工具,适合在无法使用图形界面的服务器上排查网络问题。

2.1 基本用法

# 抓取所有经过 eth0 接口的包(-i 指定网卡)
tcpdump -i eth0

# 抓取特定主机的包
tcpdump host 192.168.1.100

# 抓取特定端口的包
tcpdump port 80

# 抓取 TCP 包并显示详细信息(-v 详细,-n 不解析域名)
tcpdump -i any -nn -v tcp port 443

2.2 常用过滤器(BPF 语法)
过滤器含义
host 10.0.0.1源或目标 IP 为 10.0.0.1
src host 10.0.0.1源 IP 为 10.0.0.1
dst port 80目标端口为 80
tcp[tcpflags] & tcp-syn != 0抓取 TCP SYN 包(三次握手)
icmp抓取 ICMP 包(如 ping)
not arp排除 ARP 广播包

2.3 保存和读取 pcap 文件

# 抓包并保存到文件(-w 写入)
tcpdump -i eth0 -w capture.pcap

# 读取 pcap 文件(-r 读取)
tcpdump -r capture.pcap

# 限制抓包数量(-c 100 表示只抓 100 个包)
tcpdump -c 100 -w sample.pcap

2.4 实战:抓取 TCP 三次握手

tcpdump -i any -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' -c 10

输出示例:

text
13:45:01.123456 IP 192.168.1.10.54321 > 10.0.0.1.80: Flags [S], seq 123456789
13:45:01.123567 IP 10.0.0.1.80 > 192.168.1.10.54321: Flags [S.], seq 987654321, ack 123456790
13:45:01.123678 IP 192.168.1.10.54321 > 10.0.0.1.80: Flags [.], ack 987654322
[S] = SYN(发起连接)

[S.] = SYN-ACK(响应连接)

[.] = ACK(确认)

如果只看到 [S] 而没有 [S.] 和 [.],说明对端未响应——可能是防火墙拦截或服务未启动。

三、Wireshark / TShark:数据包分析的高级武器
Wireshark 是图形化的网络分析工具,功能强大,适合从 pcap 文件中进行深入分析。在无图形界面的服务器上,可使用其命令行版本 tshark。

3.1 安装

# Ubuntu/Debian
sudo apt install wireshark tshark

# CentOS/RHEL(需 EPEL)
sudo yum install wireshark

3.2 tshark 命令行用法(远程服务器适用)

# 抓包并保存为 pcap(相当于 tcpdump)
tshark -i eth0 -w capture.pcap

# 读取 pcap 并显示层级信息(-Y 过滤)
tshark -r capture.pcap -Y "tcp.port==80" -T fields -e ip.src -e tcp.srcport -e tcp.flags

3.3 Wireshark GUI 核心功能
专家信息(Expert Info) :自动标记出重传、零窗口、Dup ACK 等异常事件。打开方式:分析 -> 专家信息。

TCP 流图(TCP Stream Graph) :绘制 TCP 序列号随时间的变化曲线,直观判断是否有重传或乱序。打开方式:统计 -> TCP 流图。

时间线分析:查看数据包之间的间隔,快速发现延迟点。

四、实战案例:Nginx 响应慢,用 tcpdump 定位重传
现象:用户反馈 Nginx 服务偶尔响应很慢,但 top 和 iostat 都显示正常。

排查步骤:

在 Nginx 服务器上抓包(持续 30 秒,捕获端口 80 或 443):

bash
tcpdump -i any port 80 -w nginx-slow.pcap
用 Wireshark 打开 nginx-slow.pcap,打开 专家信息(Expert Info) 。

观察是否有大量 TCP Retransmission(重传)或 Zero Window(零窗口)。

如果发现大量重传:说明网络层有丢包,需检查交换机或防火墙。

如果发现零窗口:说明 Nginx 应用读取速度跟不上发送速度(接收缓冲区满),需检查 Nginx 配置(如 proxy_buffer)或后端应用响应速度。

进一步分析:用 TCP 流图 查看序列号抖动,判断延迟是发生在三次握手阶段(连接建立慢)还是数据传输阶段(数据发送慢)。

五、小结
netstat 已过时,ss 是更快的现代替代,重点查看 TIME_WAIT(端口耗尽)和 CLOSE_WAIT(代码 bug)。

tcpdump 是服务器端抓包的必备工具,结合 BPF 过滤器可精准捕获目标流量。

Wireshark/tshark 提供专家级的分析能力,自动识别重传、零窗口等异常。

核心排查路径:先用 ss 查看连接状态和统计信息 → 发现异常后用 tcpdump 抓取数据包 → 用 Wireshark 深入分析包级细节。

赞(0)
未经允许不得转载:171主机测评 » 第十二篇:《网络排查工具:netstat、ss、tcpdump、Wireshark》
分享到: 更多 (0)

评论 抢沙发

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