tcp连接的11种状态及常见问题。

tcp链接整体流程,如下图所示:
在这里插入图片描述

TCP协议在连接的建立和终止过程中涉及11种状态,这些状态反映了连接的不同阶段。以下是每种状态的详细说明:


1. CLOSED

  • 初始状态,表示没有活动的连接或连接已完全关闭。
  • 当应用程序关闭连接或终止后进入此状态。

2. LISTEN

  • 服务器端状态,表示正在等待客户端的连接请求(SYN报文)。
  • 服务器通过调用listen()进入此状态,准备接受新的连接。

3. SYN_SENT

  • 客户端状态,客户端发送SYN报文后进入此状态,等待服务器的SYN-ACK响应。
  • 触发条件:客户端调用connect()发起连接。

4. SYN_RECEIVED (SYN_RCVD)

  • 服务器端状态,服务器收到客户端的SYN报文后,发送SYN-ACK并等待客户端的ACK确认。
  • 若未收到ACK,服务器可能重传SYN-ACK。

5. ESTABLISHED

  • 连接已建立,双方可以自由传输数据。
  • 客户端收到服务器的SYN-ACK后进入此状态;服务器收到客户端的ACK后也进入此状态。

6. FIN_WAIT_1

  • 主动关闭方(如客户端) 发送FIN报文后进入此状态,等待对方的ACK或FIN响应。
  • 可能直接进入FIN_WAIT_2(收到ACK)或CLOSING(同时收到FIN)。

7. FIN_WAIT_2

  • 主动关闭方 已收到对FIN的ACK,等待对方发送FIN报文以终止连接。
  • 此时仍可能接收数据,但不再发送数据。

8. CLOSE_WAIT

  • 被动关闭方(如服务器) 收到对方的FIN报文后进入此状态,发送ACK确认,并等待应用程序关闭连接。
  • 应用程序需调用close()发送FIN以进入后续状态。

9. CLOSING

  • 罕见状态,双方同时发起关闭(均发送FIN报文),等待对方的ACK。
  • 当双方同时处于FIN_WAIT_1并交换FIN时进入此状态。

10. LAST_ACK

  • 被动关闭方 发送自己的FIN报文后进入此状态,等待对方的最终ACK确认。
  • 收到ACK后进入CLOSED状态。

11. TIME_WAIT

  • 主动关闭方 收到对方的FIN并发送ACK后进入此状态,等待2MSL(最大报文生存时间)以确保所有报文消失。
  • 防止旧连接的延迟报文干扰新连接。

状态转换图

  • 连接建立(三次握手)
    CLOSED → SYN_SENT → ESTABLISHED(客户端)
    CLOSED → LISTEN → SYN_RCVD → ESTABLISHED(服务器)

  • 连接终止(四次挥手)
    ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED(主动关闭方)
    ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED(被动关闭方)


关键点

  • TIME_WAIT 是主动关闭方的最终状态,确保可靠终止。
  • CLOSINGLAST_ACK 处理异常关闭场景。
  • 实际应用中,可通过netstat命令查看TCP连接状态。

理解这些状态有助于诊断网络问题(如连接泄漏、端口占用等)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值