TCP协议三次握手和四次握手机制

状态机

TCP 的状态机是很复杂的,并且与建立断开连接时的握手息息相关,接下来就来详细描述下两种握手。
TCP协议三次握手和四次握手机制在这之前需要了解一个重要的性能指标 RTT。该指标表示发送端发送数据到接收到对端数据所需的往返时间。

建立连接三次握手

TCP协议三次握手和四次握手机制
第一次握手

  • 客户端向服务端发送连接请求报文段。该报文段中包含了自身的数据通讯初试序号。请求发送后,客户端进入到发送(SYN-SENT)状态。

第二次握手

  • 服务端收到连接请求报文后,如果同意连接,则会发送一个应答,该应答中也包含了自身的数据通讯初始序号,发送完后便进入到接受(SYN-RECEIVED)状态。

第三次握手

  • 当客户端收到连接同意的应答后,则还会向服务端发送一个确认包。客户端发完这个报文点后便进入到了连接(ESTABLISHED )状态,服务端收到这个确认包后也进入连接状态(ESTABLISHED )状态,此时连接建立成功。

断开链接四次握手

TCP协议三次握手和四次握手机制

第一次握手

  • 断开连接时,客户端向服务发送一个连接释放请求

第二次握手

  • 服务端接受到释放请求后,会向客户端发送一个确认包,并进入到等待(CLOSE_WAIT )状态,此时表名客户端到服务端的连接已经释放,不再接受客户端的数据。但是因为TCP连接是双向的,所以服务端仍旧可以发送数据到客户端。

第三次握手

  • 服务端数据发送完毕会向客户端发送一个连接释放请求,然后服务端便进入到了最后确认(LAST-ACK )状态

第四次握手

  • 客户端接受到连接释放请求后,向服务端发送一个确认包,此时客户端进入到了等待状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,在该时间内服务端没有再发送数据,就进入关闭(CLOSED )状态。当服务端接受到了客户端的确认包后,也便进入到关闭(CLOSED )状态。

为什么 客户端 要进入等待状态,等待 2MSL 时间后才进入 CLOSED 状态?

  • 为了保证服务端能够收到客户端的确认应答。如果客户端发完确认应答后直接进入关闭状态,如果确认应答因为网络问题一直没有到达,那么会造成服务端不能正常关闭。