tcp 短连接 优化

来源:互联网 发布:淘宝swisse官方旗舰店 编辑:程序博客网 时间:2024/05/16 15:14

背景

在做dispatchsvr发送http请求到业务server的时候,client端设置了1s的timeout,结果当网络出现问题的时候,client出现了大量timeout,并且关闭连接,这时候发现client的cpu和内存有大量增长。


原理

TCP结束的过程如下:
Server                             Client
-------------- FIN -------------->  server: fin_wait_1
<------------- ACK --------------- client: close_wait  server:fin_wait_2
<------------- FIN  --------------- client
发出fin之后就关闭

-------------- ACK ------------->  server
发出ack后进入time_wait状态


Time_Wait
的默认时间是2倍的MLS,就是240秒钟。MLSTCP片在网上的最长存活时间。
TIME_Wait
的主要作用是保证关闭的TCP端口不立即被使用。因为当网络存在延迟时,可能当某个端口被关闭后,网络中还有一些重传的TCP片在发向这个端口,如果这个端口立即建立新的TCP连接,则可能会有影响。所以使用2倍的MSL时间来限制这个端口立即被使用。


解决方法

修改7层负载所在机器,/etc/sysctl.conf

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_fin_timeout = 30

保存后sysctl -p生效


0 0