TCP连接状态变化
TCP连接状态变化
参考文章:TCP连接的状态详解以及故障排查
TCP建立连接——三次握手
CLOSED:起始状态,无任何连接。
LISTEN:服务端建立socket之后需要listen进入LISTEN(侦听)模式,侦听来自远方的TCP连接请求。
SYN_SENT:客户端建立socket之后需要connect服务器,向服务端发送SYN=j(随机数)申请连接,然后会进入SYN_SENT状态。
SYN_RCVD:服务端在** 侦听模式 **下收到SYN后会向客户端回应ACK=j+1,同时发送SYN=k,然后进入SYN_RCVD状态。
ACK是确认标志,可以附带进别的消息中,将ACK附带进SYN中,所以只发送一个SYN/ACK。具体可以自行搜索,参考:TCP的确认系列——发送状态转换机
ESTABLISHED:客户端收到ACK后进行验证,同时回应服务端发来的SYN,返回ACK=k+1,然后进入ESTABLISHED状态。服务端收到最后一个ACK后验证,然后进入ESBABLESHED。表示双方的连接建立完成,可以进行数据传输。
还有一种少见的建立连接的方式,不分服务端与客户端,两端同时发起连接,后面会给出一篇文章链接
TCP的连接和释放,里面有提到。
TCP断开连接——四次挥手
一般由客户端主动断开连接,服务端只做被动连接。但是如果有必要,服务端也可主动断开连接。
FIN_WAIT_1:在ESTABLISHED(连接)状态下,主动断开连接会向对端发送FIN,然后进入FIN_WAIT_1状态。
CLOSED_WAIT:被动断开连接的一端收到FIN之后,会回应ACK,然后进入CLOSED_WAIT状态,在CLOSED_WAIT状态下,连接只能发送数据不能接收数据。
FIN_WAIT_2:主动断开连接的一端收到FIN的ACK回应后会进入FIN_WAIT_2状态。此时无法再发送数据但是可以接受数据。
LAST_ACK:被动断开连接的一端在缓冲区数据发送完成后会发送FIN然后进入LAST_ACK状态。如果程序健壮性较差,在socket收到文件结束符之后没有关闭socket,此处不会发出FIN,导致连接停留在CLOSED_WAIT&FIN_WAIT_2状态。
TIME_WAIT:主动断开连接的一端在收到对端的FIN后回应ACK然后进入TIME_WAIT。此状态下连接已断开,但为了避免最后一个ACK在网络中迷路,而导致的状态紊乱,端口会被保留2*MSL的时长。
MSL(Maximum Segment Lifetime)——参考:什么是2MSL
CLOSED:在TIME_WAIT状态停留时间达到2*MSL之后进入CLOSED状态,表示无任何连接。
还有一种少见的断开连接的方式,两边同时主动断开连接,在这种情况下会有有一种其他状态——CLOSING状态,后面的文章链接
TCP的连接和释放,里面有提及。
这篇文章有提及同时发起连接和同时断开连接的状态变换:TCP的连接和释放
TCP连接状态变化的更多相关文章
- TCP连接的状态详解以及故障排查
我们通过了解 TCP各个状态 ,可以排除和定位网络或系统故障时大有帮助. 一.TCP状态 LISTENING :侦听来自远方的TCP端口的连接请求 . 首先服务端需要打开一个 socket 进行监听, ...
- TCP连接状态
TCP 连接状态按 TCP 协议的标准表示法, TCP 可具有如下几种状态,为讨论方便,如下讨论中区分服务端和客户端,实际软件处理上对二者一视同仁. CLOSED关闭状态.在两个通信端使用“三路握手” ...
- TCP 连接中的TIME_WAIT
原文:http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节,一次http请求,谁会先断开TCP连接?什么情况下客户端先断,什么 ...
- TCP/IP 笔记 - TCP连接管理
TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...
- TCP系列07—连接管理—6、TCP连接管理的状态机
经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立 ...
- TCP系列03—连接管理—2、TCP连接的同时打开和同时关闭
在前面的内容中我们介绍了TCP连接管理中最常见的三次握手方式和四次挥手的方式.但是有可能A和B两端同时执行主动打开并连接对方或者同时执行主动关闭连接(尽管发生这种情况的可能性比较低低),这个时候的流程 ...
- 转载:TCP连接的状态详解以及故障排查
FROM:http://blog.csdn.net/hguisu/article/details/38700899 该博文的条理清晰,步骤明确,故复制到这个博文中收藏,若文章作者看到且觉得不能装载,麻 ...
- 影响TCP连接寿命的因素
NAT超时 大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断.NAT超时是影响TCP连接寿命的一个重要因素(尤其是国内),所以客户端自动测算NAT超时 ...
- 多图详解 TCP 连接管理,太全了!!!
TCP 是一种面向连接的单播协议,在 TCP 中,并不存在多播.广播的这种行为,因为 TCP 报文段中能明确发送方和接受方的 IP 地址. 在发送数据前,相互通信的双方(即发送方和接受方)需要建立一条 ...
随机推荐
- [ACM] hdu 1217 Arbitrage (bellman_ford最短路,推断是否有正权回路或Floyed)
Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to tr ...
- Logical Volume Manager (Linux)
http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) Logical Volume Manager (Linux) From Wiki ...
- 我对C语言输入和输出和一些其他的疑惑点
gets(字符串数组) 用来接收字符串数组 等同于 scanf("%s",字符串数组名) 需要说的一点是 字符串的数组名 就表示数组的第一个元素的地址 所以加不加&取地址 ...
- (总结)Nginx配置文件nginx.conf中文具体解释
#定义Nginx执行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...
- kubectl技巧之查看资源列表,资源版本和资源schema配置
系列目录 在kubernetes里,pod,service,rs,rc,deploy,resource等对象都需要使用yaml文件来创建,很多时候我们都是参照照官方示例或者一些第三方示例来编写yaml ...
- mysql导入数据库_仅仅用frm向mysql导入表结构
网上一个连接mysql的jsp代码段,给了数据库的备份文件.可是仅仅有frm, mysql的每张表有三个文件.各自是,*.frm是描写叙述了表的结构.*.MYD保存了表的数据记录.*.MYI则是表的索 ...
- EEPlat 主子表和对象引用配置实例
本次实例以常见的订单维护,来介绍下平台内类似主子表结构的配置方法. 订单包含订单头和订单明细.订单头包含简单信息:订单编号.订单状态.客户. 交付日期.订单日期.备注等.订单明细包含:订单产品.定单数 ...
- [Cocoa]深入浅出Cocoa之Bonjour网络编程
本文转载至 http://www.cnblogs.com/kesalin/archive/2011/09/15/cocoa_bonjour.html 深入浅出Cocoa之Bonjour网络编程 罗 ...
- meteor ---快速启动meteor和 mongodb 方法--MAC
c:~ lsg$ cat .bash_profile c:~ lsg$ vim .bash_profile --- 修改这个文件 按i 修改文件 shift+Z+Z 保存修改内容 添加如下代码 exp ...
- Java其实不支持垃圾回收
Java其实不支持垃圾回收.如果真的支持的话,大多数Java程序在运行的一开始就应该把程序本身删除,因为这些程序本身就是垃圾. // TODO: This is a 分割线. Please no ...