储备知识:TCP报文段的首部格式(讲下面提到的):
1.FIN:用来释放一个连接。当FIN=1时,表示此报文段的发送方的数据已经发送完毕,并要求释放运输连接。
2. 确认ACK(acknowledgment):当ACK = 1 时确认号字段才有效。ACK = 0时确认号字段无效。
TCP规定,在连接建立后所有的报文段都必须把ACK置1
3.确认号:是期待收到对方下一个报文段的第一个数据字节的序号,占四字节。
- 第一次挥手:客户端发送连接释放报文,并停止再发送数据,主动关闭TCP连接。连接释放报文的首部的终止控制位FIN置1,其序号seq=u(等于前面已传送的数据的最后一个字节的序号加1),此时A进入FIN-WAIT-1(终止等待1)状态,等待服务器确认。注意:TCP规定,FIN报文段即使不懈怠数据,它也消耗一个序号。
- 第二次挥手:服务器收到连接释放报文段后即发出确认,确认为ACK = 1,确认号为ack = u + 1,序号seq = v(其值是服务器前面已传送过的数据最后一个字节的序号加1),然后服务器就进入了关闭等待(CLOSE-WAIT)状态