type
status
date
slug
summary
tags
category
icon
password
最近把家里的网络重新梳理了一下,但是经常发现网络抖动非常大,偶尔抖动会增加到200ms左右或者以上,同时在fast上进行测速,每次的结果也相差巨大。因为家里有Hyper-v的虚拟机在挂着网心云赚网费,所以开始怀疑是上传把带宽跑满了,所以导致的网络抖动。之前我也是通过Hyper-v的管理面板进行虚拟机的限速,但没有注意过连接数这个问题。在我之前的理解里,理论上限制了上传速度,就不应该会对网络本身产生任何的影响。在查阅了很多资料之后,发现主路由的活动连接数突破了12000(immortalwrt在我acrh17这个型号上,默认给的最大连接数量才30000出头),而且考虑到运营商也会对连接数量做出限制,所以才注意到这个问题。
📝 付费内容
连接数量对网速的影响
活动连接数量过多会影响网速的原因主要包括以下几个方面:
- 带宽消耗:每个连接都占用了网络带宽,活动连接数量增加时,带宽会被多个连接分摊,导致每个连接可用的带宽减少,最终导致整体网速下降。
- 路由器/网络设备的处理能力:路由器和其他网络设备在处理大量连接时会增加工作负荷。如果设备的处理能力有限,过多的连接会导致设备反应变慢,增加数据包的处理延迟,进而影响网速。
- 网络拥塞:过多的连接可能会导致网络拥塞,尤其是在家庭局域网中。网络拥塞会导致数据包丢失、重传等问题,进一步降低实际的传输速度。
- NAT表的限制:对于使用NAT(网络地址转换)的网络,每个连接需要在NAT表中建立一条记录。NAT表的容量有限,当连接数过多时,NAT表可能会溢出或处理速度变慢,导致网络性能下降。
- CPU和内存负载:如果你的设备(如计算机或服务器)处理大量的并发连接,CPU和内存负载会增加,可能导致设备性能下降,进而影响网速。例如我的acrh17,在12000活动连接数时,内存占用超过70%,此时局域网内其他设备明显可感觉到延迟。
- 运营商活动连接数量限制:大部分运营商会对每户入网的宽带进行活动连接数量限制,各地区、各运营商甚至各片区均不相同,当达到一定量的活动连接数量时,更多的连接会进行丢包处理,所以会直接影响到使用者的体验。目前检索到的消息可以查看这里:
宽带连接数限制测试结果(来源): 上海电信:公网不限制,私网 8000,云宽带 2800 上海移动:私网 2500 上海联通:公网 6000,私网 1500 江苏移动:公网不限制,私网 2500 浙江移动:公网 6000,私网 2000 江苏联通:公网 6000,私网 3000 江苏电信:公网不限制,私网 6000
本地网络环境介绍
简单介绍一下我本地的网络环境:
其中:
- 光猫:桥接模式(中兴老款F450,已尝试改了硬桥接,未做光猫本身最大连接数修改)
- 主路由:ASUS-ACRH17,系统为OpenWRT,开启Fullcone NAT。
- 旁路由:X86虚拟机(Hyper-V虚拟化),系统为OpenWRT(本篇中并不重要)。
- 网心云:X86版本(Hyper-V虚拟化)静态地址,网关直接指向主路由,避免流量经过旁路。
命令行限制方法
主路由目前使用的OpenWRT版本为23.05,已经使用nftable取代了iptables,所以在网上找到的很多iptables无法使用或者会提示过老版本,配置后查看规则计数器数据为0,没有生效。同时nftable在OpenWRT上并没有提供luci app以及对应的ui操作界面,所以就需要我们自行编写nftable规则进行连接数的控制。
另一方面,由于主路由器开启了Fullcone NAT模式,所以使得所有来自外部的连接请求都可以通过主路由访问内网的网心云,且不再使用UPNP。这意味着,如果在
nftables
中通过ip fileter添加了针对网心云的INPUT和OUTPUT限制规则,那这些规则就不能正确匹配外部流量,所以通过INPUT和OUTPUT规则进行过滤没有任何的效果,这也是我在尝试之后,发现匹配规则数量为什么一直都是0的原因。同时,使用
conntrack
(conntrack需要安装,一般都没有预装)查看连接时,我发现连接信息已经包含NAT处理后的外部IP地址和端口,而nftables规则要考虑对NAT后的地址和端口进行限制,那么目标就来到了 forward
链上。而且我惊奇的发现,网心云这种PCDN居然使用的是TCP协议而不是UDP协议。首先确保OpenWRT已经安装了以下内核,如果缺少的话,在使用nftable时候会提示报错:“
Error: Could not process rule: No such file or directory
”。可以通过如下命令进行安装:
安装后,首先我们需要创建ip filter表用于进行过滤使用:
然后添加forward链,并配置优先级为0,优先进行匹配:
最后添加过滤规则(本文重点):
添加完成后,等待一段时间,通过以下命令进行活动连接数查看:
如果没有安装conntrack包,也可以通过OpenWRT管理网页进行查看,位置在:
配置文件限制方法(不确认在fw4表内是否成功)
编辑
/etc/nftables.d/10-custom-filter-chains.nft
文件,修改为以下内容:然后重启firewall
通过nft list进行查看规则是否已经添加成功
如果看到
则表示添加规则成功。
OpenWRT查看端口占用
- 查看单独端口占用情况及对应程序,8080为要进行查看的端口
- 查看客户端IP地址端口占用情况
最终,通过Grafana查看效果(需要单独配置):
🤗 总结归纳
整体所需的软件包为:
- kmod-nft-core(核心)
- kmod-nft-nat(nat相关规则配置参数支持)
- kmod-nft-ct(计数相关规则配置参数支持)
- conntrack(查看连接,可选)
以上软件包均可通过OPKG进行直接安装。
目前配置完成之后(我配置的来源和目的地活动连接数量均为4000),主路由显示的活动连接数量大概在5000左右浮动,至于为什么没有完全和规则匹配上,我的猜想可能是因为有一些长连接还没有释放的原因,后续会进行持续观察。
限制活动连接数量之后,对网心云的跑量影响需要等待几天才能看到,之后我也会更新到这里。目前来看,上传带宽方面没有任何的变化,依旧可以跑满限制带宽,理论上延迟应该也可以降下来,但同时丢包也会上涨,这部分会影响多少的收益暂时还不清楚,同时具体数值的设定,也需要持续的观察才能确认最优配置。
同时上述规则中没有配置IPV6的相关nftable规则,因为目前我的环境下,IPV6的量只占很少的一部分,如果之后量起来了,对本地的网络环境已经有了体感的影响,我也会进行研究配置。
这篇文章也不仅仅能应用于网心云,当你需要对局域网内的任何客户端,或者说是局域网内任何IP进行活动连接数量的限制时,都可以根据上面的内容进行操作,尤其是对于抖音、快手、爱奇艺这种活动连接请求大户。
网心云其他问题
目前发现网心云X86 2.0版本在使用Hyper-V虚拟机情况下,如果路由断网后恢复,在一段时间内即便正常获取IP或配置静态IP,也不会进行上传,需要手动配置网卡禁用再启用后才可以,这点需要注意。
📎 参考文章
- 以及恩山论坛各种高手的帖子
有关OpenWRT IPv6安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~