- 浏览: 218272 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (110)
- java (111)
- c# winform tablelayoutpanel学习 合并行的布局及动态增加删除内部控件 (1)
- javascript常用正则 (1)
- 认识Java程序 (1)
- UniqTask for android (1)
- JAX-RS 从傻逼到牛叉 2:开发一个简单的服务 (1)
- Spring MVC 数据绑定的扩展 (1)
- 手机分辨率 (1)
- tomcat的favicon.ico的用法 (1)
- Cookie读写demo (1)
- hive相关操作文档收集 (1)
- 测试开发工程师的发展 (1)
- JSF入门十(自定义转换器) (1)
- 《你能行:微软精英的职场心里话》 (1)
- JNI程序如何检测C代码的内存泄漏 (1)
- 做了几天的调研工作 (1)
- 使用Microsoft Web Application Stress进行压力测试 (1)
- 在线共享音乐吧(Online Share Music Bar)解决方案 (1)
- 如何二次压缩RM和RMVB格式文件 (1)
- 突然想起了红色联盟 就去看了看 (1)
- 推荐两个关于DB2认证的站点 (1)
- 安装Microsoft .NET Framework SDK 快速入门、教程和示例 (1)
- 去掉C/C++程序代码中的注释 (1)
- 数据结构之kmp模式匹配 (1)
- JS跨域 (1)
- SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法 (1)
- Android开发之fedora13下编译Android源码 (1)
- Android开发之Linkify (1)
- json学习之三:JSONArray的应用 (1)
- js 数组操作代码集锦 (1)
- jquery跨域调用json数据 (1)
- qtdemo浅析 (1)
最新评论
-
songshuang:
最近怎么都盗我的文
做个小调查,程序员们都是什么星座的?
tcp状态转移要点<br>tcp协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源
客户端tcp状态迁移:<br>closed->syn_sent->established->fin_wait_1->fin_wait_2->time_wait->closed<br>服务器tcp状态迁移:<br>closed->listen->syn收到->established->close_wait->last_ack->closed<br>当客户端开始连接时,服务器还处于listening,客户端发一个syn包后,他就处于syn_sent状态,服务器就处于sys收到状态,然后互相确认进入连接状态established.
1、listening状态<br> 服务启动后首先处于侦听(listening)状态。
2、established状态<br> established的意思是建立连接。表示两台机器正在通信。
<span style="color: #ff0000;">3、close_wait</span>
对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成close_wait 此时我方要调用close()来使得连接正确关闭
<span style="color: #ff0000;">4、time_wait</span>
我方主动调用close()断开连接,收到对方确认后状态变为time_wait,缺省为240秒。tcp协议规定time_wait状态会一直持续2msl(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于time_wait状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少time_wait状态造成的资源浪费。
目前有一种避免time_wait资源浪费的方法,就是关闭socket的linger选项。但这种做法是tcp协议不推荐使用的,在某些情况下这个操作可能会带来错误
断开连接的时候, 当发起主动关闭的左边这方发送一个fin过去后,右边被动关闭的这方要回应一个ack,这个ack是tcp回应的,而不是应用程序发送的,此时,被动关闭的一方就处于close_wait状态了。如果此时被动关闭的这一方不再继续调用closesocket,那么他就不会发送接下来的fin,导致自己老是处于close_wait。只有被动关闭的这一方调用了closesocket,才会发送一个fin给主动关闭的这一 方,同时也使得自己的状态变迁为last_ack。
出现大量close_wait的原因很简单,就是某一方在网络连接断开后,没有检测到这个错误,没有执行closesocket,导致了这个状态的实现,这在tcp/ip协议的状态变迁图上可以清楚看到。同时和这个相对应的还有一种叫time_wait的。<span style="color: #ff0000;">一端的socket调用close后,另一端的socket没有调用close</span>
另外,把socket的so_linger设置为0秒拖延(也就是立即关闭)在很多时候是有害处的。 <br>还有,把端口设置为可复用是一种不安全的网络编程方法
当主动关闭的一方发送fin到被动关闭这边后,被动关闭这边的tcp马上回应一个ack过去,同时向上面应用程序提交一个error,导 致上面的socket的send或者recv返回socket_error,正常情况下,如果上面在返回socket_error后调用了closesocket,那么被动关闭的者一方的tcp就会发送一个fin过去,自己的状态就变迁到last_ack
虚线和实线分别对应服务器端(被连接端)和客户端端(主动连接端)。 结合上图使用netstat -na命令即可知道到当前的tcp连接状态。一般listen、established、time_wait是比较常见。
分析:
这个问题主要因为tcp的结束流程未走完,造成连接未释放。现设客户端主动断开连接,流程如下
client 消息 server
close()<br>------ fin -------><br>fin_wait1 close_wait<br><----- ack -------<br>fin_wait2 <br>close()<br><------ fin ------ <br>time_wait last_ack
------ ack -------> <br>closed<br>closed
如上图所示,由于server的socket在客户端已经关闭时而没有调用关闭,造成服务器端的连接处在“挂起”状态,而客户端则处在等待应答的状态上。此问题的典型特征是:<span style="color: #ff0000;">一端处于fin_wait2 ,而另一端处于close_wait</span>
于基于tcp的http协议,关闭tcp连接的是server端,这样,server端会进入time_wait状态,可 想而知,对于访问量大的web server,会存在大量的time_wait状态,假如server一秒钟接收1000个请求,那么就会积压240*1000=240,000个time_wait的记录,维护这些状态给server带来负担。当然现代操作系统都会用快速的查找算法来管理这些time_wait,所以对于新的tcp连接请求,判断是否hit中一个time_wait不会太费时间,但是有这么多状态要维护总是不好。
http协议1.1版规定default行为是keep-alive,也就是会重用tcp连接传输多个request/response,一个主要原因就是发现了这个问题。还有一个方法减缓time_wait压力就是把系统的2*msl时间减少,因为240秒的时间实在是忒长了点,对于windows,修改注册表,在hkey_local_machine\ system\currentcontrolset\services\ tcpip\parameters上添加一个dword类型的值tcptimedwaitdelay,一般认为不要少于60,不然可能会有麻烦。
客户端tcp状态迁移:<br>closed->syn_sent->established->fin_wait_1->fin_wait_2->time_wait->closed<br>服务器tcp状态迁移:<br>closed->listen->syn收到->established->close_wait->last_ack->closed<br>当客户端开始连接时,服务器还处于listening,客户端发一个syn包后,他就处于syn_sent状态,服务器就处于sys收到状态,然后互相确认进入连接状态established.
1、listening状态<br> 服务启动后首先处于侦听(listening)状态。
2、established状态<br> established的意思是建立连接。表示两台机器正在通信。
<span style="color: #ff0000;">3、close_wait</span>
对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成close_wait 此时我方要调用close()来使得连接正确关闭
<span style="color: #ff0000;">4、time_wait</span>
我方主动调用close()断开连接,收到对方确认后状态变为time_wait,缺省为240秒。tcp协议规定time_wait状态会一直持续2msl(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于time_wait状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少time_wait状态造成的资源浪费。
目前有一种避免time_wait资源浪费的方法,就是关闭socket的linger选项。但这种做法是tcp协议不推荐使用的,在某些情况下这个操作可能会带来错误
断开连接的时候, 当发起主动关闭的左边这方发送一个fin过去后,右边被动关闭的这方要回应一个ack,这个ack是tcp回应的,而不是应用程序发送的,此时,被动关闭的一方就处于close_wait状态了。如果此时被动关闭的这一方不再继续调用closesocket,那么他就不会发送接下来的fin,导致自己老是处于close_wait。只有被动关闭的这一方调用了closesocket,才会发送一个fin给主动关闭的这一 方,同时也使得自己的状态变迁为last_ack。
出现大量close_wait的原因很简单,就是某一方在网络连接断开后,没有检测到这个错误,没有执行closesocket,导致了这个状态的实现,这在tcp/ip协议的状态变迁图上可以清楚看到。同时和这个相对应的还有一种叫time_wait的。<span style="color: #ff0000;">一端的socket调用close后,另一端的socket没有调用close</span>
另外,把socket的so_linger设置为0秒拖延(也就是立即关闭)在很多时候是有害处的。 <br>还有,把端口设置为可复用是一种不安全的网络编程方法
当主动关闭的一方发送fin到被动关闭这边后,被动关闭这边的tcp马上回应一个ack过去,同时向上面应用程序提交一个error,导 致上面的socket的send或者recv返回socket_error,正常情况下,如果上面在返回socket_error后调用了closesocket,那么被动关闭的者一方的tcp就会发送一个fin过去,自己的状态就变迁到last_ack
虚线和实线分别对应服务器端(被连接端)和客户端端(主动连接端)。 结合上图使用netstat -na命令即可知道到当前的tcp连接状态。一般listen、established、time_wait是比较常见。
分析:
这个问题主要因为tcp的结束流程未走完,造成连接未释放。现设客户端主动断开连接,流程如下
client 消息 server
close()<br>------ fin -------><br>fin_wait1 close_wait<br><----- ack -------<br>fin_wait2 <br>close()<br><------ fin ------ <br>time_wait last_ack
------ ack -------> <br>closed<br>closed
如上图所示,由于server的socket在客户端已经关闭时而没有调用关闭,造成服务器端的连接处在“挂起”状态,而客户端则处在等待应答的状态上。此问题的典型特征是:<span style="color: #ff0000;">一端处于fin_wait2 ,而另一端处于close_wait</span>
于基于tcp的http协议,关闭tcp连接的是server端,这样,server端会进入time_wait状态,可 想而知,对于访问量大的web server,会存在大量的time_wait状态,假如server一秒钟接收1000个请求,那么就会积压240*1000=240,000个time_wait的记录,维护这些状态给server带来负担。当然现代操作系统都会用快速的查找算法来管理这些time_wait,所以对于新的tcp连接请求,判断是否hit中一个time_wait不会太费时间,但是有这么多状态要维护总是不好。
http协议1.1版规定default行为是keep-alive,也就是会重用tcp连接传输多个request/response,一个主要原因就是发现了这个问题。还有一个方法减缓time_wait压力就是把系统的2*msl时间减少,因为240秒的时间实在是忒长了点,对于windows,修改注册表,在hkey_local_machine\ system\currentcontrolset\services\ tcpip\parameters上添加一个dword类型的值tcptimedwaitdelay,一般认为不要少于60,不然可能会有麻烦。
发表评论
-
qtdemo浅析
2012-02-07 16:14 1585[size=x-small;]? ? <span ... -
jquery跨域调用json数据
2012-02-03 11:39 1435? <script type="te ... -
js 数组操作代码集锦
2012-02-03 10:59 1144[size=small;]这段时间做的一个项目,用到数 ... -
json学习之三:JSONArray的应用
2012-02-02 15:29 71524从json数组中得到 ... -
Android开发之Linkify
2012-01-31 13:33 2211<h1>Android开发之Linkify ... -
Android开发之fedora13下编译Android源码
2012-01-11 16:04 1153<h1>Android开发之fedora1 ... -
SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法
2011-12-28 14:13 3870<span style="font-f ... -
JS跨域
2011-12-21 16:43 2638原帖地址:http://itgeeker.com/ma ... -
数据结构之kmp模式匹配
2011-12-21 10:04 1185KMP字符串模式匹配详解 KMP字符串模式匹配通俗点说 ... -
去掉C/C++程序代码中的注释
2011-12-20 16:49 3060程序员面试宝典上面的题目有很多是很经典的问题,可供我 ... -
安装Microsoft .NET Framework SDK 快速入门、教程和示例
2011-12-19 10:09 2054Microsoft .NET Framework SD ... -
推荐两个关于DB2认证的站点
2011-12-19 09:59 848关于DB2认证的在线中文教程<br>htt ... -
突然想起了红色联盟 就去看了看
2011-12-17 10:54 1181突然想起了红色联盟,于是就偷偷的爬上红盟站点,看了看红 ... -
如何二次压缩RM和RMVB格式文件
2011-12-16 17:12 1121对RM/RMVB格式文件进行二次压缩,可以用一个软件E ... -
在线共享音乐吧(Online Share Music Bar)解决方案
2011-12-14 19:54 998</span></font>& ... -
使用Microsoft Web Application Stress进行压力测试
2011-12-14 18:33 879<font size="2" ... -
做了几天的调研工作
2011-12-14 17:29 1017</span></span> ... -
JNI程序如何检测C代码的内存泄漏
2011-12-13 14:59 1448Java调用C的JNI程序很容易出现内存泄漏问题,因为 ... -
《你能行:微软精英的职场心里话》
2011-12-12 14:39 961<p class="MsoNorm ... -
JSF入门十(自定义转换器)
2011-12-09 11:00 975本文参考 http://www.javaworld.c ...
相关推荐
在TCP正常关闭连接的过程中,主动关闭的一方(发起FIN的一方)会经历FIN_WAIT1、FIN_WAIT2和TIME_WAIT状态,而被动关闭的一方(接收FIN的一方)则会经历CLOSE_WAIT、LAST_ACK和CLOSED状态。Close_Wait状态表示被动...
1. CLOSE_WAIT状态的定义和产生原因 2. CLOSE_WAIT状态的解决方法 3. TCP连接的结束流程 4. 使用netstat -na命令查看TCP连接状态 5. 编程的重要性在于确保正确关闭连接 延伸阅读: * CLOSE_WAIT状态的详细解释 * ...
在 TCP 连接中,客户端和服务器端都可以处于不同的状态,例如 ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT 等 trạng thái。 CLOSE_WAIT 状态是 TCP 连接中的一种状态,它表示服务器端已经收到了...
文件"close_wait_0306.chm"和"close_wait_0306"可能是关于这个问题的文档或日志文件,它们可能包含了更详细的错误信息、堆栈跟踪或连接状态的历史记录。CHM文件是Microsoft的帮助文件格式,通常包含软件的文档或技术...
在TCP/IP协议栈中,CLOSE_WAIT是一个非常关键的连接状态,它涉及到客户端和服务器之间的通信。这个状态在处理网络连接时可能出现的问题时尤其重要。本文将深入探讨CLOSE_WAIT错误的含义、原因以及如何解决。 首先,...
系统调优时,理解和处理TIME_WAIT和CLOSE_WAIT状态是关键。TIME_WAIT是为了保证TCP的可靠性,但过多的TIME_WAIT会占用资源。CLOSE_WAIT则可能指示应用程序或系统的问题。解决这些问题需要深入理解TCP连接生命周期,...
TCP连接有多种状态,包括LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、CLOSE_WAIT、FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT等。每个状态都代表了连接的不同生命周期阶段。Close_Wait是服务器端接收到客户端的FIN( ...
在处理TCP连接时,需要特别关注close()函数的使用,因为它可能直接影响到TIME_WAIT状态的处理。 `c-means`可能是指一种基于C语言的聚类算法,虽然在这个上下文中没有直接关联,但如果你正在学习C语言编程,并试图将...
标题和描述所提到的"Linux大量TIME_WAIT解决办法"主要是针对这种情况提供的一系列解决方案。以下是一些关键知识点: 1. **TIME_WAIT状态**: 在TCP四次挥手断开连接的过程中,完成FIN交换后的双方会进入TIME_WAIT...
标题 "tomcat-timewait-closewait.zip" 暗示了这个压缩包可能包含与Tomcat服务器在处理TCP连接时遇到的“Time_wait”和“Close_wait”状态相关的问题和解决方案。这两个术语是TCP/IP协议栈中的关键概念,尤其在高...
客户端:CLOSED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED 服务器:CLOSED -> LISTEN -> ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED TIME_WAIT 状态 TIME_WAIT 状态是一个非常重要的状态,它的...
4. 关闭 TIME_WAIT 连接:使用 netstat -ant | grep TIME_WAIT | awk '{print $2}' | xargs kill -9 命令可以关闭 TIME_WAIT 连接。 网络连接状态详解: 网络连接状态可以分为 12 种可能的状态,前面 11 种是按照 ...
同时,可以调整系统的TCP参数,减少CLOSE_WAIT和TIME_WAIT状态的超时时间。 ```c curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1); ``` 2. 初始化libcurl的正确时机: 在多线程应用程序中,应当在主线程中调用`...
2. **超时设置**:设置合理的TIME_WAIT和CLOSE_WAIT超时时间,避免资源长时间占用。 3. **异常处理**:完善服务器端的异常处理机制,确保在出现异常时能正确关闭连接。 4. **资源管理**:使用连接池可以有效管理...
本文将详细介绍 Linux 下 TCP 参数的优化,包括 CLOSE_WAIT 状态的生成原因、proc/sys/net/ipv4/ 中各项参数的意义和调整方法。 CLOSE_WAIT 状态的生成原因 CLOSE_WAIT 状态是 TCP 连接中一种常见的状态。当服务器...
它可以由多个状态转移到达,包括 FIN_WAIT_2、CLOSING 和 FIN_WAIT_1 状态。TIME_WAIT 状态的存在是为了确保 TCP 连接的可靠终止和允许老的重复分节在网络中消逝。 了解 TCP 连接状态是非常重要的,因为它可以帮助...
主动关闭可能会经过FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT状态,而被动关闭则经历CLOSE_WAIT、LAST_ACK状态。在处理TIME_WAIT状态时,需要注意避免端口冲突,可以使用SO_REUSEADDR选项来允许立即重用套接字地址,或者...
客户端和服务器之间的 TCP 连接,在关闭连接时,需要经历四个阶段:FIN_WAIT_1、CLOSE_WAIT、FIN_WAIT_2 和 TIME_WAIT。其中,FIN_WAIT_2 状态是指客户端已经发送了 FIN 报文,并等待服务器的确认响应。 现在,假设...
导致客户TCP发送一个FIN给服务器,服务器则以一个ACK响应,此时服务器处于CLOSE_WAIT状态,客户端处于FIN_WAIT_2状态。服务器接收到FIN,子进程中止。子进程中止内核关闭所有子进程打开的描述符导致服务器向客户端...