TCP/IP TIME_WAIT和CLOSE_WAIT
2015-11-27 15:05
323 查看
1.TIME_WAIT
TIME_WAIT 是主动关闭 TCP 连接的那一方出现的状态,系统会在 TIME_WAIT 状态下等待 2MSL(maximum segment lifetime )后才能释放连接(端口)。通常约合 4 分钟以内。
进入 TIME_WAIT 状态等待 2MSL 的目的:确保连接可靠地关闭,避免产生套接字混淆(同一个端口对应多个套接字)。
服务器产生大量 TIME_WAIT 的原因:服务器存在大量的主动关闭操作,需关注程序何时会执行主动关闭(如批量清理长期空闲的套接字等操作)。一般我们自己写的服务器进行主动断开连接的不多,除非做了空闲超时之类的管理。
2. CLOSE_WAIT
CLOSE_WAIT 是被动关闭 TCP 连接时产生的,如果收到另一端关闭连接的请求后,本地不关闭相应套接字就会导致本地套接字进入这一状态。如果存在大量的 CLOSE_WAIT,说明客户端并发量大,且服务器未能正常感知客户端的退出,也并未及时 close 这些套接字。
可以用以下命令查看TCP的状态
netstat -n | awk '/^tcp/ {++state[$NF]} END{for(key in state) print key,"/t",state[key]}'
TIME_WAIT 是主动关闭 TCP 连接的那一方出现的状态,系统会在 TIME_WAIT 状态下等待 2MSL(maximum segment lifetime )后才能释放连接(端口)。通常约合 4 分钟以内。
进入 TIME_WAIT 状态等待 2MSL 的目的:确保连接可靠地关闭,避免产生套接字混淆(同一个端口对应多个套接字)。
服务器产生大量 TIME_WAIT 的原因:服务器存在大量的主动关闭操作,需关注程序何时会执行主动关闭(如批量清理长期空闲的套接字等操作)。一般我们自己写的服务器进行主动断开连接的不多,除非做了空闲超时之类的管理。
2. CLOSE_WAIT
CLOSE_WAIT 是被动关闭 TCP 连接时产生的,如果收到另一端关闭连接的请求后,本地不关闭相应套接字就会导致本地套接字进入这一状态。如果存在大量的 CLOSE_WAIT,说明客户端并发量大,且服务器未能正常感知客户端的退出,也并未及时 close 这些套接字。
可以用以下命令查看TCP的状态
netstat -n | awk '/^tcp/ {++state[$NF]} END{for(key in state) print key,"/t",state[key]}'
相关文章推荐
- linux 网络编程-基础篇
- 纯线性同余随机数生成器 http://www.cnblogs.com/xkfz007/archive/2012/03/27/2420154.html
- 基于UDP可靠传输协议UDT----剖析之发送和接收缓冲区
- TCP三次握手的正确使用姿势
- C语言 随机数 (2012-08-20 19:15:38) http://blog.sina.com.cn/s/blog_8b745a5f01014ec7.html
- MediaPlayer播放网络资源
- rand与srand函数的使用 http://blog.chinaunix.net/uid-25906157-id-3165140.html
- 通过HttpClient调用XDOC云服务
- HttpClient通过HttpPost传递参数
- Android M(6.0) 中删除Apache HTTP Client的解决方案
- Android获取网络的名称
- Nginx配置SSL证书部署HTTPS网站
- 随手写个网络通讯情况监控“微系统”
- httpclient与webapi
- shell脚本网络流量实时查看
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- git使用git-credential-winstore保存https访问密码
- 窃听
- 另一种办法突破上传类型限制
- ubuntu 12.04 无法连接无线网络驱动问题解决