![子网工作方式的语义](https://linux22.com/image/1580134/%E5%AD%90%E7%BD%91%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%BC%8F%E7%9A%84%E8%AF%AD%E4%B9%89.png)
假设我有主机1配置了 IP1.2.3.4
和子网掩码255.255.255.0
并连接到路由器。
以下陈述在语义上是否绝对正确:
“路由器将转发由主机1其默认网关当且仅当对于所有连接的接口,接口的配置地址与主机1的子网掩码不等于主机1的网络地址”?
具体来说,如果目标地址与主机1,1.2.3.50
但是却不存在于本地网络上,路由器是否仍然永远不会将其转发到默认网关?
最后,如果我(荒谬地)选择子网掩码/0
为主机1,这实际上会阻止我的主机访问整个互联网吗?因为路由器将充当交换机,并将每个数据包发送到所有连接的接口(网关接口除外),并且绝不通过其默认网关转发任何内容?
答案1
“当且仅当对于所有连接的接口,接口的配置地址与 host1 的子网掩码的按位与不等于 host1 的网络地址时,路由器才会将 host1 发送的数据包转发到其默认网关”?
在传统 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。这样,即使是同一子网上的客户之间的流量也会根据路由器的防火墙规则进行过滤,而这些规则通常会被绕过。
答案2
在您的示例中(ip:1.2.3.4 mask:255.255.255.0),所有目的地不在 1.2.3.0-1.2.3.255 范围内的数据包都将被发送到网关。
如果目的地属于网络(1.2.3.50)但不存在,则数据包也不会被发送到网关。
如果你的主机的子网掩码为 /0(0.0.0.0),则不会向网关发送任何内容