TCP握手为什么是三次,不是两次?不是四次?

(没用)三次握手可建立一个可靠的连接,目的是

  • 确保双方都知道对方已准备好通信,
  • 并同步双方的序列号,从而保证数据包的顺序性和完整性。

为什么TCP握手不能是两次?

  • 防止服务器一直等
  • 防止客户端已经失效的连接请求又传送到了服务器。
  1. 第一种情况:举例:网络传输是有延时的
    假如
  • 客户端发起了SYN的第一次握手
  • 服务器及时回复了SYN和ACK=1的第二次握手
    但是这个ACK=1的确认报文段因为某些原因在传输过程中丢失了
  • 若没有第三次握手告诉服务器(客户端收到了服务器的回应),那服务端是不知道客户端有没有收到的。

那么服务器就会一直开着端口等客户端回信。
但说不定客户端并没有收到服务器的第二次握手,早跑了

  1. 第二种情况:
  • 一个旧的、延迟的连接请求(SYN=1)被服务器接收,
  • 导致服务器错误地开启一个不再需要的连接。
  1. 第一次握手:客户端发送SYN包给服务器
  • 如果这个包延迟了,客户端不会一直等待,
  • 它可能会重试并发送一个新的连接请求。
  1. 第二次握手:服务器收到SYN包后
  • 发送一个SYN-ACK包(确认接收到连接请求)回客户端。
  1. 第三次握手:客户端收到SYN-ACK包后,
  • 发送一个ACK包给服务器,确认收到了服务器的响应。

为什么不是四次?

三次握手已经足够创建可靠的连接了,没有必要再多一次握手。

posted @ 2025-06-03 12:51  kuki'  阅读(30)  评论(0)    收藏  举报