tcp 状态转移图详解
虚线表示服务端的状态转移,实现表示客户端的状态转移。
初始的close状态并不是真是的状态,只是为了方便描述开始和终止状态而构造出来的。
从服务端的状态转移开始说:
服务端打开后处于listen状态,等待客户端的连接请求。当服务端收到客户端发来的SYN时,服务端回复SYN和ACK进入SYNRECEIVE状态,这里对应三次握手的第一次和第二次,即 客户端发送请求,服务端回复ACK并发送SYN。服务端再次受到ACK时,服务端认为连接已经建立,进入ESTABLISHED状态。服务端收到FIN时,表明客户端要关闭连接,这时服务端进入CLOSE_WAIT状态,此时,服务端不再接收数据,但是可以继续发生数据,当服务端的数据发送完成后,服务端发送FIN,进入LASK_ACK状态,在LASK_ACK状态下,收到客户端发来的针对FIN的ACK后,服务端关闭连接,进入CLOSE状态。
客户端的状态转移:
客户端发送SYN进入SYNSNED 状态,当收到服务端发来的SYN和ACK后,发送ACK, 这里是三次握手中,第三次的过程。客户端发送完ACK进入连接建立状态ESTABLISHED。客户端发送FIN主动关闭连接,进入FIN_WAIT_1,在这个状态下,服务可能回复:
1.ACK(表明服务端还要继续发送数据), 此时,客户端进入FIN_WAIT_2状态,等待服务端关闭连接。
2.或者收到FIN(服务端刚好也要关闭连接),此时,客户端发送ACK,并进入CLOSING状态,等待接收之前发送FIN 对应的ACK。
3.或者收到FIN+ACK(服务端收到关闭连接请求同时也发生关闭连接),此时,客户端发送ACK,进入TIME_WAIT状态。
对于1和2情况,当收到服务端发来的FIN回复ACK(1的情况)或收到ACK(2的情况)后,客户端进入TIME_WAIT状态。
TIME_WAIT 状态是在服务端发送FIN后,客户回复ACK后,客户端需要等待2MSL时间,此时若是客户端回复的ACK因为网络的原因,服务端没有收到,服务端要重发FIN,客户端此时处于TIME_WAIT状态,可以继续发送ACK。 总体来说TIME_WAIT状态时为了保证最后一个ACK因丢失,而等待重发的时间。
上面的解释 仅仅是正常状态的变迁。(粗实线和粗的虚线) 当SYNRECEIVE状态是由LISTEN状态进入时,(收到RST)才能变迁至LISTEN状态。
tcp 状态转移图详解的更多相关文章
- TCP/IP详解学习笔记
TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...
- TCP/IP详解 (转)
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 《TCP/IP详解卷1:协议》第1章 概述-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP/IP详解
第一篇 TCPIP协议详解 第1章 TCPIP协议族 第2章 IP协议详解 第3章 TCP协议详解 第4章 TCP/IP通信案例:访问Internet上的Web服务器 一.TCP/IP协议族 TCP/ ...
- TCP/IP详解--发送ACK和RST的场景
在有以下几种情景,TCP会把ack包发出去: 1.收到1个包,启动200ms定时器,等到200ms的定时器到点了(第二个包没来),于是对这个包的确认ack被发送.这叫做“延迟发送”: 2.收到1个包, ...
- TCP/IP详解--连接状态变迁图CLOSE_WAIT
终止一个连接要经过4次握手.这由TCP的半关闭(half-close)造成的.既然一个TCP连接是全双工(即数据在两个方向上能同时传递,可理解为两个方向相反的独立通道),因此每个方向必须单独地进行关闭 ...
- TCP IP详解(转)
大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
随机推荐
- sqlsever 和oracle的参数
StringBuilder strSql = new StringBuilder(); strSql.Append("insert into YXZY_TSDQWH("); str ...
- 【教训】null == '',改造ThinkSNS 系统里面的一个缓存管理函数S()后,留下一个大bug
本来想简化 ThinkSNS 系统里面的一个缓存管理函数: <?php /** * 用来对应用缓存信息的读.写.删除 * $expire = null/0 表示永久缓存,否则为缓存有效期 */ ...
- Vue + Webpack + Vue-loader 系列教程
http://www.cnblogs.com/terry01/p/5953464.html 介绍 Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue 组件转化成 ...
- yaffs和jffs2简单比较
转:http://blog.chinaunix.net/uid-27675161-id-3392636.html 相关知识引用<嵌入式 Linux 应用开发 完全手册> Nand F ...
- 泳池水面fresnel 的近似替代
vs float4 ep = TBMultiply(ModelViewMatrix, FinalPosition); DistFromEye.x = TBSaturate( 10.0 + ep.z / ...
- 【Hadoop】Hadoop MR 性能优化 Combiner机制
1.概念 2.参考资料 提高hadoop的mapreduce job效率笔记之二(尽量的用Combiner) :http://sishuo(k).com/forum/blogPost/list/582 ...
- Poj 4227 反正切函数的应用
Description 反正切函数可展开成无穷级数,有例如以下公式 (当中0 <= x <= 1) 公式(1) 使用反正切函数计算PI是一种经常使用的方法.比如,最简单的计算PI的方法: ...
- Angular 学习笔记——$interpolateProvide
<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...
- Linux服务器大量向外发包问题排查
最近Linux redhat 6.5 APP 业务系统,向外大量发送流量,不断建立tcp连接,目标地址是美国的一个IP,估计被当成肉鸡了,比较悲惨,直接飞向IDC机房,防火墙显示这个APP服务器tcp ...
- GROUP BY和HAVING 以及mysql中常用的日期函数
一.mysql中的GROUP BY和HAVINGGROUP BY常见的是和聚合函数(SUM,MIN,MAX,COUNT)搭配使用. 比如:SELECT category,SUM(money) AS ` ...