TCP 连接状态
按 TCP 协议的标准表示法, TCP 可具有如下几种状态,为讨论方便,如下讨论中区分服务端和客户端,实际软件处理上对二者一视同仁。

CLOSED
关闭状态。在两个通信端使用“三路握手”机制建立连接之前即处于该状态。

LISTEN
监听状态。此状态是对服务器端而言的。处于此状态的套接字正在等待客户端的连接请求。
SYN-SENT
客户端发送一个 SYN 报文请求建立与服务器端的连接后,设置为该状态。注意处于此状态的套接字仅仅表示发送了 SYN 请求报文,但尚未得到对方应答。如果已得到对方应答,则就会进入 ESTABLISHED 状态。
SYN-RECV
一般服务端在接收到客户端发送的 SYN 报文后,会发送一个附带 ACK 的 SYN 报文进行与对方的同步,之后将其状态设置为 SYN-RECV。
ESTABLISHED
客户端接收到其之前发送的 SYN 报文的 ACK 后,设置为此状态。并且紧接着发送一个 ACK报文给服务端从而建立正式连接。而此时处于 SYN-RECV 状态的服务端在接收到此 ACK后也会将自己的状态设置为 ESTABLISHED。到此为止,连接完全建立,之后二者既可进行数据的传输。以下状态将无法区分服务端和客户端,主要视哪端首先发起关闭操作。我们将首先发起关闭操作的一端视为客户端,对应的另一端视为服务端。
FIN-WAIT-1
客户端发起关闭操作,此时客户端将发送一个 FIN 报文给对方,并将其状态设置为FIN-WAIT-1。
FIN-WAIT-2
处于 FIN-WAIT-1 状态的客户端在接收到之前发送的 FIN 的 ACK 报文后,将其状态设置为FIN-WAIT-2,然后一直处于该状态,直到接收到对方发送 FIN 报文。注意在接收到 FIN 报文之前,本端仍然可以继续接收对方发送的数据。因为发送 FIN 报文给对方仅仅表示本地不再有数据发送给对方,并不表示本地不再接收对方的数据。这是两回事。处于此状态的套
接字接收到对方发送 FIN 时,将进入 TIME-WAIT 状态。
CLOSE-WAIT
服务端在接收到对方的 FIN 报文时,将本地状态设置为 CLOSE-WAIT,并即刻发送 ACK 报文给对方。此后本地依然可以发送尚未发送的数据直到数据发送完。

CLOSING
当连接双方同时发送 FIN 时,会进入此状态。在前面的讨论中,如果本地发送关闭操作,则会发送一个 FIN 报文给对方,并将自己状态设置为 FIN-WAIT-1,正常情况下,

紧接着应该接收到对方响应的 ACK 报文这样本地就可以进入 FIN-WAIT-2 状态,然后一直等待对方的 FIN 报文。而如果在等待 ACK 报文时,接收到对方的 FIN 报文,则

表示对方同时发起了关闭操作,此时本地并不再进入 FIN-WAIT-2,而是发送一个对此 FIN 的 ACK 报文,并且
进入 CLOSING 状态,如果之后接收到对本地之前发送的 FIN 的 ACK 报文,则直接进入TIME-WAIT 状态。

LAST-ACK
此状态从 CLOSE-WAIT 状态变化而来。承接上文中对 CLOSE-WAIT 状态的讨论,当服务端发送完用户数据后,进行关闭操作,此时便可发送一个 FIN 报文完成通信通道的完

全关闭。在服务端发送这个 FIN 报文后,有两个方面状态的改变,对于服务端,则将状态设置为LAST-ACK,即接下来就等待最后一个客户端响应的 ACK 报文了,一旦接收

到该 ACK 报
文,则连接便完全关闭,服务端将状态设置为 CLOSED。而对于客户端而言,当接收到服务端发送的 FIN 时,其首先发送一个 ACK 报文给服务端,之后将状态从 FIN-WAIT-2 设置
为 TIME-WAIT,表示等待 2MSL 时间(此称为静等待时间)。
TIME-WAIT
静等待状态。这是对于首先发送关闭操作的一端(一般即客户端)所最后经历的状态。应该说在接收到服务端发送的 FIN 后,本地既可设置状态为 CLOSED。之所以需要等待一段时
间(通常为 2MSL: Maximum Segment Timelife)一方面是因为避免对服务端 ACK 信号的丢失,这样当服务端重传 FIN 时,客户端可以再响应一个 ACK。这个原因是次要的,因为一
般对于 FIN 数据包的超时,会直接将状态设置为 CLOSED,这样处理不会造成任何有效的影响。另一个方面的主要原因是防止之后重新建立的“化生”套接字接收到老的套接字在网
络中延迟的数据包。所谓“化生”套接字是指通信双方是之前的同一个信道:即具有相同的源端,目的端 IP 地址和端口号。如果之前的套接字有数据包延迟在网络中,有可能这个新
建立的套接字会接收到该数据包从而造成数据误传。等待时间 2MSL 称为报文最大生存时

TCP连接状态的更多相关文章

  1. 查看 Apache并发请求数及其TCP连接状态

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

  2. 查看 并发请求数及其TCP连接状态【转】

    服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  3. Linux下查看Web服务器当前的并发连接数和TCP连接状态

    对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...

  4. 查看 并发请求数及其TCP连接状态

    服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  5. 查看 Apache并发请求数及其TCP连接状态【转】

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80& ...

  6. TCP三次握手及TCP连接状态 TCP报文首部格式

    建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图: 开个玩笑 ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1 SYN(SYNchron ...

  7. zabbix监控 linux/windows 主机tcp连接状态

    更新内容:1).增加了对windows主机的tcp连接状态的监控2).修改linux主机的监控配置,使linux与windwos主机能够使用相同的模板tcp的连接状态对于监控服务器,尤其是Web服务器 ...

  8. Zabbix设置自定义监控项之——监控tcp连接状态

    目录 一.用户自定义参数 二.配置 监控 TCP 连接状态 在实际监控中,除了官方自带的一些监控项,我们很多时候有一些定制化监控,比如特定的服务.TCP 连接状态等等,这时候就需要自定义监控项.自定义 ...

  9. Java网络编程系列之TCP连接状态

    1.TCP连接状态 LISTEN:Server端打开一个socket进行监听,状态置为LISTEN SYN_SENT:Client端发送SYN请求给Server端,状态由CLOSED变为SYN_SEN ...

随机推荐

  1. Oracle生成查询包括对应于所有数据表记录语句中指定的字段名

    应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...

  2. 一C++PSO(PSO)算法

    收集和变化PSO算法,它可用于参考实施: #include <cstring> #include <iostream> #include <cmath> #incl ...

  3. Linus Torvalds来自开发商的消息:成就,不定

    于IEEE 计算机学会在接受记者采访时, Linux父亲解释了他的哲学了操作系统的成功背后.Linus Torvalds在接受IEEE采访计算机学会谈过:"Linux这项新技术是不是它的,但 ...

  4. Java和C#的socket通信相关(转)

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  5. Programming from the ground up(0)

    这本书的英文版是开源.我读了一些.但是,支持的英语水平不走太,然后还有那些谁译的书,但感觉不是太干脆翻译,在一些地方难以清除作者的思路,所以,我要揍很难理解他自己翻译一下原来的地方,这将更好地了解一点 ...

  6. mousewheel 与 DOMMouseScroll

    FF使用DOMMouseScroll,其他浏览器使用mousewheel FF在一个特殊的属性event.detail.表示滚动的值 event.detail 正数:向下滚动,负数:向上滚动 滚动一次 ...

  7. SQL Server审计功能入门:CDC(Change Data Capture)

    原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...

  8. UVA 1364 - Knights of the Round Table (获得双连接组件 + 二部图推理染色)

    尤其是不要谈了些什么,我想A这个问题! FML啊.....! 题意来自 kuangbin: 亚瑟王要在圆桌上召开骑士会议.为了不引发骑士之间的冲突. 而且可以让会议的议题有令人惬意的结果,每次开会前都 ...

  9. UVA662- Fast Food

    题意:在一条公路上,有n个酒店,要建造k个供给站(建造在酒店所在的位置),给出酒店的位置,求怎么样建造供给站才干使得每一个酒店都能得到服务且所要走的路程最短. 思路:在i到j酒店建立一个供给站,要使得 ...

  10. 【iOS开展-50】使用它来创建一个新的类的实现代码包,因此,不自觉地练习简单MVC实验,附带动画

    接下来说说代码封装最后一个个案. 最后一种情况看:[iOS开展-48]九宫格案例:自己主动布局.字典转模型运用.id和instancetype差别.xib反复视图运用及与nib关系 (1)代码封装的原 ...