其他分享
首页 > 其他分享> > 很多time_await状态的端口出现

很多time_await状态的端口出现

作者:互联网

转自:简书链接,https://zhuanlan.zhihu.com/p/63841157,http://blog.itpub.net/15480802/viewspace-1334381/

1.TIME_AWAIT状态

TIME_WAIT的状态就是主动断开的一方发送完最后一次ACK之后进入的状态。并且持续时间还挺长的。

是主动断开的一方会出现的状态。

1.1 TIME_AWAIT过多危害

2.客户端很多处于TIME_AWAIT状态

https://blog.csdn.net/guchuanyun111/article/details/52047872

那么意味着是客户端选择关闭连接,

 

 

 如果并发比较大,有很多客户端发出短连接,那么就会导致很多处于TIME_AWAIT状态。

3.解决办法

3.1 SO_LINGER

struct linger {
     int l_onoff; /* 0 = off, nozero = on */
     int l_linger; /* linger time */
};

设置 l_onoff !=0 && l_linger = 0,则套接口关闭时TCP夭折连接,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组终止序列,这避免了TIME_WAIT状态;

3.2 tcp_tw_recycle

tcp_tw_recycle选项作用为:Enable fast recycling TIME-WAIT sockets. Default value is 0.

tcp_timestamps选项作用为:TCP timestamps are used to provide protection against wrapped sequence numbers. 缺省值为1。(TCP时间戳用于提供对包装序列号的保护。)

1)快速回收到底有多快?
局域网环境下,700ms就回收;

3.3 tcp_tw_reuse

tcp_tw_reuse - BOOLEAN
Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0.

1)tcp_tw_reuse选项和tcp_timestamps选项也必须同时打开;
2)重用TIME_WAIT的条件是收到最后一个包后超过1s。

3.4 tcp_max_tw_buckets

tcp_max_tw_buckets - INTEGER
Maximal number of timewait sockets held by system simultaneously. If this number is exceeded time-wait socket is immediately destroyed and warning is printed. 

系统同时持有的最大时间等待套接字数。如果超过这个数字,等待套接字立即被销毁并打印警告。

 

标签:tw,await,端口,tcp,TCP,time,TIME,连接,WAIT
来源: https://www.cnblogs.com/BlueBlueSea/p/15015054.html