TCP断开连接过程(四次挥手)
2016-03-10 20:08
513 查看
![](http://hi.csdn.net/attachment/201108/7/0_1312718564tZXD.gif)
中断连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
整个过程如下:
某个应用进程首先调用close,称之为该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
接收到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程。
一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字,导致它的TCP也发送一个FIN。
接收这个最终FIN的原发送端TCP(执行主动关闭的那一端)确认这个FIN。
![](http://hi.csdn.net/attachment/201108/7/0_1312718564tZXD.gif)
中断连接端可以是Client端,也可以是Server端。
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!
整个过程如下:
某个应用进程首先调用close,称之为该端执行主动关闭。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
接收到这个FIN的对端执行被动关闭。这个FIN由TCP确认。它的接收也作为一个文件结束符传递给接收端应用进程。
一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字,导致它的TCP也发送一个FIN。
接收这个最终FIN的原发送端TCP(执行主动关闭的那一端)确认这个FIN。
相关文章推荐
- TCP/IP体系结构
- TCP三次握手过程
- volley请求网络图片
- volley请求网络图片
- 计算机网络总结
- angularjs $http 提交post问题
- 【集训队互测2013】供电网络
- 理解tcp关闭连接中的time_wait状态
- 网络实时网络监控工具iftop
- TCP/IP协议 (需要协议时进行查询)
- 计算机网络之数据链路层
- HttpClient4.5教程-第二章-连接管理
- iOS通过UIApplication获取网络状态
- Http_load的安装和使用
- linux下常见网络故障的处理思路
- TCP协议回顾
- http协议post数据标准格式
- TCP保活(TCP keepalive)
- httpclient 学习备忘
- HTTP协议的GET请求和POST请求