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

2021-04-08 21:30:27 +08:00
 yitingbai

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

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

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

下图中,因为测速服务器在子网中,本地可以直接通过 arp 获取到服务器 mac 地址,发出的数据包会直接由交换机芯片直接中转,效率比 cpu 处理高很多。
Lemeng
2021-04-08 23:30:14 +08:00
真没研究过,了解了
sujin190
2021-04-08 23:31:28 +08:00
@weyou #5 正解了,这也是下行不受影响的原因,可以抓包看看链路层信息就更清楚了
yitingbai
2021-04-09 00:12:58 +08:00
@weyou 测速网站确实在内网, 受教了
ysc3839
2021-04-09 00:16:37 +08:00
@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
2021-04-09 00:17:04 +08:00
@weyou #5 有个问题,子网掩码是 255.255.255.255 的话,按计算机网络知识正常来讲主机并不知道如何能够与网关互联。但为什么这里可以?
muzuiget
2021-04-09 01:34:02 +08:00
子网掩码无非就是定义一个 IP 范围而已,九成就是网络程序自己的问题。
XiaoxiaoPu
2021-04-09 01:49:49 +08:00
@LinePro
@ysc3839

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

default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0

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

子网掩码是 255.255.255.255 ,其实就是没有第二条路由。但是设置了网关,第一条路由就有的。
ch2
2021-04-09 02:19:48 +08:00
32 位子网,只能靠网关中转发 ip 包,24 位子网就不需要网关代劳了,子网内部可以直接发包
lcdtyph
2021-04-09 02:24:20 +08:00
@ysc3839 #9
网关不必在同一子网,典型的例子是 ipv6 的 link-local 地址。
在路由阶段网关的 ip 只是用来在 arp 过程中获取下一跳的 mac 地址,因此内核只需要知道应该从哪个 interface 广播 arp request 就可以了。
AllenHua
2021-04-09 08:53:43 +08:00
子网掩码的作用是划分 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
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
2021-04-09 09:18:35 +08:00
@AllenHua #16 没仔细看图,你的 LibreSpeed 的服务器 ip 是 192.168.199.101 🐶️

顺便问问楼主这是 mac 什么客户端?
shutan
2021-04-09 09:25:06 +08:00
带宽好大啊!
AllenHua
2021-04-09 09:51:29 +08:00
@shutan #18 人家这是局域网,千兆内网都能达到的
x86
2021-04-09 09:57:11 +08:00
@weyou #5 牛皮牛皮,学习了

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

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

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

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

© 2021 V2EX