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. Python学习笔记20:server先进

    我们不依赖于一个框架,CGI如果是,只能使用socket介面.他完成了一个可以处理HTTP要求Pythonserver. 基于,不管是什么的计算机的操作系统(推荐Linux)和Python该计算机可被 ...

  2. 笔试题&面试题:输入一个维度,逆时针打印出一个指定矩阵

    称号:考虑到用户层面.打印出指定的矩阵,例如,一个给定的用户10,例如,下面的输出应被视为在图: 程序如下所示: #include <stdio.h> #include <mallo ...

  3. 文件搜索神器everything 你不知道的技巧总结

    everything这个软件用了很久,总结了一些大家可能没注意到的技巧,分享给大家 1.指定文件目录搜索示例: TDDOWNLOAD\ abc        在所有TDDOWNLOAD文件夹下搜索包含 ...

  4. OA项目设计的能力③

    1.然后来了一个,写在我们的主要要求之一,有回波数据还需要添加的方法,我们需要知道,事实上,页被传递id演出id通讯实体name,所以想要回显就是须要得到privilegeIds,假设像上一篇在jsp ...

  5. BibTex (.bib) 文件的凝视

    1) 将某个參考文献所有去掉,能够去掉前面的『@』 样例 @article{##,    author = {###},    title = {###},    journal = {###},   ...

  6. 【Android基础】点击Back键退出应用程序

    //第一种方法(弹出对话框) @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-genera ...

  7. LinuxDLL加载优化方案

    作者:zhanhailiang 日期:2014-10-26 linux程序动态库载入流程简单介绍 linux从程序(program或对象)变成进程(process或进程),简单说来须要经过三步: fo ...

  8. Unity GUI选择与评价

    因为Unity内建的GUI不管是不是从开发效率或效率强制,因此,许多派生GUI插入,什么插件的选择,是一个非常值它被认为是. 既然是评价,就会有非常多的主观意识,这不一定成为选择的根据. 再比方.我已 ...

  9. tomcatserver解析(六)-- Acceptor

    Acceptor负责用来管理连接到tomcatserver的数量,来看看Acceptor在tomcatserver中的应用,是怎样实现连接管理的,socket连接建立成功之后,是怎样实现内容的读写的( ...

  10. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...