TCP建立连接为什么是三次握手,为什么不是两次或四次?

690 阅读1分钟

TCP建立连接为什么是三次握手,为什么不是两次或四次?

TCP三次握手

  • 第一次握手:客户端发送TCP包,置SYN标志位为1,将初始序号X,保存在包头的序列号(Seq)里。
  • 第二次握手:服务端回应确认包,置SYN标志位为1,置ACK为X+1,将初始序列号Y,保存在包头的序列号里。
  • 第三次握手:客户端对服务端的确认包进行确认,置SYN标志位为0,置ACK为Y+1,置序列号为Z。

为什么不是两次

** 重新看一遍图(S-服务端,C-客户端)**

  • 第一次握手后,S可以确认自己收报文与C发报文的功能都正常,而C呢,它什么都不能确认。
  • 第二次握手后,C可以确认自己的收发报文与S的收发报文功能都正常,也就是认为连接已建立。
  • 那么第三次呢,S也可以确认双方能够正常通信。

假想一下,如果我们去掉了第三次呢?

如果只是第二次建立的话,服务端和客户端就已经建立,但是如果客户端没有收到服务端的回应?这个时候,客户端认为没有建立,服务端却为认为建立成功,并保存了必要的资源,如果出现大量的这样的情况。那么服务器会奔溃。

因此第三次握手是必要的。

为什么不是四次

因为三次握手后,C和S至少可以确认之前的通信情况,但无法确认之后的情况。 所以如果四次还是五次或是更多次都是徒劳的。