0

0

LinuxTCP连接状态解析_网络异常定位方法【教程】

舞姬之光

舞姬之光

发布时间:2026-01-03 17:45:08

|

725人浏览过

|

来源于php中文网

原创

用 ss 命令查看 TCP 连接状态:ss -tn 列出非监听连接,ss -tln 查看监听端口,ss -tan state time-wait | wc -l 统计 TIME-WAIT 数量;TIME-WAIT 过多需结合应用行为分析,ESTABLISHED 突增应排查连接泄漏或网络中断,SYN-RECEIVED/FIN-WAIT-2 堆积反映收发不一致,须配合 ss -tni 查重传与 RTO 综合判断。

linuxtcp连接状态解析_网络异常定位方法【教程】

怎么看当前 TCP 连接状态?

直接用 ss,别用过时的 netstat。后者依赖 /proc/net/tcp 解析,慢且不准;ss 从内核 socket 子系统直接读取,快、准、支持过滤。

  • ss -tn:列出所有 TCP 连接(不含监听端口
  • ss -tln:只看监听中的端口(-l 表示 listening,-n 禁用域名解析)
  • ss -tan state time-wait | wc -l:统计 TIME-WAIT 连接数
  • -o 可看连接超时时间,加 -i 可看重传、RTT 等底层指标

TIME-WAIT 太多是不是有问题?

不一定。Linux 默认保持 TIME-WAIT 状态 60 秒(2×MSL),这是协议要求,防止旧包干扰新连接。但若 ss -tan state time-wait | wc -l 持续 >5000,就得查原因。

  • 常见诱因:client 主动断连频繁(如短连接 HTTP 调用未复用)、后端服务关闭连接太急(没等 client 发 FIN)、负载均衡器配置了不合理的健康检查频率
  • 临时缓解可调 /proc/sys/net/ipv4/tcp_tw_reuse(设为 1),允许把处于 TIME-WAIT 的端口用于新 outbound 连接——但仅对 client 场景有效,server 不适用
  • 真正根治要改应用行为:启用 HTTP Keep-Alive、用连接池、避免每请求都 close()

ESTABLISHED 连接数突增但业务没涨?

大概率是连接泄漏或半开连接堆积。先确认是否真 ESTABLISHED:ss -tn state established | head -20 看源/目标 IP 和端口分布。

  • 如果大量连接来自同一 client IP + 不同源端口 → 可能是该 client 没正确 close,或网络中间设备(如防火墙)悄悄中断了连接,但 server 还在等数据
  • 如果连接集中在某几个 server 端口 → 检查对应进程是否卡住(strace -p $(pidof your_app) 看是否阻塞在 recv()accept()
  • ss -tni 查看每个连接的 retrans(重传次数)和 rto(超时时间):若 retrans > 3,说明链路丢包或对端响应慢

为什么连接卡在 SYN-RECEIVED 或 FIN-WAIT-2?

这两个状态暴露的是两端行为不一致问题,不是单纯“连不上”。

Zeemo AI
Zeemo AI

一款专业的视频字幕制作和视频处理工具

下载
  • SYN-RECEIVED 堆积:server 收到 SYN,发了 SYN+ACK,但没收到 client 的 ACK。常见于 client 网络不可达、防火墙拦截了 ACK、或 client 发送窗口满导致 ACK 延迟
  • FIN-WAIT-2 长期存在:server 发了 FIN,client 回了 ACK,但 client 没发自己的 FIN。本质是 client 应用没调用 close() 或崩溃后未清理 socket —— 此时 server 会等 /proc/sys/net/ipv4/tcp_fin_timeout(默认 60 秒)后强制关闭
  • 注意:FIN-WAIT-2 在无 SO_LINGER 设置时不会自动转 CLOSE,得靠 timeout;而 CLOSE-WAIT 堆积才是 server 自身没调 close() 的铁证
ss -tn state fin-wait-2 | awk '{print $5}' | sort | uniq -c | sort -nr | head -5

这条命令能快速定位哪类 client 最容易卡在 FIN-WAIT-2,方便针对性排查客户端逻辑或网络策略。

状态本身没“好坏”,关键看持续时间和上下文。盯着一个状态猛查不如结合 ss -tni 的重传、RTO、queue size 一起看——TCP 状态只是表象,背后永远是收发行为、超时设置、网络质量三者在博弈。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

379

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

566

2023.08.10

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

296

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

392

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1343

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1825

2024.08.16

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1345

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

700

2023.06.29

python设置中文版教程合集
python设置中文版教程合集

本专题整合了python改成中文版相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.6万人学习

Git 教程
Git 教程

共21课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号