码迷,mamicode.com
首页 > 编程语言 > 详细

Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

时间:2019-08-02 12:53:28      阅读:453      评论:0      收藏:0      [点我收藏+]

标签:ons   soc   默认   time   sockets   socket   并发socket   系统设置   攻击   

近期遇到一个项目 需要在Linux上建立一个Socket 进行 HTTP_GET , 需要线程高并发的 使用TCP Socket 进行Send 发送HTTP_GET请求到 指定网站 . 而且不需要read数据返回 一旦Send完毕就直接close了,  但这样做却在本地产生了很多 TIME_WAIT 状态 导致端口堵塞无法高并发连接了 . 

在网上找了很多资料, 都说到了这点  高并发短连接的close 需要双发达成 才能进入CLOSE状态, 如果只有一段 Close(sock) 只会带来另一端的 数据接收环节等待. 迟迟不会结束TIME_WAIT, 而他需要4分钟后 才会注销这个状态.  4分钟呐. 要人命啊 

结果我找到的方法 却不是改写Socket程序 而是在系统设置上下载, 却解决了.

Console

sysctl -w net.ipv4.tcp_syncookie=1
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

 

完成后 使用netstat -an 神奇的发现... 这些链接都不见了  

继续运行我的高并发Socket  持续查看netstat 效果明显呐~!~!~!

Linux C++ Socket 高并发短连接 TIME_WAIT 挥之不去解决方法

标签:ons   soc   默认   time   sockets   socket   并发socket   系统设置   攻击   

原文地址:https://www.cnblogs.com/cnsanshao/p/11287659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!