TCP建立连接,为什么采用3次握手

  • 内容
  • 评论
  • 相关

首先说一下三次握手的过程:

    第一次:客户端像服务器端发送连接请求

    第二次:服务器收到请求后,向客户端发送回应和连接请求

    第三次:客户端收到后,对服务器的请求发送应答

blob.png

其中总共发送了3条消息,因此该过程也称作“三次握手”

而这其中 3次握手 也是建立连接过程中需要发送的最少的消息数目

blob.png

这样来看:

1.一次握手 仅仅由客户端发送一次请求,肯定是无法建立可靠的TCP连接的



2.两次握手:服务器端 在发出消息后,并不知道自己能否发送,以及对面的客户端能否接收。也就是说,如果在两次握手的状态下建立连接,很可能建立的连接是从客户端到服务器端单向的,也就是客户端一直发消息,服务器端一直收消息。


此外,两次握手建立的连接,服务器端如果向客户端发消息,不能保证能正常发出,也不能保证客户端能正常收到。所以二次握手可能会造成这两种情况:(C表示客户端,S表示服务器端)

   1、建立连接的过程中,C向S发送请求,但由于某些原因,S并没有收到请求,于是C又发了一条请求。S向C回应并发出请求。这时候认为连接建立,开始通信,结束后断开连接。这时,一开始那条S没有收的请求突然传到了S端,于是S对这条请求回应后,由于假定“二次握手”,这时候S认为自己和C建立连接了,但C不认为自己和S建立连接,这就导致已经失效的请求重新建立了错误的连接


   2、如果服务器发出并且客户端收不到消息,服务器会重复发送消息直到得到回应,浪费很多资源


3.4、5、6、7次握手:由于3次握手已经能确保建立可靠的连接,所以不需要多次握手