Tcp三次握手和四次挥手

一、先记两个核心前提

  1. TCP 是可靠、面向连接、全双工协议
    • 全双工:双方可以同时、独立收发数据,就像打电话,两边都能说、也能听。
  2. 通信靠几个关键标志位
    • SYN:同步(建连接用)
    • ACK:确认收到
    • FIN:结束(断连接用)
    • seq:本方发出去的序列号
    • ack:我收到了你上一条,希望你下次发这个号

二、TCP 三次握手(建立连接)

1. 一句话目的

确认客户端 & 服务器双方的:发送能力、接收能力都正常,并同步初始序列号。

2. 角色

  • 客户端:C
  • 服务端:S

3. 标准流程(可以自己推理)

  1. 第一次握手:C → S

    • 内容:SYN=1, seq=x
    • 含义:“我想连你,这是我的起始号 x”
    • 能证明:
      • C 的发送能力正常
      • S 的接收能力正常
  2. 第二次握手:S → C

    • 内容:SYN=1, ACK=1, seq=y, ack=x+1
    • 含义:
      • ACK/x+1:“我收到你了,下次请发 x+1”
      • SYN/y:“我也告诉你我的起始号 y”
    • 能证明:
      • S 的发送、接收都正常
      • C 的接收、发送都正常
  3. 第三次握手:C → S

    • 内容:ACK=1, seq=x+1, ack=y+1
    • 含义:“我收到你的 SYN 了,下次你发 y+1”
    • 能证明:
      • S 能确认:C 的接收能力正常

推理:为什么是 3 次,不是 2 次或 4 次?

  • 2 次:服务端无法确认 **“客户端能不能收到我发的消息”**,不可靠。
  • 4 次:多余,3 次已经把双方收发能力全验证完了。

4. 三次握手特性

  • 可靠建立连接,同步序列号
  • 防止 “过期的连接请求” 重复建立连接
  • 服务端会有半连接队列,可能遭受 SYN 洪水攻击
  • 握手完成后双方进入 ESTABLISHED(已连接)状态

三、TCP 四次挥手(断开连接)

1. 一句话目的

因为是全双工,两边各有一条独立的 “发送通道”,要分别关闭,所以需要 4 步。

2. 推理核心

一方说 “我发完了” ≠ 另一方也发完了。必须:

  • 先关 A → B 的方向
  • 再关 B → A 的方向

3. 标准流程(假设客户端主动断开)

  1. 第一次挥手:C → S

    • FIN=1, seq=u
    • 含义:“我数据发完了,我要关闭我的发送通道”
    • C 进入 FIN_WAIT1
  2. 第二次挥手:S → C

    • ACK=1, ack=u+1, seq=v
    • 含义:“收到你关发送的请求,我确认了”
    • S 进入 CLOSE_WAIT
    • C 收到后进入 FIN_WAIT2
    • 注意:此时 S 可能还有数据要发,所以不能直接发 FIN!
  3. 第三次挥手:S → C

    • FIN=1, ACK=1, seq=w, ack=u+1
    • 含义:“我也发完了,我也要关闭我的发送通道”
    • S 进入 LAST_ACK
  4. 第四次挥手:C → S

    • ACK=1, ack=w+1, seq=u+1
    • 含义:“收到你的关闭,确认”
    • C 进入 TIME_WAIT,等待 2MSL 后彻底关闭
    • S 收到 ACK 后直接关闭

推理:为什么是 4 次?因为第二步和第三步不能合并:服务器收到 FIN 后,只能先 ACK,不能立刻 FIN,因为它可能还有业务数据要发。等发完了,才能发自己的 FIN。中间这一步延迟,就把 3 次变成了 4 次。

4. 四次挥手特性

  • 优雅关闭:保证数据传输完毕再断开
  • 全双工独立关闭,一方关完不影响另一方
  • TIME_WAIT 等待 2MSL:
    1. 确保最后一个 ACK 被对方收到
    2. 防止旧连接的数据包干扰新连接
  • 常见问题:CLOSE_WAIT 过多 = 代码没正常调用 close

四、最简单记忆口诀(顺着推理就能背)

  • 建连接:C发同步 → S确认C + S回同步→ C确认S → 通了(3 次)
  • 断连接:C关 → S收到 → S也关 → C收到(4 次)

五、快速对比总结

行为次数核心目的关键标志
三次握手3验证双方收发能力,建立可靠连接SYN、ACK
四次挥手4分别关闭两个全双工通道FIN、ACK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值