四次挥手

四次挥手,连接终止协议。其性质就是终止协议。指断开一个TCP连接时,需要客户端和服务端总共发4个包以确认连接的断开。

TCP有6个标志位,分别是

  • SYN,同步序列编号(Synchronize Sequence Numbers)是TCP/IP建立连接时使用的握手信号。在客户端和服务端之间建立正常的TCP网络连接时,客户端首先会发出一个SYN消息,服务端使用SYN+ACK应答表示收到了这个消息。
  • ACK,(Acknowledge character,确认字符,表示收到的字符无错误,在TCP/IP协议中,如果接收方成功的接收到数据,就会回复一个ACK数据
  • PSH(push),当设置为1时,要求把数据尽快的交给应用层,不做处理
  • FIN(finish),是TCP报文的码位字段,当该位置为1的含义为发送方字节流结束,用于关闭连接。当两端交换带有FIN的TCP报文段且每一端都确认另一端发送的FIN包时,TCP连接将会关闭。
  • RST(reset),表示重置连接、复位连接。无论何时一个报文段发往基准的连接(目的IP地址和目的端口号以及源IP地址和源端口号指明的连接)出现错误,TCP都会发出一个复位报文段。
  • URG(urgent),URG标志设置为1时,紧急指针才有效,紧急方式是向对方发送紧急数据的一种方式,表示数据要优先处理。

  由于TCP连接是全双工的,每个方向都必须单独进行关闭,当A方完成发送任务后,发送一个FIN来终止A方的连接,B方收到一个FIN意味着B方不会再收到数据了,但是这个TCP连接仍能发送数据(即B方仍能发送数据给A方),直到B方也发送了一个FIN。首先进行关闭的一方执行主动关闭,另一方执行被动关闭。

  具体点的四次挥手描述如下,A端可以为客户端也可以为服务端

  • 第一次挥手:A端发送了一个FIM=M,用来关闭A端到B端的数据传送,A端将会进入FIN_WAIT_1状态。
  • 第二次挥手:B端收到FIN后,发送ACK=M+1给A端,这时A端进入FIN_WAIT_2状态,继续等待B端的FIN报文
  • 第三次挥手:当B端确认数据已经发送完毕,向A端发送FIN=N的报文,B端进入LAST_ACK状态
  • 第四次挥手:A端收到FIN=N报文后,发送ACK=N+1给B端,并进入TIME_WAIT状态。当B端收到ACK后就会断开连接,而A端等待2MSL后没有收到B端的回复,就会正常关闭连接。

四次挥手可以如下图

原博文链接https://www.jianshu.com/p/cd801d1b3147

原文地址:https://www.cnblogs.com/smallzhen/p/12656956.html