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

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 加速的软路由,应该也是一样的。

8685 次点击
所在节点    宽带症候群
28 条回复
elboble
2023-04-06 16:44:48 +08:00
@ttvast speedtest 现在国内没几个点了,是不太准,我是拿运营商自己的测试平台来测的,speedtest 做参考。

但是这样下去,用软路由的性能要求太高。我用软路由其实一个就是透明 passwall ,再就是 vpn 接入,如果光猫拨号能通过其他方式达到这个目的,将来我也不一定用软路由了。
ttvast
2023-04-06 16:52:00 +08:00
@elboble 运营商自己平台才不准呢,有 cli 接口吗?
speedtest 一个上海电信 3633 ,一个上海联通就足够了。我用了那么长时间 linux 软路由,结果是不是被测试手段所影响还是分的清的。
Smallsun1231
2023-04-06 22:45:47 +08:00
支持 等一手实验结果
实测同一套设备(软路由+自购光猫)在上海跨区域跑速完全不一样
之前的地方可以跑满 1200Mbps ( 2.5G 猫+软路由)
新地方无论如何都跑不满千兆(更换 LOID,换光猫,换软路由)
qbqbqbqb
2023-04-07 17:09:52 +08:00
以前有的 SDN 网关桥接模式有一个 bug ,在路由器 PPPoE 拨号的那个以太网接口上先分配一个内网 IP 地址再 PPPoE 拨号可以绕过,直接拨号就是会掉速(多见于以前的千兆宽带,掉速后直接腰斩 500M )。不知道现在的 SDN 还有没有这个问题。
droidmax61
2023-04-12 10:33:51 +08:00
@cst4you 赞同,逻辑上讲,桥接之后速度应该就不会有瓶颈,后级的主路由开启硬件 NAT 功能之后,就应该可以跑满设备支持的最大速率,而如果出现桥接后速度反而下降的,那只能说明拨号的设备的 MAC 与光猫的不一致导致被局端限速
bukusishen777
2023-04-30 16:53:36 +08:00
有没有可能是 F7606P 的问题。最近发现这个光猫的桥接似乎有点问题,改写 vlan 后,cpu 占用很高,主要集中在第四核心,软中断能跑满了,卡的要死。现在是桥接后做透传,由爱快做 vlan 剥离。
ttvast
2023-05-05 15:28:43 +08:00
@bukusishen777 你可以再看看我的文章:
“我这个实验完全可以排除光猫问题,因为软路由上测速是满速的。”
bukusishen777
2023-05-11 18:25:49 +08:00
@ttvast 连接数要高一些才能测试到,只测速的话是测试不出来的。 我挂着 pcdn ,性能下降就比较严重了,即使测试时 pcdn 的速度并没有很高。

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

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

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

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

© 2021 V2EX