time wait和close wait
一 查看方法
http://blog.csdn.net/qq_37023538/article/details/63008901
二 介绍time wait和close wait
客户端TCP状态:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器TCP状态:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
TIME_WAIT
是主动关闭链接时形成的,等待2MSL时间,约4分钟。主要是防止最后一个ACK丢失。
由于TIME_WAIT 的时间会非常长,因此server端应尽量减少主动关闭连接
CLOSE_WAIT
是被动关闭连接是形成的。根据TCP状态机,服务器端收到客户端发送的FIN,则按照TCP实现发送ACK,因此进入CLOSE_WAIT状态。
但如果服务器端不执行close(),就不能由CLOSE_WAIT迁移到LAST_ACK,则系统中会存在很多CLOSE_WAIT状态的连接。
此时,可能是系统忙于处理读、写操作,而未将已收到FIN的连接,进行close。此时,recv/read已收到FIN的连接socket,会返回0。
三 解决方法:
TIME_WAIT:表示主动关闭,通过优化系统内核参数解决。
CLOSE_WAIT:表示被动关闭,需要从程序本身出发。
TIME_WAIT
修改/etc/sysctl.conf文件:
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭 net.ipv4.tcp_syncookies = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭 net.ipv4.tcp_tw_reuse = 1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 net.ipv4.tcp_tw_recycle = 1#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间 net.ipv4.tcp_fin_timeout=30
生效,如下命令
/sbin/sysctl -p
CLOSE_WAIT
出现大量close_wait的现象,主要原因是某种情况下对方关闭了socket链接,但是我方忙与读或者写,没有关闭连接。
代码需要判断socket,一旦读到0,断开连接,read返回负,检查一下errno,如果不是AGAIN,就断开连接。
最新文章
- 【Python】SyntaxError: unexpected EOF while parsing
- A Neural Algorithm of Artistic Style
- boost::spirit模块实现一个以逗号分隔的数字列表的生成器的测试程序
- Microsoft Visual Studio 文件识别及其用途简述
- Go+Vue打印店远程打印小程序源码
- 公众号管理模块-DouPHP模块化企业网站管理系统v1.6
- 发布Drools Workbench到Tomcat on Linux
- 攻击者巧妙滥用谷歌 DoH 下载恶意软件
- python学生管理系统连接数据库版,很详细,这个是用函数版的增删改查,拿去用,不谢。...
- CentOS安装JDK 17
- Tomcat的下载与安装
- 7、微信小程序-wxs脚本
- 前淘宝工程师谈12306:做它比做淘宝难
- Debian7系统安装python3
- 又猎一“狐”:一名外逃越南嫌疑人落网中
- Python小黄人绘制
- ubuntu 14.04 32位设置1920x1080分辨率
- 求解旅行商(货郎担)问题的五种方法
- 登录网页无法连接服务器,"无法连接到服务器,用户xxx登陆失败" 解决办法
- s5pv210_gpio驱动及其在android2.3.1下jni调用