TCP连接的11种状态变迁
来源:互联网 发布:唐璜歌剧经典曲目知乎 编辑:程序博客网 时间:2024/06/05 14:59
转自:http://blog.csdn.net/engrossment/article/details/8104482
1、先上图:
2、全部11种状态
2.1、客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。
2.2、服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
2.3、共有的:(1)CLOSED (2)ESTABLISHED 。
3、状态变迁
3.1、建立连接时的状态变迁
一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。服务器收到客户端的报文后向客户端发送ACK和SYN报文,此时服务器的状态变为SYN_RCVD。然后,客户端收到ACK、SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED,服务器收到客户端的ACK后也变为ESTABLISHED。此时,3次握手完成,连接建立!
3.2、断开连接时的状态变迁
由于tcp连接是全双工的,断开连接会比建立连接麻烦一点点。客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1。服务器收到FIN后向客户端发生ACK,服务器状态变为CLOSE_WAIT。客户端收到ACK后就进入FIN_WAIT2状态。此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送。直到发完了,就发送FIN报文,此时服务器进入LAST_ACK状态。客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。
至此,还有一个状态没有提及:CLOSING状态。CLOSING状态表示客户端发生了FIN,但没有收到服务器的ACK,却收到了服务器的FIN。这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。
- TCP连接的11种状态变迁
- TCP连接的11种状态变迁
- TCP连接的11种状态变迁
- TCP连接的11种状态变迁
- 网络随笔(二)------TCP连接的11种状态变迁
- TCP协议的11种状态变迁
- TCP的状态变迁
- TCP/IP 11种状态变迁
- TCP拥塞状态的变迁
- tcp的状态变迁图
- TCP/IP连接状态变迁图CLOSE_WAIT
- TCP/IP连接状态变迁图CLOSE_WAIT
- T/TCP状态变迁
- TCP状态变迁
- TCP状态变迁图
- 重温TCP状态变迁
- tcp状态变迁图
- Tcp状态变迁详解
- Yara规则编写
- CSS的盒子模型
- 二分查找法 (折半法)
- unity gicache failed writing to tmp光照临时文件爆满问题
- 处理运行时变更---Develop ---API Guides ---App Resources
- TCP连接的11种状态变迁
- pycharm 2016 注册码(2016.2.2亲测可用)
- css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
- Easyui如何获取一行当中的某个数据
- 快速清理Android中无用的资源信息,图片,字符串等
- 面向对象之名词解释
- IE下兼容CSS3属性(或IE兼容box-shadow)方法
- 一个设置button上字体的封装
- addTextChangedListener(文本监听)参数解释及实现EditText字数监听