@ThirdFlame 请问在我说的上述场景中,静态路由表已经写好了,192.168.128.0/24 网段的报文就转发给 A 口,192.168.128.0/23 网段的报文就转发给 B 口,那么路由器收到一个目标地址是 192.168.128.7 的报文,他该转发给那个口呢?
lolcat
2021-07-07 12:50:34 +08:00
@coolzjy 请问在我说的上述场景中,静态路由表已经写好了,192.168.128.0/24 网段的报文就转发给 A 口,192.168.128.0/23 网段的报文就转发给 B 口,那么路由器收到一个目标地址是 192.168.128.7 的报文,他该转发给那个口呢?
mmtromsb456
2021-07-07 12:59:27 +08:00
路由表遵守最长前缀匹配,所以 A 接口与 B 接口交集部分走 A 接口,剩余部分走 B 接口
lolcat
2021-07-07 13:30:30 +08:00
@mmtromsb456 还是没看懂,请问在上述的例子中,A 接口和 B 接口在不同网段,怎么可能有交集呢?如果静态路由表已经写好了,192.168.128.0/24 网段的报文就转发给 A 口,192.168.128.0/23 网段的报文就转发给 B 口,那么路由器收到一个目标地址是 192.168.128.7 的报文,他该转发给那个口呢?
v2mm
2021-07-07 13:31:50 +08:00
192.168.128.7 取前 24bit == 192.168.128.0 走 A 口
但是比如 192.168.129.7,则 192.168.129.7 取前 24bit == 192.168.129.0 不走 A 口 192.168.129.7 取前 23bit == 192.168.128.0 走 B 口
qbqbqbqb
2021-07-07 13:43:53 +08:00
@lolcat 系统不会也无法知道你现实中的网段配置,一切按照路由表和规则来。如果路由表写成这样,按照路由表匹配规则(最长前缀),这个报文必然是走 A 口。如果实际上这台机器在 B 网段,那这个包就丢了。
比如说 192.168.128.7/24 和 192.168.128.7/23,这就是一个 IP 地址,只能代表一台主机(绝对不能将其理解为两个网段中的两个不同主机,这是一种常见的误解,如果在相互连接的网络中这样配置两台主机的话会导致 IP 冲突),只是说配置前者的话系统会认为它的网段有最多 254 台主机这么大,配置后者的话系统会认为它的网段有最多 510 台主机那么大。
xiaooloong
2021-07-07 13:57:52 +08:00
掩码只做本地演算用,传输的数据中不体现。
Tianao
2021-07-07 14:02:55 +08:00
@lolcat 看了楼主楼上的回复,看来楼主根本没有这样用过路由器,也不理解网段、网络、子网、超网、网络地址、网络号、主机地址、最长匹配的概念和实际意义,建议楼主先去学习下这些基础知识,再来纠结这些以自己的水平在现实应用场景中根本不可能遇到的场景(最典型的 IP 以太网路由器在简单的局域网环境下不可能(不被允许)这样配置,如果遇到串行、帧中继等非广播型网络、loopback 口做路由通告或身份 ID 等有条件出现这样的配置场景的情况,这个问题自然就不会成为问题了)。
总而言之,楼主现在的基础知识决定了这样纠结这个问题没有意义,只会成为“思而不学则殆”的典型。
cpstar
2021-07-07 14:26:17 +08:00
A 口 B 口冲突了吧 按道理,掩码只负责子网判定,跟 IP 无关,所以按照 LZ 描述,A 口 B 口可以同时设置 192.168.128.5,那显然这是不允许的。
子网掩码不是一个网络的属性,也不是一个地址的属性。它本身唯一的作用就是表示一组连续的 IP 地址,然后这一组 IP 地址叫做一个子网。 比如 ip route add 192.168.1.0/24 via 10.2.3.4 一次设置了 256 个 IP 地址的路由,不用一个一个加路由。 给 interface 设置的子网掩码是告诉电脑哪些 IP 地址和本机是直连的,这些直连的 IP 可以直接走数据链路层通信( ARP 协议),不用经过路由器。和本机直连的 IP 地址也不一定是连续的,你可以在一个 interface 上设置多个 IP 地址和子网掩码。和设置路由一样,一次设置一组,不用一个一个加,仅些而已。
这种事情找几台机器,至少要有一台带两个网卡的,连起来玩一下就知道了。
Tianao
2021-07-07 16:57:25 +08:00
回复楼主附言 1 「看了大家回复, 1. 有人说路由器的静态路由表不允许这么配置。 2. 有人说根据最长匹配原则,192.168.128.7 这个地址可以匹配 A 口 192.168.128.0/24 这个网段的 24 位,而只能匹配 B 口 192.168.128.0/23 这个网段的 23 位,根据最长匹配规则应该会把这个数据包转发到 A 口。
到底哪个答案是正确的呢?」
首先,192.168.128.0/24 192.168.128.0/23 是两个网络地址而不是主机地址,因此不能配置到普通接口上。如果 A B 两个口都是工作在三层模式的以太网接口,那么路由器不允许配置为两个接口分别配置 192.168.128.1/24 192.168.128.1/23 这样两个地址,在配置好一个之后,再配置另一个时会被拒绝并报错。
其次,假设两个地址配置成功后,路由器会自动生成去往这两个网络的直连路由。
然后,现代路由器路由器在实际执行路由转发时的直接参照是 FIB (转发信息表)而不是路由表(路由表不一定包含物理出接口,也没有下一跳的目的 MAC 地址),而 FIB 是根据全局路由表(有时候被称为系统路由表或者优选路由表)及其他表项生成的。