TCP的三次握手
为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。
第一次握手 向服务端发送连接请求报文,标记 ACK=1 , SYN=1 , 客户端序列号 seq=x ,客户端进入等待状态
第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态
第三次握手 客户端收到服务端发送的确认报文,将收到的报文存起来,缓存服务端seq=y
客户端发送确认报文给服务端,标记 ACK=1,SYN=0 ,客户端自己的序列号 seq=x+1,确认序列号 ACK_Number=y+1
TCP的四次挥手
第一次挥手;客户端向服务端发送释放连接报文,并停止发送数据,主动关闭 TCP 连接标记 FIN=1 ,客户端序列号 seq=x ,该序号等于前面已经传送过去的数据的最后一个字节的序号加 1客户端 FIN—WAIT-1 (终止等待 1)状态,等待服务端确认
第二次挥手;Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入wait状态,Server端告诉Client端,我确认并同意你的关闭请求。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认