TCP通过三次握手建立连接,通过四次挥手来释放连接,对于三次握手的过程之前学习的时候就记录过http://www.jianshu.com/p/afa438cb7d73
接下来学习一下释放连接的过程
我们假设现在有客户A和服务器B已经建立了TCP连接,现在需要客户A需要释放掉这个连接。怎么办?
第一次挥手
首先客户A
的进程会向其TCP
连接发出连接释放的报文段并停止发送数据,主动关闭TCP
连接。A
的释放连接请求的报文中FIN
置1
,序号=u
,等于前面传送的数据的最后一个字节序号加1
,连接释放报文是没有长度的,但是会占用一个序号。
第二次挥手
B
收到连接释放报文段后立即发出确认,确认号ack=u+1
,然后B
进入了CLOSE_WAIT(关闭等待)
状态。这个时候A--> B
方向的连接就已经断开了,这个时候的TCP
连接处于半关闭状态,A是没有数据要发送给B
了,但是B
如果放松数据给A
,A
仍然要接收。
第三次挥手
A
收到B
的确认后,就进入FIN_WAIT_2(终止等待2)
状态,等待B
发出连接释放请求。
如果B也没有数据要向A
发送,这是B
发出连接释放报文,是FIN=1
,这是B
进入LAST_ACK(最后确认状态)
,等待A
确认。
第四次挥手
A
收到B
的连接释放请求报文后,必须对此发送确认,将确认报文的ACK
置1
,并进入TIME_WAIT状态(时间等待)
状态。这时的TCP
连接还没有释放掉,必须经过时间等待计数器设置时间2MSL
后,A
才进入CLOSED
状态,这是一个完整的TCP
连接才算释放掉。
关于TCP的四次挥手