子网如何工作的语义


1

假设我有host1配置的IP 1.2.3.4和子网掩码255.255.255.0连接到路由器。

以下语句是绝对的,语义正确的:

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

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

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


1
在on-link路由器发挥作用之前,我们将不得不考虑发起数据包的主机做什么。首先查阅主机的路由表,并基于此确定分组的下一跳。如果目标地址在同一子网中,则主机将数据包直接发送到目的地; 它根本不通过路由器。路由器和主机实际上在功能上非常相似,本质区别在于路由器也转发数据包,即它在接口上接收数据包,如果它们不是发往路由器则重新发送它们。
JohanMyréen

1
“当且仅当其所有连接的接口,该路由器将转发由主机1发送了它的默认网关的数据包的目的IP地址位与,主机1的子网掩码为接口不等于主机1的网络地址,该接口将更加”准确。
jcaron

1
@jcaron这根本不是真的。如果路由器收到,它会将数据包发送到目标主机。但是,这种情况通常不会发生,因为host1应该意识到目标位于同一链路上并将数据包直接发送到目标主机。更准确的说法是“当且仅当没有更符合目标地址的特定路由时,路由器才会将任何数据包转发到其默认网关。” 另请注意,如果网络是隔离的并且路由器都已知,则根本不需要默认路由。
JohanMyréen

@JohanMyréen哎呀,事实上,看起来我只读了一半的句子。我不知何故认为它读取“ host1会将数据包转发到其默认网关......”。但这意味着原始句子甚至更奇怪,路由器的行为与host1的配置无关...
jcaron

Answers:


5

“路由器会将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的子网掩码,路由器将充当交换机并将每个数据包发送到所有连接的接口(除了gateawy接口),并且永远不会向下转发任何内容它的默认网关?

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

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

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

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

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

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

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

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


2

在您的示例中(ip:1.2.3.4掩码:255.255.255.0),目的地不在1.2.3.0-1.2.3.255范围内的所有数据包都将被发送到网关。

如果目的地属于网络(1.2.3.50)但不存在,则数据包也不会发送到网关。

如果主机具有子网掩码/ 0(0.0.0.0),则不会向网关发送任何内容

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.