计算机网络中的三次握手四次挥手

1.三次握手

在TCP连接建立过程中客户端(Client)与服务端(Server)存在三次握手的情况,具体过程如下图:


三次握手过程

最初客户端(Client)和服务端(Server)都为CLOSED关闭状态),但是客户端主动打开,服务器端是被动打开。(客户端和服务端都为CLOSED状态->服务端进入监听状态->客户端进入同步发送状态->服务端进入同步接收状态->客户端和服务都进入ESTABLISHED)
由上图可以看出来TCP连接建立要经过以下三次握手:

  • 在握手之前服务端进入LISTEN(监听状态)。
  • 第一次握手,客户端向服务端发送同步信号SYN=1,初始序列号seq=x(SYN=1的报文不能携带数据),客户端进入SYN-SENT状态。
  • 第二次握手,如果服务端同意建立连接,服务端就向客户端发送同步信号SYN=1,确认位ACK=1,初始序列号seq=y,确认号ack=x+1,服务端进入SYN-RCVD状态。
  • 第三次握手,客户端向服务端发送ACK=1,seq=x+1,ack=y+1,客户端进入连接状态(ESTABLISHED)。
  • 当服务端收到客户端的确认报文后也进入连接状态(ESTABLISHED)。

2.四次挥手

当客户端(Client)想与服务端(Server)断开TCP连接过程中存在四次挥手情况,具体过程如下图:


四次挥手

断开连接前客户端(Client)和服务端(Server)都为连接状态(ESTABLISHED),客户端主动关闭,服务端被动关闭。(客户端和服务端都处于连接状态(ESTABLISHED)->客户端进入终止等待1状态(FIN-WAIT-1)->服务端进入关闭等待状态(CLOSED-WAIT)->客户端进入终止等待2状态(FIN-WAIT-2)->服务端进入最后确认状态(LAST-ACK)->客户端进入超时等待状态(TIME-WAIT) ->服务端和客户端都进入关闭状态(CLOSED)。
由上图可以看出来断开连接过程需要经过以下四次挥手:

  • 客户端发出断开连接报文(FIN=1,seq=u)停止发送数据,主动断开连接进入终止等待1状态(FIN-WAIT-1)状态。
  • 服务端在收到客户端的报文后发出确认报文(ACK=1,seq=v,ack=u+1)服务端进入关闭等待状态(CLOSED-WAIT)此时TCP处于半连接状态,客户端的连接已经断开。
  • 客户端在收到服务端的报文之后进入终止等待2状态(FIN-WAIT-2),等待服务端释放连接。
  • 当服务端没有数据需要向客户端发送时,服务端向客户端发送释放连接报文(FIN=1,ACK=1,seq=w,ack=u+1)此时进入最后确认状态(LAST-ACK)。
  • 客户端收到服务端的释放连接报文后向服务端发送确认报文(ACK=1,seq=u+1,ack+w+1)此时进入超时等待状态(TIME-WAIT)。
  • 当服务端收到客户端的确认报文后就进入关闭状态(CLOSED),而客户端需要2MSL后才会进入关闭状态(CLOSED)。

3.小结

TCP三次握手四次挥手是计算机网络中非常重要的概念,在很多公司的笔试或面试时都会涉及到,希望大家能够掌握,我在整理的过程中也相当于复习了一遍,文中如有错误的地方请大神指正。
编写参考:https://www.cnblogs.com/Andya/p/7272462.html

你可能感兴趣的:(计算机网络中的三次握手四次挥手)