TCP连接状态详解及故障排查手册1. TCP状态概述TCP协议作为传输层核心协议其连接状态机制是网络通信可靠性的重要保障。理解TCP各个状态及其转换关系对于网络故障排查和系统性能优化具有重要意义。1.1 基本状态类型TCP协议定义了11种连接状态每种状态代表了连接生命周期的特定阶段LISTEN服务器端等待连接请求的状态SYN_SENT客户端已发送连接请求等待服务器响应SYN_RCVD服务器已收到并确认连接请求ESTABLISHED连接已建立数据可正常传输FIN_WAIT_1主动关闭方发送FIN后进入的状态FIN_WAIT_2主动关闭方收到对FIN的ACK后状态CLOSE_WAIT被动关闭方收到FIN后的状态CLOSING双方同时尝试关闭连接时的特殊状态LAST_ACK被动关闭方发送FIN后的状态TIME_WAIT连接完全关闭前的等待状态CLOSED连接完全终止的状态2. 状态检测工具2.1 Linux状态检测命令# 查看TCP连接状态统计 netstat -nat # 检查特定端口的连接状态 lsof -i:port # 查看TCP连接数统计 sar -n SOCK # 对特定端口进行抓包分析 tcpdump -iany tcp port 90002.2 网络测试工具工具功能描述使用示例ping检测网络连通性ping 192.168.1.1traceroute跟踪数据包路由路径traceroute example.compathping综合ping和traceroute功能pathping www.baidu.commtr网络诊断综合工具mtr google.comnslookupDNS解析测试nslookup example.com3. 详细状态解析3.1 LISTEN状态服务器端打开socket进行监听时的状态表示该端口已开放并等待连接。例如HTTP服务默认监听80端口FTP服务默认监听21端口安全注意事项应定期检查LISTEN状态的端口关闭不必要的服务端口异常LISTEN状态可能指示存在后门程序3.2 SYN_SENT状态客户端调用connect()后发送SYN包进入的状态。正常情况下持续时间极短若大量出现可能表明目标服务不可达或网络状况差正在进行端口扫描系统可能遭受病毒攻击如冲击波病毒3.3 SYN_RCVD状态服务器收到SYN后发送SYNACK进入的状态。大量SYN_RCVD状态可能遭受SYN Flood攻击其特征是攻击者伪造源IP发送大量SYN请求服务器维护半连接队列消耗资源正常用户无法建立连接3.4 ESTABLISHED状态连接已建立数据可双向传输。异常情况包括客户端异常断开未发送FIN包服务器端保持ESTABLISHED大量虚假ESTABLISHED连接可能导致新连接无法建立检测命令netstat -nat | grep ESTABLISHED lsof -i:port3.5 连接关闭状态组FIN_WAIT_1主动关闭方发送FIN后等待ACK的状态。服务器突然重启可能出现大量此状态。FIN_WAIT_2收到对FIN的ACK后进入的状态即半关闭状态此时仍可接收数据。CLOSE_WAIT被动关闭方收到FIN后进入的状态等待应用程序关闭连接。LAST_ACK被动关闭方发送FIN后等待最后ACK的状态。TIME_WAIT主动关闭方收到FIN后发送ACK进入的状态需等待2MSL时间通常1-4分钟。4. TCP连接建立与终止4.1 三次握手过程第一次握手客户端发送SYN1, seqx第二次握手服务器回复SYN1, ACK1, seqy, ackx1第三次握手客户端发送ACK1, seqx1, acky1抓包示例14:12:45.104687 IP localhost.39870 localhost.9502: Flags [S], seq 2927179378 14:12:45.104701 IP localhost.9502 localhost.39870: Flags [S.], seq 1721825043, ack 2927179379 14:12:45.104711 IP localhost.39870 localhost.9502: Flags [.], ack 14.2 四次挥手过程第一次挥手主动方发送FIN1, sequ第二次挥手被动方回复ACK1, acku1第三次挥手被动方发送FIN1, seqv第四次挥手主动方回复ACK1, ackv15. 异常处理与优化5.1 TIME_WAIT优化调整内核参数减少TIME_WAIT状态影响# /etc/sysctl.conf配置 net.ipv4.tcp_syncookies 1 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_tw_recycle 1 net.ipv4.tcp_fin_timeout 30 # 生效配置 /sbin/sysctl -p5.2 连接保活机制应用层心跳包客户端定时发送心跳数据服务端检测心跳超时断开连接TCP Keepalive内核参数配置net.ipv4.tcp_keepalive_time 60 net.ipv4.tcp_keepalive_intvl 20 net.ipv4.tcp_keepalive_probes 3程序检测到连接不可用时recv()返回-1且errno为ETIMEDOUT。6. TCP标志位解析6.1 基本标志位标志含义说明SYN同步序列号建立连接时使用FIN结束连接关闭连接时使用ACK确认应答确认数据接收PSH推送数据要求立即处理数据RST重置连接异常终止连接6.2 标志位组合SYNACK连接建立响应FINACK正常连接关闭RSTACK异常连接终止7. 常见错误代码错误码描述可能原因22参数错误IP或端口无效101网络不可达路由问题或防火墙阻挡111连接被拒绝目标服务未运行115操作超时非阻塞模式下的延迟响应
TCP连接状态详解与网络故障排查指南
发布时间:2026/6/17 10:40:58
TCP连接状态详解及故障排查手册1. TCP状态概述TCP协议作为传输层核心协议其连接状态机制是网络通信可靠性的重要保障。理解TCP各个状态及其转换关系对于网络故障排查和系统性能优化具有重要意义。1.1 基本状态类型TCP协议定义了11种连接状态每种状态代表了连接生命周期的特定阶段LISTEN服务器端等待连接请求的状态SYN_SENT客户端已发送连接请求等待服务器响应SYN_RCVD服务器已收到并确认连接请求ESTABLISHED连接已建立数据可正常传输FIN_WAIT_1主动关闭方发送FIN后进入的状态FIN_WAIT_2主动关闭方收到对FIN的ACK后状态CLOSE_WAIT被动关闭方收到FIN后的状态CLOSING双方同时尝试关闭连接时的特殊状态LAST_ACK被动关闭方发送FIN后的状态TIME_WAIT连接完全关闭前的等待状态CLOSED连接完全终止的状态2. 状态检测工具2.1 Linux状态检测命令# 查看TCP连接状态统计 netstat -nat # 检查特定端口的连接状态 lsof -i:port # 查看TCP连接数统计 sar -n SOCK # 对特定端口进行抓包分析 tcpdump -iany tcp port 90002.2 网络测试工具工具功能描述使用示例ping检测网络连通性ping 192.168.1.1traceroute跟踪数据包路由路径traceroute example.compathping综合ping和traceroute功能pathping www.baidu.commtr网络诊断综合工具mtr google.comnslookupDNS解析测试nslookup example.com3. 详细状态解析3.1 LISTEN状态服务器端打开socket进行监听时的状态表示该端口已开放并等待连接。例如HTTP服务默认监听80端口FTP服务默认监听21端口安全注意事项应定期检查LISTEN状态的端口关闭不必要的服务端口异常LISTEN状态可能指示存在后门程序3.2 SYN_SENT状态客户端调用connect()后发送SYN包进入的状态。正常情况下持续时间极短若大量出现可能表明目标服务不可达或网络状况差正在进行端口扫描系统可能遭受病毒攻击如冲击波病毒3.3 SYN_RCVD状态服务器收到SYN后发送SYNACK进入的状态。大量SYN_RCVD状态可能遭受SYN Flood攻击其特征是攻击者伪造源IP发送大量SYN请求服务器维护半连接队列消耗资源正常用户无法建立连接3.4 ESTABLISHED状态连接已建立数据可双向传输。异常情况包括客户端异常断开未发送FIN包服务器端保持ESTABLISHED大量虚假ESTABLISHED连接可能导致新连接无法建立检测命令netstat -nat | grep ESTABLISHED lsof -i:port3.5 连接关闭状态组FIN_WAIT_1主动关闭方发送FIN后等待ACK的状态。服务器突然重启可能出现大量此状态。FIN_WAIT_2收到对FIN的ACK后进入的状态即半关闭状态此时仍可接收数据。CLOSE_WAIT被动关闭方收到FIN后进入的状态等待应用程序关闭连接。LAST_ACK被动关闭方发送FIN后等待最后ACK的状态。TIME_WAIT主动关闭方收到FIN后发送ACK进入的状态需等待2MSL时间通常1-4分钟。4. TCP连接建立与终止4.1 三次握手过程第一次握手客户端发送SYN1, seqx第二次握手服务器回复SYN1, ACK1, seqy, ackx1第三次握手客户端发送ACK1, seqx1, acky1抓包示例14:12:45.104687 IP localhost.39870 localhost.9502: Flags [S], seq 2927179378 14:12:45.104701 IP localhost.9502 localhost.39870: Flags [S.], seq 1721825043, ack 2927179379 14:12:45.104711 IP localhost.39870 localhost.9502: Flags [.], ack 14.2 四次挥手过程第一次挥手主动方发送FIN1, sequ第二次挥手被动方回复ACK1, acku1第三次挥手被动方发送FIN1, seqv第四次挥手主动方回复ACK1, ackv15. 异常处理与优化5.1 TIME_WAIT优化调整内核参数减少TIME_WAIT状态影响# /etc/sysctl.conf配置 net.ipv4.tcp_syncookies 1 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_tw_recycle 1 net.ipv4.tcp_fin_timeout 30 # 生效配置 /sbin/sysctl -p5.2 连接保活机制应用层心跳包客户端定时发送心跳数据服务端检测心跳超时断开连接TCP Keepalive内核参数配置net.ipv4.tcp_keepalive_time 60 net.ipv4.tcp_keepalive_intvl 20 net.ipv4.tcp_keepalive_probes 3程序检测到连接不可用时recv()返回-1且errno为ETIMEDOUT。6. TCP标志位解析6.1 基本标志位标志含义说明SYN同步序列号建立连接时使用FIN结束连接关闭连接时使用ACK确认应答确认数据接收PSH推送数据要求立即处理数据RST重置连接异常终止连接6.2 标志位组合SYNACK连接建立响应FINACK正常连接关闭RSTACK异常连接终止7. 常见错误代码错误码描述可能原因22参数错误IP或端口无效101网络不可达路由问题或防火墙阻挡111连接被拒绝目标服务未运行115操作超时非阻塞模式下的延迟响应