子网如何工作的语义

JSS*_*all 1 networking subnet netmask

假设我将配置了 IP和子网掩码的host1连接到路由器。1.2.3.4255.255.255.0

以下语句在语义上绝对正确:

当且仅当对于所有连接的接口,该接口的按位配置地址和host1的子网掩码不等于host1的网络地址时,路由器才会将host1发送的数据包转发到其默认网关”?

特别是,如果目标地址与host1位于同一子网上,例如1.2.3.50,但不存在于本地网络上,路由器永远不会将其转发到默认网关是否仍然正确?

最后,如果我(荒谬地)/0host1选择一个子网掩码,这是否有效地阻止了我的主机的整个互联网?因为路由器将充当交换机并将每个数据包发送到所有连接的接口(网关接口除外),并且从不通过其默认网关转发任何数据?

use*_*686 5

“当且仅当对于所有连接的接口,该接口的按位配置地址和主机 1 的子网掩码不等于主机 1 的网络地址时,路由器才会将主机 1 发送的数据包转发到其默认网关”?

在传统的 IP 路由中,是的。数据包转发是通过从路由表中选择最具体的匹配路由来完成的(“连接接口”与“默认网关”之间没有特殊区别,它们都只是标准路由)。因此,如果路由器有两条与数据包匹配的路由,一条用于0.0.0.0/0(默认网关),另一条用于1.2.3.0/24(本地子网),则后者总是获胜。

尽管您应该注意到路由器不一定有默认网关(尤其是在所谓的“无默认区域”中,这实际上只是意味着它们对绝对所有事物都有更具体的路由)。

另外,我说“传统 IP 路由”是因为路由器可能不仅仅是基于目的地的路由匹配。例如,在 IPv6 中,一些系统支持与和目标匹配的路由;例如你可以有路线from ::/0 to ::/0 via <gw1>from 2001:db8::/48 to ::/0 via <gw2>

实现基于策略的路由也很常见(在 IPv4 和 IPv6 中),它可能通过协议或防火墙标记匹配数据包。如果路由器有两个上游(两条默认路由),它通常会希望使用策略路由来确保从上游 1 收到的数据包将其回复发送到同一个上游 1,即使路由表更喜欢上游 2。

特别是,如果目标地址与 host1 位于同一子网上,比如 1.2.3.50,但不存在于本地网络上,路由器永远不会将其转发到默认网关是否仍然正确?

是的。如果路由表说目的地是本地的,但路由器没有收到 ARP/NDP 回复,它不会回退到另一个不太具体的路由——它会立即放弃并返回某种 ICMP 错误,可能是“目的地主机无法访问”。

(目的地是否与源在同一网络中通常不会影响任何事情。即使这意味着将数据包发送到与到达相同的接口,路由器仍然以相同的方式运行。)

最后,如果我(荒谬地)为 host1 选择子网掩码 /0,[...] 路由器将充当交换机并将每个数据包发送到所有连接的接口(网关接口除外),并且从不转发任何内容它的默认网关?

更改主机上的子网掩码对路由器没有影响。路由器不知道其他主机上配置的是什么子网掩码;它将根据其自己的接口的配置方式运行。(反之亦然,主机不知道路由器是如何配置的。)

如果您直接将路由器配置为在某个接口上具有 /0 子网掩码,则它绝对不会像交换机一样开始工作。它仍然充当路由器,但如果它以前有一个默认路由,那么它现在只有两个默认路由——其中一个恰好声称所有主机在指定接口上都是本地的。

如果路由器更喜欢第二个默认路由,您仍然会看到通常的“本地子网”行为:路由器将继续尝试直接在此接口上对每个目的地进行 ARP/NDP(假设它是一个广播接口,如以太网/Wi-Fi) ,并且在收到 ARP 回复并获知目的地的 MAC 地址之前仍然不会转发数据包。

如果您将主机配置为具有 /0 子网掩码,则基本上会发生相同的事情:两条默认路由,其中​​一条是本地路由,因此主机将尝试对每个目的地进行 ARP 查询并失败。(主机和路由器之间的唯一区别是主机不会转发接收到的数据包,而路由器会。否则它们以大致相同的方式处理路由表。)

最后,如果我(荒谬地)为 host1 选择了一个 /0 的子网掩码,这是否有效地阻止了我的主机的整个互联网?

通常是的,因为主机在 ARP 查询并非真正本地的目的地时永远不会成功。

但是你可以让路由器欺骗回复这些查询——一个叫做“代理 ARP”的功能。启用它后,当主机尝试对某个远程主机进行 ARP 查询时,它将学习本地路由器的 MAC 地址,从那时起,一切似乎都像主机具有正常网关路由一样工作。(唯一的区别是主机最终会有一个巨大的ARP 缓存。)

当主机认为它位于标准子网(例如 /24)但实际上不能将以太网帧发送到本地路由器以外的任何其他设备时,这更常用。托管公司可能会将其交换机配置为丢弃除来自/到达“受信任”路由器端口(端口隔离)之外的所有数据包,并在路由器上启用代理 ARP。这甚至允许根据路由器的防火墙规则过滤同一子网上的客户之间的流量,他们通常会绕过这些规则。