且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

调优 tcp http

更新时间:2022-08-13 10:51:48

tcp

1.tcp_keepalive_time

int keepAlive = 1;   // 开启keepalive属性. 缺省值: 0(关闭)  

int keepIdle = 60;   // 如果在60秒内没有任何数据交互,则进行探测. 缺省值:7200(s)  

int keepInterval = 5;   // 探测时发探测包的时间间隔为5秒. 缺省值:75(s)  

int keepCount = 2;   // 探测重试的次数. 全部超时则认定连接失效..缺省值:9(次)  

setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));  

setsockopt(s, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));  

setsockopt(s, SOL_TCP, TCP_KEEPINTVL, (void*)&keepInterval, sizeof(keepInterval));  

setsockopt(s, SOL_TCP, TCP_KEEPCNT, (void*)&keepCount, sizeof(keepCount)); 


mongodb echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time 默认是7200


1.tcp_keepalive_time and rst Flag in NAT Environment



2.再次理解tcp关闭连接出现time_wait的情况


2MSL一般是大于30s,小于4分钟. 最小也要30s,再大就没啥意义了


reset报文发送场景:

RST的标志位,这个标识为在如下几种情况下会被设置,以下是我了解的情况,可能还有更多的场景,没有验证


当尝试和未开放的服务器端口建立tcp连接时,服务器tcp将会直接向客户端发送reset报文

双方之前已经正常建立了通信通道,也可能进行过了交互,当某一方在交互的过程中发生了异常,如崩溃等,异常的一方会向对端发送reset报文,通知对方将连接关闭

当收到TCP报文,但是发现该报文不是已建立的TCP连接列表可处理的,则其直接向对端发送reset报文

ack报文丢失,并且超出一定的重传次数或时间后,会主动向对端发送reset报文释放该TCP连接


另外我们做大量api请求时会遇到下面的问题. Broken pipe和Connection reset by peer  .   这其实也是reset的报错一种.




本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1854649,如需转载请自行联系原作者