用ss快速识别半开连接需精准过滤状态:ss -ton state fin-wait-1、ss -ton state close-wait、ss -tan state syn-recv;其中orphaned非零即确认内核级socket泄漏,CLOSE-WAIT和FIN-WAIT-2卡住表明应用未主动关闭。

Linux怎么查看异常连接半开统计

怎么用 ss 快速识别半开连接

半开连接(如 FIN-WAIT-1CLOSE-WAITSYN-RECV)并不只是“暂时还没彻底断开”这么简单,本质上是连接生命周期卡在了中间状态,通常说明要么对端出了异常,要么本端在关闭流程上没有处理到位。排查时也别直接用 ss -t | grep CLOSE 这类模糊匹配——状态字段的位置并不固定,很容易出现漏判,甚至误判。

为什么 ss -s 的 orphaned 值非零就是硬泄漏

ss -s 第一行的 orphaned 数值是内核级指标:进程已退出,但 socket 还挂在内核里没释放。它和用户态可见的 Total 不重叠,也不受 TIME-WAIT 影响。一旦 orphaned > 0,基本等于确认泄漏,不是配置问题,是代码缺陷。

如何区分半开连接是攻击还是程序 bug

SYN-RECV 高 ≠ 一定被攻击。得结合来源 IP 分布和连接持续时间看:

排查时最容易忽略的两个点

先看两点很容易被忽略的细节:其一,ss -t 默认只看 TCP,不会把 UDP 带出来,而不少“半开”现象恰恰更容易藏在 UDP 场景里,比如 DNS 查询发出去后迟迟没响应,既不重试,也不做清理;其二,所有状态过滤的写法必须严格使用小写加连字符,state time-wait 才是正确写法,像 state TIME_WAITstate timewait 这类写法都会直接静默失败,既不报错,也没有任何输出。

真正卡住的半开连接,往往藏在 CLOSE-WAITFIN-WAIT-2 里——前者代表你收了 FIN 却没发 FIN,后者代表你发了 FIN 却没等到 ACK,这两个状态不会自动超时清理,全靠应用主动干预。

本文转载于:https://www.php.cn/faq/2977608.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。