我最近对 Cisco 2520 进行了升级。作为升级的一部分,交换机中添加了 SVI,以允许 VLAN 进行本地路由,而这之前是在另一台交换机上完成的(通过中继)。SVI 具有以下参数;
网络地址:192.168.65.96 子网掩码:255.255.255.248 SVI 地址:192.168.65.102
该子网上有两个设备,当进行更改时,即使默认网关和子网掩码分别为 192.168.65.1 / 255.255.255.0,两个设备仍然能够与远程网络通信。
随后,在监控期间,我与其中一台设备失去了通信,但另一台设备仍保持在线。我通过正确配置两台设备上的子网掩码和默认网关纠正了这个问题,但我想知道是否有人可以解释为什么我能够与一台设备通信,而另一台却无法通信,尽管两台设备的 subnet 掩码/默认网关配置不正确?
谢谢!
答案1
网络掩码(子网掩码)不是 IP 地址的一部分,也不会出现在 IP 标头的任何位置;无论使用什么网络掩码,发往“192.168.65.96”的数据包仍然是发往“192.168.65.96”的。
相反,网络掩码的作用是路线,并且它们仅在发送数据包时使用,而不在接收时使用 - 即配置了错误网络掩码的主机仍然能够接收数据包,但可能无法正确发送数据包。
发送数据包时,将检查网络掩码以确定目标 IP 地址是否位于同一子网作为发送主机:
如果源和目标都在同一个子网中,则意味着可以直接在 MAC 级别(“第 2 层”)发送数据包无需使用网关,发送方会通过ARP直接将IP地址解析为接收方的MAC地址。
因此,如果两个主机都在同一个子网内(根据彼此的网络掩码),那么网关地址配置错误也没有关系,因为在这种情况下不需要网关。
如果他们不是在同一个子网中,则需要网关,发送方将使用 ARP 来查找网关的 MAC 地址。
因此,错误配置的网络掩码将只影响与那些在“同一子网?”测试中给出错误结果的地址的通信。
如果您的网络掩码是太宽泛(前缀长度太短)并覆盖比其应有的更多的地址,那么您将不再能够向网络掩码意外包含的地址(但实际上不是子网的“本地”)发送数据包。
当尝试将数据包发送到此类地址时,您的主机将尝试通过 ARP 解析它们,就好像它们是本地的一样,即使它们不是本地的,即 ARP 请求将无法到达它们。
例如,如果您位于 192.168.1.0/24 子网,但意外将网络掩码配置为 /16(255.255.0.0),那么您将失去与 192.168.xx 其余部分的通信(尽管您仍然可以像以前一样访问 192.168.1.x)。
(尽管通讯可能如果您的网关实施“代理 ARP”并代表“另一方”回答这些 ARP 请求,这仍然是可能的——这实际上有时由 ISP 作为“客户端隔离”来完成,或者作为拆分大型子网的临时步骤。事实上,在子网划分发明之前,代理 ARP 曾用于拆分大型有类网络。)
无论哪种方式,您仍然能够与子网中的本地主机以及错误的网络掩码未覆盖的远程主机进行通信,因此这可能会在一段时间内被忽视。
如果网络掩码是太窄(前缀长度太长)并且没有覆盖应该覆盖的地址,那么您会得到相反的结果——您可能无法与网络掩码意外排除的子网部分进行通信,因为您的主机认为它需要通过网关来获取这些地址。
如果有是网关,那么它可能只是将数据包路由回同一子网,一切仍将正常运转——只是效率非常低。网关还可能向您发送 ICMP“重定向”数据包,通知您存在更直接的路径,并且您的操作系统可能会自动更新其路由表以再次允许直接通信。因此,错误配置可能会在很长一段时间内被忽视。
但如果网络掩码太窄和网关错误,那么您根本无法向这些地址发送数据包 - 您的主机将尝试通过不存在的网关引导它们。
在两种情况下,唯一受影响的目的地是那些“正确”和“错误”网络掩码给出不同结果的目的地。