tcp/ip 协议栈中,子网掩码是存哪的?

2021-07-07 12:40:12 +08:00
 lolcat
网络数据报文里好像没有保存子网掩码的部分。假设有如下场景:

路由器,A 口网段:192.168.128.0/24,B 口网段:192.168.128.0/23,如果有人给 192.168.128.0/24 网段的某个机器发了个数据报,路由器怎么知道是转发给 A 口还是 B 口?
3642 次点击
所在节点    Linux
34 条回复
www5070504
2021-07-07 17:27:13 +08:00
楼上牛鼻
rrfeng
2021-07-07 17:35:03 +08:00
报文只有地址
报文转发节点才需要掩码

这牛角尖钻的清新脱俗。。。。
idealhs
2021-07-07 17:59:40 +08:00
牛逼的,楼上学习了,回去复习下计算机网络
CRVV
2021-07-07 18:03:11 +08:00
@Tianao

你要不要自己找台 Linux 试试,不报错

ip addr add 192.168.1.1/24 dev eth0
ip addr add 192.168.1.1/24 dev eth1
libook
2021-07-07 18:03:55 +08:00
如果路由器两个口可以设置重合的网段,是不是我也可以设置一模一样的网段,比如 A 口和 B 口都设置 192.168.128.0/23,那么这样的话,即便数据包会携带子网掩码路由器也是一样无法判断究竟应该转发给谁。

子网掩码一般都是设备自己知道,用于推算网络基本情况的,这个要么是走 DHCP,要么是静态配置,而不是在每个数据包发送过程中夹带的。

而路由器自己维护路由表,所以有自主权决定数据包怎么转发(而不是终端来告诉路由器应该发给 A 口还是 B 口,这样就变成了终端在越殂代疱了),通常的情况是路由器同时接入两个不重合的网段,根据发送者的 IP 和接收者的 IP 来看落在哪个 IP 段里,就走转发到哪个线路。所以如果两个网段是重合的,那么就得看路由器是什么策略,这个如果没有统一的标准的话就可能是不同路由器、不同配置会有不同结果。
Tianao
2021-07-07 18:10:29 +08:00
@CRVV #24 Linux 缺省情况下不能在 eth0 和 eth1 之间路由 IP 分组,不符合我上述的限制条件。
Nerv
2021-07-07 23:38:54 +08:00
楼主的问题:
**数据报没有关于子网掩码的数据**

回答:单个 ip 地址子网掩码是 255.255.255.255 ,也就是 /32 。
Nerv
2021-07-07 23:50:18 +08:00
@libook
同一个路由器的两个端口无法配置相同的网段。
https://networkengineering.stackexchange.com/a/33165
xuanbg
2021-07-08 08:16:03 +08:00
首先,你的网络设置就有问题。A 口网段:192.168.128.0/24,B 口网段:192.168.128.0/23,路由器允许这样配置吗?如果允许,那么对于 192.168.128.0/24 的地址,一定是往 A 口转发的。因为这样符合最小匹配原则。
libook
2021-07-08 10:35:22 +08:00
@Nerv #28 这个就是我想说明的,我举了个例子来证伪路由器同时接入两个重合 IP 段的情况。
但拒绝设置重合网段这是个“加法”功能,厂商不做的话就不会有这种机制,所以我留了个口子,保不齐有厂商没做这个判断,然后用户确实可以配置两个重合的网段,那么就看具体什么算法,有可能始终走物理顺序第一的口,也可能因为路由表顺序的优化走最后走过的口,也可能发生了缓冲区错误停止运行。
qbqbqbqb
2021-07-14 17:51:42 +08:00
@Tianao 但是楼主提到的两个网络掩码分别是 24 和 23,不属于“去往同一目的网络(即网络地址和掩码均完全相同)的路由”,因而如果没有其它冲突的话两者都会被选为活动路由写入全局路由表,最终还是走最长匹配原则。
qbqbqbqb
2021-07-14 18:12:40 +08:00
@Nerv 电脑可以。例如双网卡同时接入一个 LAN 中,两个接口通过 DHCP 获取同一网段的两个不同地址。这种配置完全合法,不会导致网络故障。而且对于 NAS 用户使用 SMB3 多通道传输几乎必须这么配置。
Tianao
2021-07-14 18:24:16 +08:00
@qbqbqbqb #31 我说的“去往同一目的网络(即网络地址和掩码均完全相同)的路由”是在路由优选部分,同样是 /24 的直连路由会把同样是 /24 的手工静态路由 override 掉,最终被选为活动路由写入全局路由表的是 /23 /24 两条直连路由(和手工配置的静态路由的目的网络是一致的,但是不是手工静态路由哦,因为同样前缀的 /23 和 /24 的两条静态路由在路由优选中都败给了同样前缀的直连路由);最长匹配是发生在 FIB 查表时的,和路由优选是先后顺序关系(不冲突),“最终还是走最长匹配原则”这种说法很奇怪,因为最终肯定要在 FIB 查表时按前缀长度降序匹配,最后肯定都是遵循最长匹配原则的(不是说有了路由优选就不看最长匹配了,最长匹配是在路由优选之后、在路由优选的结果——全局路由表、FIB 的基础上)。先理解现代 IP 路由交换架构哦。
Nerv
2021-07-14 18:32:51 +08:00
@qbqbqbqb 你都说了不是路由器,和同网段矛盾的是转发工作。

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

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

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

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

© 2021 V2EX