大家好,欢迎来到IT知识分享网。
环境中如果存在大量的TIME-WAIT状态的链接,可以通过TCP参数进行系统优化处理。
TIME-WAIT出现的意义
socket客户端与服务端建立TCP/IP连接关闭socket后,服务端连接端口状态为TIME-WAIT的情况。
是不是所有执行主动关闭的socket都会进入TIME_WAIT状态呢? 有没有什么情况使主动关闭的socket直接进入CLOSED状态呢?
也就是TCP/IP设计者本来是这么设计的。主要有两个原因: 1、防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失) 2、可靠的关闭TCP连接 在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发 fin, 如果这时主动方处于CLOSED状态 ,就会响应rst而不是ack。所以 主动方要处于TIME_WAIT状态,而不能是CLOSED 。 TIME_WAIT并不会占用很大资源的,除非受到攻击。还有,如果一方 send 或 recv 超时,就会直接进入CLOSED状态。
TCP参数优化
以下参数适用于很多TIME-WAIT类型socket连接场景下
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=10
# 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间,单位为秒。
net.ipv4.tcp_keepalive_time = 30
# 表示当keepalive起用的时候,TCP发送keepalive消息的频度,缺省是2小时,单位为秒。
参数生效
/sbin/sysctl -p
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/40481.html