V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ttvast
V2EX  ›  宽带症候群

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

  •  
  •   ttvast · 2023-04-05 16:58:06 +08:00 · 6745 次点击
    这是一个创建于 420 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言(可以跳过不看)

    从使用软路由第一天起,就是自己装 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 加速的软路由,应该也是一样的。

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

    天天工信部投诉可以解,就天天投诉,会不停给你打回本地,你就不停投诉几次就解决了。
    PotoJ
        8
    PotoJ  
       2023-04-05 20:55:40 +08:00 via Android
    @ttvast 不用浪费时间捣鼓了。你是桥接还是路由模式运营商清楚的很,他们设备比你想的更高级。我年前装的陆续观察了一个月,最后我直接告诉当初装机的师傅,确定是你们设备配置有问题,和我设备性能无关,数据直接测试给他们,内网 1200M 随时拉满,运营商线路跑 speediest 间歇性可以跑满签约 600M ,运营商手持 pad 可以作弊,技术上没有任何难度。师傅也很有说到联网设备数量有限制,超过影响网速,ip camera 和电脑算,手机不算。工信部不一定给你解决,大不了给你退费。好好和师傅沟通。
    yyzh
        9
    yyzh  
       2023-04-05 21:08:11 +08:00 via Android   ❤️ 1
    openwrt 的内核打了补丁的,另外玩虚拟化时网卡能用直通的尽量用直通,不能的也要上 SR-IOV 不然那个软中断能搞死 CPU
    wxlwsy
        10
    wxlwsy  
       2023-04-05 21:22:33 +08:00
    我亲身测试,千兆口路由桥接只能跑 500, 然后换了个 2.5G 能跑到 950.
    cst4you
        11
    cst4you  
       2023-04-06 02:30:53 +08:00
    上海电信, 2000M, 精品网用户, 有公网 IP, 使用 10G EPON 猫棒
    我这边的情况是, 猫棒必须模拟局端的注册的光猫 MAC, 否则速度就上不来
    改回去速度就只有 500M 左右了
    MeteorVIP
        12
    MeteorVIP  
       2023-04-06 06:48:01 +08:00 via iPhone
    我也遇到类似的情况,回去改个 mac 试试,看看能不能提速。
    linhu66
        13
    linhu66  
       2023-04-06 08:18:40 +08:00
    @cst4you 上海电信, 2000M, 精品网用户, 有公网 IP, 使用 10G EPON 光猫 桥接速度可以 2500
    datocp
        14
    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
        15
    cst4you  
       2023-04-06 11:56:44 +08:00
    @linhu66 能跑的, 不过我是 x86
    ttvast
        16
    ttvast  
    OP
       2023-04-06 11:57:57 +08:00
    @datocp 的确是硬件性能不够。不过加速的确是很重要的。
    我还做了一个试验,就是在当前正常跑 2000+mbps 的系统上,完全关闭了 gro ,speedtest 测速马上下降到 1000m 上下。
    elboble
        17
    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
        18
    chsuhaha  
       2023-04-06 14:41:51 +08:00 via Android
    有没有想过是测试方法的问题?
    我的千兆网该桥接模式后,用 speedtest 网页版一直不稳定,每次测速都在 500M-900M 跳。
    后来在 PC 下载客户端,稳定 945M 。
    ttvast
        19
    ttvast  
    OP
       2023-04-06 16:12:44 +08:00
    @elboble 我用的是 5105 的 4 口 2.5g 跑 kvm 虚拟机,最多也就跑到 1700m ,没有再高过。不用虚拟机可以跑到 2000m 。但是还是达不到路由模式下的 2200m 。 和你的测试结果基本上差不多。
    我打算用 i7-9850 的幽灵峡谷装上 2.5g 和万兆网卡做软路由了。
    ttvast
        20
    ttvast  
    OP
       2023-04-06 16:13:32 +08:00
    @chsuhaha 测速方法是 linux 命令行的 superspeed ,调用的是 speedtest-cli
    elboble
        21
    elboble  
       2023-04-06 16:44:48 +08:00
    @ttvast speedtest 现在国内没几个点了,是不太准,我是拿运营商自己的测试平台来测的,speedtest 做参考。

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