相同的 IP 范围,不同的子网范围

Ste*_*nis 0 networking subnet

简单查询。只是想知道,如果我有一台电脑

PC-A
IP:      192.168.0.10
Subnet:  255.255.0.0
Run Code Online (Sandbox Code Playgroud)

而另一个

PC-B
IP:      192.168.0.15
Subnet:  255.255.255.0
Run Code Online (Sandbox Code Playgroud)

两者都在同一个物理网络上,我应该能够从 PC-A ping PC-B 吗?

Mar*_*iae 5

是,它们应能够ping彼此,在两个方向上:其原因是,PC-B的网络被完全包含PC-A的网络内,和PC-A位于其网络的那部分属于PC-B的网络。

PC-B的网络是

192.168.0.1 <-> 192.168.0.254
Run Code Online (Sandbox Code Playgroud)

而 PC-A 的网络是

192.168.0.1 <-> 192.168.255.254
Run Code Online (Sandbox Code Playgroud)

编辑

如果我在 192.168.1.15/255.255.255.0 上有 PCB 会怎样。我假设我无法 ping,因为 IP 范围不同?

是的,让我解释一下原因:如果您尝试 ping LAN 外的某些内容,ICMP (=ping) 数据包将路由到您的网关,这表明它们属于不同的 LAN,因此将它们发送到其外部接口 (=向外部世界):没有数据包在同一物理网络上发送,只有发送到网关的数据包,PC-B 不能,也不会拦截。

尽管下面说了,路由器...

...应该遵守水平分割规则,该规则表示您不会将在一个接口上收到的数据包转发回同一接口。这可能会导致路由循环。路由器应该丢弃具有相同源网络和目标网络的数据包

正如@RonMaupin 正确指出的那样(对 RFC 表示敬意,当您发布它们时,我仍在寻找它们!)。

此外,还有一个简单的方法来测试这个:删除到本地 LAN 的默认路由(在 Linux 上,这是通过

 ip route del 192.168.0.0/24 dev eth0
Run Code Online (Sandbox Code Playgroud)

如果192.168.0.0/24是您的网络和eth0接口),但保持默认网关不变。现在,与 LAN 上其他机器的所有通信都必须由网关进行调解。你会看到大多数路由器(例外?)不允许ping局域网机器,这包括我的 EdgeMax RouterOS 和我的 Buffalo DD-Wrt。

  • @MAP,路由器应该遵守水平分割规则,该规则表示您不会将在一个接口上收到的数据包转发回同一接口。这可能会导致路由循环。路由器应该丢弃具有相同源网络和目标网络的数据包。 (2认同)
  • @MAP,最初的 RIP RFC,[RFC 1058,路由信息协议](https://tools.ietf.org/html/rfc1058),从 1988 年开始,内置了水平分割规则。参见第 2.2.1 节,分割地平线。 (2认同)