详解TCP的四次握手和三次挥手,以及里面每个阶段的状态

TCP 三次握手(连接建立)

TCP 连接建立通过三次握手完成,确保双方同步初始序列号并确认可达性。

阶段说明
  1. 第一次握手

    • 客户端 → 服务器:发送 SYN(同步请求),携带初始序列号 seq = x
    • 客户端状态SYN_SENT(等待服务器响应)。
  2. 第二次握手

    • 服务器 → 客户端:回复 SYN + ACK,确认客户端的 seqack = x + 1),并发送自己的初始序列号 seq = y
    • 服务器状态SYN_RCVD(等待客户端确认)。
  3. 第三次握手

    • 客户端 → 服务器:发送 ACK,确认服务器的 seqack = y + 1)。
    • 客户端状态ESTABLISHED(连接成功)。
    • 服务器状态:收到 ACK 后进入 ESTABLISHED

TCP 四次挥手(连接关闭)

TCP 连接关闭需要四次挥手,因为服务器可能需要时间处理未发送的数据。

阶段说明
  1. 第一次挥手

    • 客户端 → 服务器:发送 FIN(结束请求),请求关闭写通道,携带序列号 seq = u
    • 客户端状态FIN_WAIT_1(等待服务器确认)。
  2. 第二次挥手

    • 服务器 → 客户端:回复 ACK,确认客户端的 FINack = u + 1),并继续处理剩余数据。
    • 服务器状态CLOSE_WAIT(等待应用层关闭连接)。
    • 客户端状态:收到 ACK 后进入 FIN_WAIT_2(等待服务器关闭)。
  3. 第三次挥手

    • 服务器 → 客户端:发送 FIN,携带序列号 seq = v,表示数据已发送完毕。
    • 服务器状态LAST_ACK(等待客户端最终确认)。
  4. 第四次挥手

    • 客户端 → 服务器:回复 ACK,确认服务器的 FINack = v + 1)。
    • 客户端状态:进入 TIME_WAIT(等待 2MSL 确保所有数据包消失)。
    • 服务器状态:收到 ACK 后直接关闭,进入 CLOSED
    • 客户端最终状态TIME_WAIT 超时后进入 CLOSED

状态转换总结

阶段客户端状态服务器状态事件
连接建立SYN_SENT → ESTABLISHEDSYN_RCVD → ESTABLISHEDSYN → SYN+ACK → ACK
连接关闭FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSEDCLOSE_WAIT → LAST_ACK → CLOSEDFIN → ACK → FIN → ACK

关键细节

  • SYN 洪泛攻击:利用 SYN_SENT 状态耗尽服务器资源,需通过 SYN Cookie 等机制防御。
  • TIME_WAIT 作用:确保最后一个 ACK 到达服务器,避免旧连接的数据包干扰新连接。
  • 半关闭状态FIN_WAIT_2 时客户端仍可接收数据,服务器需主动关闭。

通过四次挥手,TCP 确保数据完整传输后优雅断开连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lytcreate.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值