您的位置:首页 > 理论基础 > 计算机网络

TCP四次握手(关闭连接)

2016-03-14 01:06 639 查看
参考地址:http://www.2cto.com/net/201208/149565.html

客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

第一次挥手:
TCP客户端发送一个FIN,用来关闭客户端到服务器的数据传输。
第二次挥手:
服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
第三次挥手:
服务器关闭客户端的连接,发送一个FIN给客户端。
第四次挥手:
客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

几种状态:
FIN_WAIT_1:即主动方发送FIN包后,进入的状态,等待对方返回ACK报文。
FIN_WAIT_2:即收到对方的ACK包了,但是对方还有数据包发过来,所以要等下关闭连接。
TIME_WAIT:表示收到对方的FIN包后,并发出了ACK报文后,在等待2MSL切回CLOSEED可用状态期间的状态。
CLOSING:这个状态比较特殊,比较少见,即在发送FIN报文后,没有收到对方的ACK包,却先收到对方的FIN包,最典型的例子就是双方同时在关闭FIN报文。
CLOSE_WAIT:表示等待关闭。即如果你没有数据需要发送,那就是要关闭此连接,即发送FIN报文。
LAST_ACK:被动方发送FIN报文后,最后等待ACK报文。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux