Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux集群 > Architecture > » 正文

Tcp主动关闭连接导致TIME_WAIT状态

来源: xuhang1128 分享至:

最近写了一个进程,需要通过20个线程循环600个用户获取每一个用户的xx信息,是通过socket连接oracle mdb服务器获取的,但是在本机windows上测试发现大量的TIME_WAIT状态,按照网上的说法,调了注册表的参数,但是无济于事,Socket.setReuseAddress方法也是没有效果,最后放弃了,在测试环境的unix上也是一样,但是没有去调节测试环境的参数,最后直接上了生产,生产上的参数应该是设置过的,最后复习了下这个经典的TIME_WAIT状态状态

tcp建立连接需要3个握手,但是关闭连接需要4个握手,关闭连接后主动关闭的一方会处于time_wait状态一段时间,这个是可以设置的,好像windows最少是30s,这个time_wait状态的目的大概有两个

1。防止上一次连接中的包,迷路后重新出现,影响新连接

(经过2MSL,上一次连接中所有的重复包都会消失)
2。可靠的关闭TCP连接
在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发
fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以
主动方要处于 TIME_WAIT 状态,而不能是 CLOSED

这是tcp关闭连接的client/server直接的数据交互过程


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史