为什么子网掩码会影响网速? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yitingbai
V2EX    问与答

为什么子网掩码会影响网速?

  •  
  •   yitingbai 2021-04-08 21:30:27 +08:00 5220 次点击
    这是一个创建于 1654 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近发现电脑网速很慢, 还以为路由器问题, 排查了好久, 无意中发现原来是子网掩码的导致的, 只怪大学没好好听课, 原来子网掩码会影响网速.......... , 这是啥原理呢?

    28 条回复    2021-04-10 12:04:42 +08:00
    gux928
        1
    gux928  
       2021-04-08 21:54:14 +08:00 via iPhone
    拓扑结构及设备清单也放出来看看
    yitingbai
        2
    yitingbai  
    OP
       2021-04-08 22:13:10 +08:00
    @gux928 就是家庭网络, 光猫 > 路由器 > 电脑, 啥拓扑结构, 不会弄啊
    v2020
        3
    v2020  
       2021-04-08 22:55:13 +08:00 via Android
    理论 /24 范围很小不至于,难道是因为手动指定和网关播发冲突,我在虚拟内网掉速这个问题看到你这个突然想到了,还有种网卡缺陷类似 i217 -*之类
    yitingbai
        4
    yitingbai  
    OP
       2021-04-08 23:10:54 +08:00
    @v2020 255.255.0.0 也不会影响网速, 只有 255.255.255.255 会影响, 简单百度了一下, 也没找到类似的解释, 而且只影响上传速度, 下载不影响, 网络延迟也正常
    weyou
        5
    weyou  
       2021-04-08 23:18:45 +08:00 via Android   19
    猜想你的 librespeed 服务一定是架在本地内网的。

    上图中全 255 的掩码,所有的数据包都会发送给网关,由网关的 cpu 进行中转,速度受限于网关的处理能力。

    下图中,因为测速服务器在子网中,本地可以直接通过 arp 获取到服务器 mac 地址,发出的数据包会直接由交换机芯片直接中转,效率比 cpu 处理高很多。
    Lemeng
        6
    Lemeng  
       2021-04-08 23:30:14 +08:00 div class="sep5">
    真没研究过,了解了
    sujin190
        7
    sujin190  
       2021-04-08 23:31:28 +08:00
    @weyou #5 正解了,这也是下行不受影响的原因,可以抓包看看链路层信息就更清楚了
    yitingbai
        8
    yitingbai  
    OP
       2021-04-09 00:12:58 +08:00
    @weyou 测速网站确实在内网, 受教了
    ysc3839
        9
    ysc3839  
       2021-04-09 00:16:37 +08:00 via Android
    @weyou 借楼问一下,/32 的子网掩码不是代表同一网段内没有其他设备吗?那怎么发给网关的?按理说网关也得在同一子网内吧?

    搜索了一下,这里 https://networkengineering.stackexchange.com/a/11036 也说:
    A more appropriate way to do things would be to set your device IP to 10.0.0.2, your gateway to 10.0.0.1, and your subnet mask to 255.255.255.252.
    LinePro
        10
    LinePro  
       2021-04-09 00:17:04 +08:00
    @weyou #5 有个问题,子网掩码是 255.255.255.255 的话,按计算机网络知识正常来讲主机并不知道如何能够与网关互联。但为什么这里可以?
    muzuiget
        11
    muzuiget  
       2021-04-09 01:34:02 +08:00
    子网掩码无非就是定义一个 IP 范围而已,九成就是网络程序自己的问题。
    XiaoxiaoPu
        12
    XiaoxiaoPu  
       2021-04-09 01:49:49 +08:00   1
    @LinePro
    @ysc3839

    子网和网关是独立的。对于主机来说,子网、网关分别对应路由表里两条路由。举个例子:

    default via 192.168.1.1 dev eth0
    192.168.1.0/24 dev eth0

    第一条是网关对应的路由,第二条是子网对应的路由。

    子网掩码是 255.255.255.255 ,其实就是没有第二条路由。但是设置了网关,第一条路由就有的。
    ch2
        13
    ch2  
       2021-04-09 0:19:48 +08:00 via iPhone
    32 位子网,只能靠网关中转发 ip 包,24 位子网就不需要网关代劳了,子网内部可以直接发包
    lcdtyph
        14
    lcdtyph  
       2021-04-09 02:24:20 +08:00   2
    @ysc3839 #9
    网关不必在同一子网,典型的例子是 ipv6 的 link-local 地址。
    在路由阶段网关的 ip 只是用来在 arp 过程中获取下一跳的 mac 地址,因此内核只需要知道应该从哪个 interface 广播 arp request 就可以了。
    AllenHua
        15
    AllenHua  
       2021-04-09 08:53:43 +08:00   3
    子网掩码的作用是划分 IP 地址中哪一部分是网络号(区分哪些 network ),哪一部分是主机号(区分哪些主机)的 (回想起谢希仁计算机网络……),用来区分 ip 地址在这个私网内属于哪个网段

    而且子网掩码的高位的 1 必须连续,低位的 0 也必须连续,常用的也就是 24 位掩码,255.255.255.0 ( 32bit binary,the high 24 bit is all 1 and the low 8 bit is all 0 )

    掩码必须和 IP 地址一起使用,掩码和 IP 地址的二进制数字进行「按位与」的运算,计算得出这个 IP 地址所属的 network 是哪个(可以区别其他 network ),host 是哪个(具体主机是哪个)

    图一的 32 位 掩码,也就是 255.255.255.255 ,任何 32 bit 二进制数和他进行与操作之后还是本身,也就是 32 位全是网络号,没有空间区分主机号。这表示网络只有一个 IPv4 地址,所有流量都将直接在具有该 IPv4 地址的设备和默认网关之间进行。 该设备将无法与网络上的其他设备进行通信。

    于是当掩码是 32 时,路由器那边的 cpu 负担过重。而如果是 24 位掩码,其中的很多运算就在其他网络上进行了计算。

    可以说一个网络就包含一个路由器。
    AllenHua
        16
    AllenHua  
       2021-04-09 09:16:02 +08:00
    @AllenHua #15 楼主的 mac 获取 ipv4 地址是手动配置的

    子网掩码配置成 32 位,路由器是 192.168.199.1

    这样你的 mac 发出去的数据包,请求的压力就全在这台路由器上(也就是网关)

    而 LibreSpeed 的服务器 ip 是 192.168.199.50 这样子的吧
    AllenHua
        17
    AllenHua  
       2021-04-09 09:18:35 +08:00
    @AllenHua #16 没仔细看图,你的 LibreSpeed 的服务器 ip 是 192.168.199.101

    顺便问问楼主这是 mac 什么客户端?
    shutan
        18
    shutan  
       2021-04-09 09:25:06 +08:00
    带宽好大啊!
    AllenHua
        19
    AllenHua  
       2021-04-09 09:51:29 +08:00
    @shutan #18 人家这是局域网,千兆内网都能达到的
    x86
        20
    x86  
       2021-04-09 09:57:11 +08:00
    @weyou #5 牛皮牛皮,学习了
    rationa1cuzz
        21
    rationa1cuzz  
       2021-04-09 10:11:34 +08:00
    学习了
    LinePro
        22
    LinePro  
       2021-04-09 10:14:37 +08:00   1
    @XiaoxiaoPu #12 @lcdtyph #14 拿 Windows 测试了一下,确实是这个逻辑,受教了,感谢。不过 IPv6 的 link-local 地址不是默认子网前缀长度是 10 吗?那应该算同一子网吧?
    yitingbai
        23
    yitingbai  
    OP
       2021-04-09 11:36:56 +08:00
    @AllenHua 不是啥客户端, 就是一个开源测速 web 项目 https://github.com/librespeed/speedtest, 局域网内搭建, 用来测试局域网速度非常方便
    lcdtyph
        24
    lcdtyph  
       2021-04-09 11:42:20 +08:00 via iPhone   1
    @LinePro
    不是说默认子网前缀是 10,是 fe80::/10 这个网段的地址都是 link-local 地址,本地单播实际上前缀是 64 。
    拿这个例子是想说,当时用 ipv6 全局地址通信的时候,网关可以使用与通信地址不在同一网段的链路地址。
    AllenHua
        25
    AllenHua  
       2021-04-09 11:53:16 +08:00
    @yitingbai #23 嗯嗯

    我后来搜了下 librespeed 没有客户端的 就是网页

    ![20210409115131.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210409115131.png)

    我也搞了个,但是可能受限于 这台机器的 CPU (上古神器 intel P8600 )性能不够 千兆没有跑满
    Telegram
        26
    Telegram  
       2021-04-09 13:04:45 +08:00
    @weyou #5 一个是菜鸟驿站,一个是京东送货上门,这比喻差不多吧
    weyou
        27
    weyou  
       2021-04-09 16:18:29 +08:00   2
    @ysc3839
    @LinePro

    网关必须要在某个子网中的目的是为了能够通过广播 arp 拿到网关的二层地址(子网划分了广播域), 如果某种路由的网关可以直接去查询二层地址, 那就没有这个限制.

    默认路由的网关就是这个特殊的存在. 比如 Linux 上网络地址是 default 的路由, 在 Windows 上 metric 标记为 Default 的路由. 这个网关的优先级是最低的, 所有其他路由没有匹配到的地址才会走这条路由的网关. 主机是会直接使用 ARP 查询这个网关的二层地址, 而不会管这个地址在其他的路由中是否可达.
    julyclyde
        28
    julyclyde  
       2021-04-10 12:04:42 +08:00
    一本正经的胡说八道
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     911 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 19:49 PVG 03:49 LAX 12:49 JFK 15:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86