只有活跃的人才有地位,它有两个作用:
1. 防止从具有相同五元组的历史连接接收旧数据包
前面说过,序列号和初始化序列号不会无限增加。 初始化序号可能会环回,也就是说无法根据序号来判断数据的新旧。 因此,TCP设计了一个持续2MSL的状态。 这个时间足够双方往返的数据包被丢弃,这样历史连接的数据包就会自然地在网络中消失,而重新出现的数据包必然是由新建立的连接产生的。 。
图1
2.确保“被动关闭方”的连接能够正确关闭
假设“主动方”时间很短或没有时间,在发送最后一个ACK消息后很快或直接进入该状态。 如果ACK报文丢失,“被动方”就会超时并重传FIN报文,而此时“主动方”已经进入关闭状态,收到FIN报文后会回复RST报文。 “被动方”收到RST报文后,将其解释为错误(被对端重置),然后异常关闭连接并进入该状态,详细步骤如下:
图2
为了防止这种情况发生,“主动方”必须等待足够长的时间,以保证“被动方”能够收到ACK,即保证“主动方”不会再次收到FIN(“被动方”) party”无法收到ACK将会超时并重传FIN)。 等待的2MSL必须大于或等于ACK(ACK)和FIN(FIN)返回的时间。 只要处于该状态并且收到FIN,2MSL定时器就会被重置,这也是为什么不设置大于2MSL的原因。
图3
Linux系统停留在60秒的固定时间。 它在Linux内核代码中定义的名称是:
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT state, about 60 seconds */
如果想修改时间长度,只能修改该值并重新编译Linux内核。
2、伤害过大
占用端口资源:客户端(主动关闭连接)状态过多。 客户端始终与具有相同“目标IP:PORT”的服务器建立连接。 当客户端状态有太多连接时,无效和占用的端口太多。 ,端口资源有限,一般可以开放的端口为15000~60000,范围可以通过net.ipv4指定。 范围。 如果所有端口都被占用,则将无法再与具有相同“目标IP:PORT”的服务器建立连接。 但是,可以通过“目的IP:PORT”与另一台服务器建立连接,因为连接是由五元组(源IP、源端口、目的IP、目的端口和协议)唯一标识的。
例如:对同一个“目的IP:PORT”的TCP服务性能进行压力测试时,每台机器最多可以模拟6万个连接。
占用系统资源:服务器端状态过多(主动关闭连接)不会导致端口资源有限,因为服务器只监听一个端口,而五元组唯一标识一个TCP连接,所以理论上服务器是可以的建立远大于端口数的连接是可能的,但是过多的TCP连接会占用系统资源,如文件描述符、内存资源、CPU资源等。
3、优化
有以下3种优化方法,没有什么灵丹妙药,各有优缺点:
1. 打开net.ipv4。 和net.ipv4。 选项
启用net.ipv4后。 和net.ipv4。 (默认开启,支持时间戳)选项,当客户端(主动关闭一方)调用()函数时,如果相同五元组的连接持续处于状态超过1s,内核将重用该连接。
开启net.ipv4.后,TCP头的“”中将会添加两个4字节的时间戳。 一个保存数据包发送的时间,另一个保存从对方接收到的最新数据的到达时间。 由于时间戳的引入,解决了上面提到的2MSL问题。 重复或阻塞的数据包会因为时间戳过期而被自然丢弃。
# cat /proc/sys/net/ipv4/tcp_timestamps
1
2.修改net.ipv4。 内核参数
当系统中的连接数超过该值时,不会再生成新的连接,直接关闭。 一旦所有端口都被占用,服务就会出现异常,这样可以保护您的系统并为修复赢得时间。 缺点是会出现图10所示的现象。
# cat /proc/sys/net/ipv4/tcp_max_tw_buckets
32768
3.在程序中使用
您可以通过设置选项来调整 close 的行为来关闭连接。
struct linger so_linger;
so_linger.l_onoff = 1;
so_linger.l_linger = 0;
setsockopt(fd, SOL_SOCKET, SO_LINGER, &so_linger,sizeof(so_linger));
如果非0且值为0,那么调用close后,会立即发送RST消息给对方,跳过四次挥手直接关闭,自然跳过该状态。
它是我们的朋友,对我们有帮助,而不是试图避免这种状态,我们应该弄清楚它。 如果服务端想要避免过多的状态连接,就绝对不应该主动断开连接,让客户端断开连接lol服务器关闭连接,让分布在各地的客户端来承受。 ---《UNIX网络编程》
创作不易,您的点赞、转发、收藏是我创作最大的动力!
标题:Linux主动方的作用及解决办法-
链接:https://www.52funs.com/news/xydt/4942.html
版权:文章转载自网络,如有侵权,请联系删除!