在路由决策中,为什么仅使用源的子网掩码并应用于源 IP 和目标 IP?

在路由决策中,为什么仅使用源的子网掩码并应用于源 IP 和目标 IP?

子网掩码定义了 IPv4 地址的分解方式。IPv4 地址 nnn.nnn.nnn.nnn 与 MAC 地址不同,它们只是随机数。这违背了路由的目的。它们有两个部分:网络 ID 和主机 ID。网络 ID 显示设备位于哪个子网。主机 ID 显示它是子网上的哪个特定设备。

但是,由于有 4 个不同的八位字节,因此有多种方法可以将地址拆分为两个字段。这给了我们 A、B、C 类。这些地址只有专用于节点 ID 或网络 ID 的完整八位字节,因此无类掩码开始发挥作用。这是 192.24.50.1/24 表示法。我理解这部分(除非我在不知情的情况下犯了上面的错误。)


路由器如何使用它来做出决策?

所发生的过程是在设备的两个选项之间做出决定:

我想要到达的目的地是否与我在同一个子网中?

  • 如果是,则以帧的形式直接发送,以太网/802.11/等帧中的目标地址是该主机的 MAC 地址。如果不知道,则执行 ARP 以获取它。“嘿,谁的 IP 地址是 192.59.1.2,你的 MAC 地址是多少?

  • 如果不是,则意味着我们必须将其路由到另一个子网。它位于不同的“邻居”中。这是路由器的工作,因此,我们将传输发送到默认网关以做出路由决定。然后我们再次询问该问题,依此类推。


路由器具体如何使用子网和IP地址?

如前所述,为了查看目的地是否与自己位于同一子网,它必须比较 IP 地址。但是,它只比较网络 ID 部分。这对于比较来说很重要。“目的地在我附近吗?”因此,它会比较两者的网络 ID 来做出决定。

获取网络 ID 的方式是通过将子网掩码“应用”到两个 IP 地址的基本二进制逻辑。

例如,120.50.2.1 加上 255.255.255.0 子网掩码,结果为 120.50.2.0。它实际上去掉了主机 ID,因为该部分对于比较毫无用处。


这就是我困惑的地方

设备如何向使用不同子网掩码的其他设备传输?

在进行路由决策时,只需要三条信息。当前设备 IP、目标 IP 和当前设备的子网掩码。(不使用目标子网掩码)

但是,如果您有一个具有 A 类子网掩码的设备向具有 C 类子网掩码的设备发送信息,该怎么办?

源 IP122.10.21.5 使用 A 类口罩

  • 122 是网络号码
  • 10.21.5 是网络节点

目标 IP:122.10.2.4使用 C 类掩码

  • 122.10.2 是网络编号
  • 4 是网络节点

因此,源设备将子网掩码应用于其自身和目标设备,以查看它们是否位于同一子网。

来源:122.10.21.5 + 255.0.0.0 = 122.0.0.0

目的地:122.10.2.4 + 255.0.0.0 = 122.0.0.0

这告诉我们它们在同一个子网上。但事实并非如此!源在标识为 122 的子网上,而目标在标识为 122.10.2 的子网上!

如果将目标的子网掩码应用于目标而不是使用源,那么这个问题就会得到解决。

来源:122.10.21.5 + 255.0.0.0 = 122.0.0.0

目的地:122.10.2.4 + 255.255.255.0 = 122.10.2.0

答案1

首先:IP 类 20 多年前就被删除了,所以忘掉它们吧。我将使用 CIDR 表示法。

不允许子网重叠。您不能在用于 /8 子网的同一空间中拥有 /24 子网。换句话说:每个 IP 地址只能属于一个具有一个子网掩码的网络。

答案2

在路由中,来源IP地址没有任何用处,只是用来传输。

目的地IP 地址使用相应条目的掩码与路由表条目进行匹配:if (dest.IP && entry[n].mask) == entry[n].address then forward to entry[n].gateway在所有路由上从最长到最短掩码进行迭代,第一个命中的是网关。

相关内容