tcp性能优化方法

一、TCP fast open

原理简介:

三次握手带来的延迟使得每创建一个新TCP连接都要付出很大代价。而这也决定了提高TCP应用性能的关键,在于想办法重用连接。

TFO(TCP fast open)允许服务器和客户端在连接建立握手阶段交换数据,从而使应用节省了一个RTT的时延。

但是TFO会引起一些问题,因此协议要求TCP实现必须默认禁止TFO。需要在某个服务端口上启用TFO功能的时候需要应用程序显示启用。

开启方法:

//查看TFO开关状态
sysctl net.ipv4.tcp_fastopen
//开启TFO
sysctl -n net.ipv4.tcp_fastopen = 0x203

效果:

经过流量分析和网络模拟,谷歌研究人员发现TFO平均可以降低HTTP事务网络延迟15%、整个页面加载时间10%以上。在某些延迟很长的情况下,降低幅度甚至可达40%。

二、长链接(Keep-Alive)

原理简介:

Keep-Alive,HTTP 1.1 之后默认开启,指在一个 TCP 连接中可以持续发送多份数据而不会断开连接。

使用方法:

net.ipv4.tcpkeepalivetime:表示TCP链接在多少秒之后没有数据报文传输启动探测报文
net.ipv4.tcpkeepaliveintvl:前一个探测报文和后一个探测报文之间的时间间隔
net.ipv4.tcpkeepaliveprobes:探测的次数 

三、扩大拥塞控制的窗口大小

原理简介:

流量控制是一种预防发送端过多向接收端发送数据的机制。否则,接收端可能因为忙碌、负载重或缓冲区容量有限而无法处理。为实现流量控制,TCP连接的每一方都要通告自己的接收窗口(rwnd),其中包含能够保存数据的缓冲区空间大小信息。客户端与服务器之间最大可以传输数据量取rwnd和cwnd变量中的最小值。

扩大方法:

//查看状态
sysctl net.ipv4.tcp_window_scaling
//开启
sysctl -w net.ipv4.tcp_window_scaling=1

效果:

开启窗口缩放,能使接收窗口大小从2^16升级到2^30,可以获得更好的传输性能。比起不开启窗口缩放,能够充分利用带宽。

四、将慢启动的拥塞窗口初始值变大

原理简介:

客户端与服务器之间最大可以传输(未经ACK确认的)数据量取rwnd和cwnd变量中的最小值,而一开始的cwnd很小,通过慢启动算法不断增大。

方法:

在内核中增加一个控制initcwnd的proc参数,/proc/sys/net/ipv4/tcp_initcwnd。该方法对所有的TCP连接有效。初始拥塞窗口不能设置特别大,否则会导致交换节点的缓冲区被填满,多出来的分组必须删掉,相应的主机会在网络中制造越来越多的数据报副本,使得整个网络陷入瘫痪。行业内各大cdn厂商都调整过init_cwnd值,普遍取值在10-20之间。

五、禁用慢启动重启

原理简介:

SSR(Slow-Start Restart,慢启动重启)会在连接空闲一定时间后重置连接的拥塞窗口。

方法:

//查看状态
sysctl net.ipv4.tcp_slow_start_after_idle
//关闭
sysctl -w net.ipv4.tcp_slow_start_after_idle=0

  

 

参考:TCP性能优化 - 知乎 (zhihu.com)

posted @ 2023-04-14 18:44  ☞@_@  阅读(185)  评论(0编辑  收藏  举报