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报文。
客户端或服务器均可主动发起挥手动作,在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 socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍