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. S2SH新手框架结构的准备工作只需要导入这些文件

    实习北京最近一直在某公司.时间很冲突,总想着有事找东西坐,思想,做事先成套我吧 一套完整的东西想好主题,术去实现了,在学校尽管说是学了J2EE,可是确实没学到东西,Struts2+Hibernate不 ...

  2. MyEclipse—怎样在MyEclipse中创建servlet3.0

    servlet3.0随着Java EE6规范一起公布,那么怎样在MyEclipse中创建3.0版的servlet呢? 1.启动MyEclipse.获得下图: 2.点击上图"File" ...

  3. 谈话节目APE系列:如何成为技术达人

    作为一个程序猿,总有消退的前辈.或更年轻的同行.牛逼的人总是羡慕. 让我们搞自己痛苦的日子 BUG .头发很快结束了抓,人们扫两.修改一行代码.问题得以克服:例如,他们自己开发的十年,少付 10K , ...

  4. 使用一个T-SQL语句批量查询数据表占用空间及其行数

    原文:使用一个T-SQL语句批量查询数据表占用空间及其行数 要找到数据库中数据表占用的空间和存在的行数.可以使用sp_spaceused搭配数据表的名称.就可以产生该表耗用的空间和现有行数. 如: U ...

  5. matlab 图片批量读取

    1. 指定的路径 单目录data所有图片 file_path = '.\data\';% 图片目录路径 img_path_list = dir(strcat(file_path,'*.jpg'));% ...

  6. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  7. paip.自适应网页设计 同 响应 与设计的原理的差and实践总结

    paip.自适应网页设计 同 响应 与设计的原理的差and实践总结 响应式Web设计(Responsive Web design)的理念是: 1 #-----------自适应布局VS响应式布局 2 ...

  8. 使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0

    原文:使用Advanced Installer 自动部署 Arcgis Engine Runtime 10.0 目前采用Arcgis9.2 + c#(vs2008)作为程序开发平台,是一个不错的搭配. ...

  9. SpringMVC现实

    夹 一个.前言 两.spring mvc 核心类和接口 三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说 ...

  10. 正则获取URL参数

    一 获取指定URL参数 function getUrlParams(name) { var reg = new RegExp("(^|&)" + name + " ...