首页/网络/协议速查/TCP 连接状态一览(11 种)
TCP 与 UDP54 条

TCP 连接状态一览(11 种)

RFC 状态机共 11 个状态:连接生命周期中任一时刻的套接字都处于其中之一,ss/netstat 的 State 列即这些值。

协议速查网络更新于 2026-10-13

连接状态一览是什么

一条连接在其生命周期中的每个时刻都处于某个确定状态,状态机共定义了十一个状态。查看连接的命令里那一列状态名,就是这些取值。它是服务排查里信息密度最高的字段之一:只看连接总数往往看不出问题,按状态分组统计却能立刻指出是建连失败、连接泄漏还是端口耗尽。理解每个状态归属哪一方、什么时候出现,比记住状态名字更重要。

基本信息

数量状态机共十一个状态
表示连接查看工具中的状态列
读取方式按状态分组统计,而不是只看总数
关键区分同一状态名在监听侧与连接侧含义不同
常用统计按状态计数并排序,能快速看出异常聚集

十一个状态

状态含义典型所在方
已关闭不存在连接或已完全释放无
监听等待入站连接服务端
已发同步已发出建连请求,等待对方回应客户端
已收同步收到建连请求并已回应服务端
已建立连接可用,可收发数据双方
关闭等待一已发出结束标志,等待对方确认主动关闭方
关闭等待二已收到确认,等待对方发出结束标志主动关闭方
等待本端关闭收到对方结束标志,等待本端应用关闭被动关闭方
同时关闭双方同时发出结束标志的少见情形双方
最后确认本端也不发了,等待对方最后确认被动关闭方
停留等待等待两倍报文最大生存时间后彻底释放主动关闭方

按状态统计

按状态统计
ss -tan | awk 'NR>1{print $1}' | sort | uniq -c | sort -rn   # 一眼看清各状态分布
ss -tan state time-wait | head   # 只看停留等待的连接
ss -lntp | wc -l   # 监听端口数量,确认服务是否都在听

异常状态怎么定位

  • 大量等待本端关闭:应用没有及时关闭连接,属于应用层问题
  • 大量已发同步:对端不响应或中间设备丢包,连接建立不起来
  • 大量关闭等待二:对端长时间不发出结束标志,通常是对方实现有问题
  • 大量停留等待:短连接高频且主动关闭,端口与连接跟踪表压力大
同一个状态名在不同角色下含义不同:监听状态的接收队列表示已完成建连但未被应用接收的连接数,而连接状态的接收队列表示应用还没读走的字节数,读串了会得出完全相反的结论。
等待本端关闭的连接持续堆积是应用没有关闭连接(代码或连接池问题),不是内核或网络问题,调内核参数治不了,必须回到应用侧修。

易错点

  • 只看连接总数判断压力,忽略了状态分布才是根因所在
  • 把等待本端关闭的堆积当成网络问题,反复调内核参数却毫无效果
  • 把监听状态与连接状态的队列字段混读,得出相反的结论
  • 忽略已建立连接的数量增长,实际是连接池没有上限导致的资源泄漏

数据来源与参考

  • RFC 9293 §3.3.2(状态图)
  • man 8 ss

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌