微禾游戏 手游攻略 新游动态 Linux主动方的作用及解决办法-

Linux主动方的作用及解决办法-

时间:2024-03-03 13:04:07 来源:网络整理 浏览:0

只有活跃的人才有地位,它有两个作用:

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
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭

阴阳师4月22日更新内容:帝释天上线技能调整,红莲华冕活动来袭[多图],阴阳师4月22日更新的内容有哪些?版本更新

2024-03-03
四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址

四川电视台经济频道如何培养孩子的学习习惯与方法直播在哪看?直播视频回放地址[多图],2021四川电视台经济频

2024-03-03
湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口

湖北电视台生活频道如何培养孩子的学习兴趣直播回放在哪看?直播视频回放地址入口[多图],湖北电视台生活频道

2024-03-03
小森生活金币不够用怎么办?金币没了不够用解决方法

小森生活金币不够用怎么办?金币没了不够用解决方法[多图],小森生活金币突然就不够用的情况很多人都有,金币没

2024-03-03