当我定义静态路由时,为什么必须为目标网络定义子网掩码?如果我有多个网关,并且所有目标网络的子网掩码都是 0.0.0.0,会发生什么情况?
答案1
因为目标网络地址本身并没有给出网络地址范围,但是当与网络掩码结合时,就定义了远程网络的完整范围。
例如,假设您正在使用网络 10.34.1.0/24 上的主机,并且路由定义如下
route add 10.34.2.0 mask 255.255.255.0 10.34.1.1
上述规则告诉你的计算机,网络 10.34.2.0/24(10.34.2.1 - 10.34.2.254)上的任何主机都可以通过路由器 10.34.1.1 访问
指定没有子网掩码的目标是没有意义的,即使是在单个主机的情况下,它也被定义为
route add 10.34.3.4 mask 255.255.255.255 10.34.1.2
如果有使用网络掩码 0.0.0.0 的冲突路由,则通常优先采用具有最低度量值的路由,例如
route add 0.0.0.0 mask 0.0.0.0 10.34.1.3 metric 10
route add 0.0.0.0 mask 0.0.0.0 10.34.1.4 metric 5
10.34.1.4 将是首选路由,假设没有其他具有较低度量的匹配路由
答案2
子网掩码用于告诉您的路由器/操作系统您的地址的网络部分到底是什么。
假设您有 10.1.2.0,如果您没有网络掩码(这称为有类路由),并且假定它是 10.0.0.0 网络,因为它属于 A 类(某些设备/操作系统为其提供在其接口上定义的子网)。请参阅此处了解有类路由和无类路由
这些是课程:
Class A
1. 0. 0. 1 = 00000000.00000000.00000000.00000000
127.255.255.254 = 01111111.11111111.11111111.11111111
0nnnnnnn.HHHHHHHH.HHHHHHHH.HHHHHHHH
Class B
128. 1. 0. 1= 10000000.00000000.00000000.00000000
191.255.255.255 = 10111111.11111111.11111111.11111111
10nnnnnn.nnnnnnnn.HHHHHHHH.HHHHHHHH
Class C
192. 0. 1. 1 = 11000000.00000000.00000000.00000000
223.255.255.254 = 11011111.11111111.11111111.11111111
110nnnnn.nnnnnnnn.nnnnnnnn.HHHHHHHH
Class D
224. 0. 0. 0 = 11100000.00000000.00000000.00000000
239.255.255.254 = 11101111.11111111.11111111.11111111
1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
Class E
240. 0. 0. 0 = 11110000.00000000.00000000.00000000
255.255.255.254 = 11111111.11111111.11111111.11111111
1111XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
但是如果您设置了子网掩码,那么您可以将 10.0.0.0 网络分成更多网络,如 10.1.0.0 或 10.1.1.0。
子网掩码是必需的,因为当您定义静态地址时(比如在 Windows 中,它不使用有类别路由而是无类别路由,因此必须有子网掩码)。
如果您输入子网掩码 255.0.0.0,则意味着只有地址的第一部分是网络地址,因此您的网络是 x.0.0.0;如果您输入 255.255.0.0,则它采用地址的前两部分,如 xx0.0,依此类推。因此,当您输入子网掩码 0.0.0.0 时,它表示从 0.0.0.0 到 255.255.255.255 的任何地址。
如果到同一目的地有多条路线,则度量值较低的路线将获胜。
关于在大多数设备/操作系统中将目标的子网掩码设置为 0.0.0.0,我认为如果地址不是 0.0.0.0,则不可能将子网掩码设置为 0.0.0.0。也就是说,如果子网掩码中的相应值为 0,则不允许在静态路由的目标地址中输入 1 位值。
例如,Windows 不允许您这样做
route add 10.10.10.0 mask 255.0.0.0 192.168.1.1
因为您指定的子网掩码为 255.0.0.0,其二进制形式为 11111111.00000000.00000000.00000000,而目标地址为 10.10.10.0,其二进制形式为 00001010.00001010.00001010.00000000。子网掩码为 0 的位置(地址的第二和第三部分)为 1