三次握手

三次握手

  1. 定义:三次握手,顾名思义,就是客户端与服务端的三次通信

  2. 流程:

  • 第一次握手:建立连接。客户端发送请求连接报文段,然后客户端进入SYN_SEND(连接请求)状态,等待服务端的确认。
  • 第二次握手:服务端收到客户端的SYN报文段,对这个报文段进行确认,同时,自己还要发送请求建立连接信息,服务端要将所有的信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务端进入SYN_RCVD(接受请求)状态。
  • 第三次握手:客户端收到服务端的SYN+ACK报文段。向服务端发送ACK报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISH状态,完成TCP三次握手。
  1. 为什么要进行三次握手?

三次握手的目的就是:建立可靠的通信渠道。确认双方的发送和接收都是正常的。

  • 第一次握手:客户端什么都不能确认,服务端能确认客户端发送数据是正常的,自己接受数据正常的。
  • 第二次握手:客户端可以确认自己:接受和发送数据都是正常的, 服务端发送数据,接受数据是正常的。
  • 第三次握手:服务端可以确认自己发送和接受正常,客户端发送和接受正常。

假设不考虑三次握手,会出现的一种情况是:

已经实效的报文段突然传送到了主机B,因而产生错误。

考虑这样一种情况:当A发送连接请求,但因连接请求报文丢失而未收到确认。于是A再重传一次。第二个报文段到达了主机B,收到了确认,建立了连接。传输完毕后,就释放连接。

现假定出现另一种情况:A发送的第一个请求报文段并没有丢失,而是在某些网点滞留时间太长,以致延误到这次的连接释放后才到大主机B,本来这已经是一个已经失效的报文段,但主机B收到这个报文段,却误认为主机A又发送了一次新的请求,于是向A发送确认报文段,同意建立连接。

主机A并没有要求建立连接,因此不会理睬主机B的确认,也不会向主机B发送数据,但主机B却以为连接已经建立,并且一直等待主机A发送数据,于是主机B的许多资源就这样被浪费了。

而如果采用了三次连接就可以防止以上现象的发生。例如在刚才的情况下,主机A不会再向主机B的确认发送确认。主机B收不到确认,就建立不了连接。


三次握手
http://example.com/三次握手/
作者
Panyurou
发布于
2022年8月15日
许可协议