一个有关光猫改桥接后网速变慢的实验以及分析。

2023-04-05 16:58:06 +08:00
 ttvast

前言(可以跳过不看)

从使用软路由第一天起,就是自己装 linux 做路由器,所以一直不会用 openwrt 。随着宽带速度越来越高,对于硬件的要求也越来越大,同时软件优化的压力也变得更高起来。

自从安装电信宽带,我一直用的是 Linux pppoe 拨号的模式,记得刚升级 500m 宽带的时候,碰到过怎么也跑不满带宽的现象,后来发现是自己的 pppoe 拨号没有调用 rp-pppoe 的 kernel 加速模块,造成 cpu 利用率过高无法满速。

后来安装了千兆宽带,上的是 SDN ,刚装好想办法让师傅开成了桥接模式,但是某一天突然就变成了路由模式,后来一想,SDN 如果普及下来,以后可能很难变桥接了,于是调整了路由器的结构,适配了路由模式。 去年把宽带升级到了 2000m ,发现电信提供的华为光猫没有 2.5G LAN 口,就淘了一个中兴的 4607 回来,当时也没有改桥接,继续使用路由模式。


正文

昨天,觉得自己家里的网关出去的数据包,经过光猫后,无法抓包到 NAT 后包的 port ,对于自己做一些网络通讯的程序调试不便,所以想试一下改成桥接模式,用 linux 拨号。

改起来很简单,改完之后貌似一切正常。但是用各种工具测速,发现原来随便都能测到 2000mbps 的,现在有时候只能测到 1000m 不到,有时候才 300m 。然而,奇怪的是,当我在软路由上跑 superspeed ( speedtest 脚本)的时候,却又能正常跑到 2000m 。

这时候,我发现 ppp0 的 mtu 是 1442 ,不是一般理解的 1492 , 于是上网查了,发现是精品网的特点。抓包一下,发现有很多 ip-proto-6 的奇怪包,后来一想,是 mss 问题,我改成 ppp 拨号的时候,忘记 iptables 加 clampmss 了,于是加上后,发现基本每次测速都能达到 1000m 出头了。于是问题还是没有解决。

我首先怀疑的是我的软路由硬件性能问题。 因为为了硬件升级方便,我把软路由做成了 kvm 镜像,随便一个硬件装个 linux 启动 kvm 就可以运行软路由。而最近用的硬件是 n5105cpu ,属于能力比较弱的。

我试了一下,去除所有防火墙策略和 ip rule ,并不能明显提高网速。 然后在主机上直接跑 pppoe 和 nat ,不通过 kvm 虚拟化,明显性能提高了很多,但是还是不怎么稳定。

最后,我又恢复到了路由模式下,轻松测速 2200mbps 。 我想,只能升级硬件了。 但是为什么桥接模式下速度要比路由模式慢呢,这个问题还是没有解决。 以前有人说是光猫的问题, 我这个实验完全可以排除光猫问题,因为软路由上测速是满速的。

我还是不死心,路由模式下,在软路由链接光猫的接口下,跑了 tcpdump ,这次发现,每次抓到的 tcp 数据包大小居然不再是 1390 ( mtu1442 下),而是几千几万了。 原来这时候,网卡 offload 开始工作了,网卡可以把 tcp 分段的数据包整合起来丢给内核,于是内核处理数据包的量级一下子减低了很多,这就是路由模式和桥接模式最大的区别。


总结

光猫采用路由模式时,tcp 数据包通过网卡到达软路由时,网卡将 tcp 分段数据包整合成一个,使得 linux 内核处理数据包的压力低了很多。

而光猫采用桥接模式时,tcp 数据包通过 ppp0 接口到达 linux 内核,一个数据包的大小只有 1400 不到,与路由模式下动则上万的数据包大小相差了近十倍,因此内核路由和防火墙模块的压力都要比路由模式下大了近十倍。

这种现象对于 openwrt 这种基于 linux 没有硬件 ppp 加速的软路由,应该也是一样的。

8744 次点击
所在节点    宽带症候群
28 条回复
PotoJ
2023-04-05 17:59:42 +08:00
想复杂了,不知道上联 olt 可以根据你接入模式或设备给你分配不同 qos 模板吗?只要你内网链路速度能满足运营商签约带宽,就大概率是运营商的鬼。改 sn 和 Mac 再测试
huangya
2023-04-05 18:01:12 +08:00
应该是 pppoe 情况下,GRO 无法工作。最近工作上也遇到了这个问题。
thereone
2023-04-05 18:55:16 +08:00
没有啊,我这边 1000M 桥接之后用路由器拨号一样可以满速,没有任何的限制。不过用电脑直接拨号会只有一半的速度多点。同时我用电脑开虚拟机爱快拨号也可以满速。运营商真的可以根据你拨号的设备限制速度的。
zhuoyu
2023-04-05 18:59:20 +08:00
olt 给桥接限速,光猫拨号不限速图个啥呢,这个月投诉少了找个事情让客户来投诉
PotoJ
2023-04-05 19:06:02 +08:00
路由模式可以更充分限制用户。他们是怕投诉的主吗?认设备的还好解决,认桥接和路由模式的必须运营商给修改才行。
ttvast
2023-04-05 20:23:52 +08:00
@PotoJ 我的测试中,软路由上测速没有降低,所以不是运营商的问题。
其次,你说的运营商限速,运营商凭什么知道我是路由模式还是桥接模式? 我用的光猫都不是运营商提供的。
9544
2023-04-05 20:32:47 +08:00
就是运营商限制。不用想那么多。我们这千兆桥接都不限制。

天天工信部投诉可以解,就天天投诉,会不停给你打回本地,你就不停投诉几次就解决了。
PotoJ
2023-04-05 20:55:40 +08:00
@ttvast 不用浪费时间捣鼓了。你是桥接还是路由模式运营商清楚的很,他们设备比你想的更高级。我年前装的陆续观察了一个月,最后我直接告诉当初装机的师傅,确定是你们设备配置有问题,和我设备性能无关,数据直接测试给他们,内网 1200M 随时拉满,运营商线路跑 speediest 间歇性可以跑满签约 600M ,运营商手持 pad 可以作弊,技术上没有任何难度。师傅也很有说到联网设备数量有限制,超过影响网速,ip camera 和电脑算,手机不算。工信部不一定给你解决,大不了给你退费。好好和师傅沟通。
yyzh
2023-04-05 21:08:11 +08:00
openwrt 的内核打了补丁的,另外玩虚拟化时网卡能用直通的尽量用直通,不能的也要上 SR-IOV 不然那个软中断能搞死 CPU
wxlwsy
2023-04-05 21:22:33 +08:00
我亲身测试,千兆口路由桥接只能跑 500, 然后换了个 2.5G 能跑到 950.
cst4you
2023-04-06 02:30:53 +08:00
上海电信, 2000M, 精品网用户, 有公网 IP, 使用 10G EPON 猫棒
我这边的情况是, 猫棒必须模拟局端的注册的光猫 MAC, 否则速度就上不来
改回去速度就只有 500M 左右了
MeteorVIP
2023-04-06 06:48:01 +08:00
我也遇到类似的情况,回去改个 mac 试试,看看能不能提速。
linhu66
2023-04-06 08:18:40 +08:00
@cst4you 上海电信, 2000M, 精品网用户, 有公网 IP, 使用 10G EPON 光猫 桥接速度可以 2500
datocp
2023-04-06 10:24:47 +08:00
一般我把这种问题简单的理解为 CPU 性能不行,当然更专业的是认为硬件加速不过关。
在 openwrt 下的网络是分接口的比如针对固定 ip 的 br-wan ,pppoe 的 pppoe-wan 虚拟接口。性能差别可以用上天入地来区别。

之前用 openwrt 19.07.1 在联想 y1s 的测试结果
br-wan 2 lan 654mbps
br-wan 2 lan 704mbps #开启 Software flow offloading

如果没记错的话 pppoe-wan 应该是跑不过 90mbps 的。

似乎最近的 21.02.5 性能好上很多,只是也只有 100mbps ,像是 yk1 也能跑满。

这也是为什么有些结论认为 x86 不一定比一些硬件路由强,当然优化方向很多,比如 wifi down 对于 mtk7620 就能提高 40mbps 的呑吐量。接口是真实存在的还是是 tun 这种需要消耗 cpu 的。iptables 策略是几千条遍历还是是使用 ipset 。连带的一些 qos 用一些虚拟接口轻则影响网络重则直接路由死机。
cst4you
2023-04-06 11:56:44 +08:00
@linhu66 能跑的, 不过我是 x86
ttvast
2023-04-06 11:57:57 +08:00
@datocp 的确是硬件性能不够。不过加速的确是很重要的。
我还做了一个试验,就是在当前正常跑 2000+mbps 的系统上,完全关闭了 gro ,speedtest 测速马上下降到 1000m 上下。
elboble
2023-04-06 12:44:14 +08:00
10GEPON 或者 XGPON 的光猫对应下行网口,至少要能做到路由模式一个口跑满,如果下行只有 GE 口,那只用跑满 1000 兆,但是如果是 2.5GE ,那路由性能要达到 2500 。如果是 10G Lan 下行,只要求下行达到 8G 以上。这是运营商给的入网标准。

所以,带宽 1000M 以下含 1000 兆给的猫,下行只有 GE 口,运营商给的猫的性能只能跑 1000 兆,即使 Pon 口是 10G ,XG 也是这样。但是如果开 fttr ,开到 2000M ,必须上 7670 ,4670 了,那个 ONU 性能就强多了,路由模式也能跑满 2000M 。

如果改桥接,用软路由拨号,我用过 R6300 刷梅林,200M 可以跑满; R2S 刷 openwrt ,带宽升到 1000M 只能跑到 800 ,900 ,当时也是反复怀疑到底是 OLT 限速了还是软路由性能不够。正好 7670 可以刷 10GEPON ,路由测到 1200M ,上个月换了 R68S ,有 2.5G 口,桥接下来也可以到 1200M 。简单说就是软路由性能不够。

运营商一般都会多给 20%的余量,而不是扣减,这个基本是没有成本的,但是如果客户因为这个投诉,就划不来了。

最后 R68S 拨号也只能跑到 1600 ,1700 ,如果上 2000M 又要换了。
chsuhaha
2023-04-06 14:41:51 +08:00
有没有想过是测试方法的问题?
我的千兆网该桥接模式后,用 speedtest 网页版一直不稳定,每次测速都在 500M-900M 跳。
后来在 PC 下载客户端,稳定 945M 。
ttvast
2023-04-06 16:12:44 +08:00
@elboble 我用的是 5105 的 4 口 2.5g 跑 kvm 虚拟机,最多也就跑到 1700m ,没有再高过。不用虚拟机可以跑到 2000m 。但是还是达不到路由模式下的 2200m 。 和你的测试结果基本上差不多。
我打算用 i7-9850 的幽灵峡谷装上 2.5g 和万兆网卡做软路由了。
ttvast
2023-04-06 16:13:32 +08:00
@chsuhaha 测速方法是 linux 命令行的 superspeed ,调用的是 speedtest-cli

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930016

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX