书接上文,把常用的标志位再次拿出来,方便讲解
常用标志位 | 说明 |
---|---|
SYN(synchronous) | 建立连接 |
ACK(acknowledgement) | 响应 |
PSH(push) | DATA数据传输 |
FIN(finish) | 关闭连接 |
RST(reset) | 重置 |
URG(urgent) | 紧急 |
Sequence Number) | 序列号 |
Acknowledgement Number | 确认号 |
一、挥手解析
挥手的意思就是客户端要断开连接的过程,和握手的过程相反,握手的过程就是客户端和服务端建立连接的过程,为什么握手有三次,挥手会有四次呢?原因在于,在挥手的时候,多的一次是服务器端需要把当前的事务结束告诉客户端的过程,这个过程的作用是:主要保证使本次连接持续时间内所有产生的报文段消失,保证在下一次新连接中不会出现旧连接遗留的请求报文段。
二、四次挥手
第一次挥手:客户端想要断开连接,会 向服务端发送一段TCP报文,这个过程客户端进入FIN-WAIT-2阶段,其中将FIN标志位置为1,发送初始序列号u(FIN=1,序列号seq=u)
第二次挥手:服务器收到客户端发来的断开连接的请求,随后服务端结束established阶段,进入close-wait阶段,并向客户端返回一个TCP报文,标记位为ACK置为1,序列号为seq=v;将客户端接受的序列号+1,生成一个确认号为ack=U+1(ACK=1,序列号seq=u,确认号ack=u+1),这个过程表示服务端知道客户端需要断开连接的要求,接下去就开始准备断开,所以就产生了第三次挥手,还是服务端向客户端发送数据。
第三次挥手:客户端发送第二次挥手信息后,就开始准备 和客户端断开连接,使标记位为FIN,ACK都置为1,序列号为seq=w;确认号为ACK=U+1,这个时候服务器端进入last-ack阶段,并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据(FIN=1,ACK=1,序列号seq=w,确认号ack=u+1)
第四次挥手:客户端接受服务端的报文之后,进入TIME-WAIT阶段,并回应客户端收到信息,标记位为ACK置为1,序号为seq=U+1,确认号为ACK=W+1(ACK=1,序列号seq=u+1,确认号ack=w+1)至此,挥手结束