在 ipv4 中向同一 LAN 上的主机发送 IP 数据包时是否使用路由表?

网络工程 路由 IPv4
2022-02-23 21:47:19

我无法理解将 ip 数据包发送到同一 LAN 上的另一台主机的步骤。我读过的大多数在线资源和与我交谈过的人都说主机使用子网掩码和目标 ip 来确定它们是否在同一个子网上。我知道这是如何工作的,但我对此有一些疑问。

为了确定它是否在同一个子网上,主机进入路由表,遍历每个条目,并对条目的掩码和感兴趣的目标地址执行按位与。然后将该结果与同一路由表条目的目标字段进行比较。在整个过程中匹配最多的位被确定为最佳匹配。找到最佳匹配后,它使用条目的接口字段发送数据报。如果最佳匹配条目的网关字段等于发送主机的 IP,那么这会告诉主机感兴趣的目的地位于同一子网上。然后使用 ARP 查找目标 IP 的 MAC(如果它不在 ARP 表中)并开始通信。

它是否正确?这就是它在 TCP/IP 中的描述方式。但是,当我与其他人交谈并在某些地方在线阅读时,有些人表现得好像主机只是对目标地址与主机的子网掩码进行按位与运算,因为这决定了它是否在同一个子网上,然后继续ARP。该过程根本不涉及路由表。

我对 TCP/IP 中作者的解释是否正确,或者我列出的第二种方法是否正确?

2个回答

路由表始终用于确定下一跳网关。如果按顺序检查表(在软件中),则从最长的网络掩码/前缀长度到最短的顺序检查条目。

路由会检查这些条目,直到其中一个与目标匹配if (destination.ip & entry.mask) == (entry.ip & entry.mask)&是按位操作;还要注意,IP 地址实际上是 32 位或 128 位无符号整数 - 通用符号只是为了人类可读性)。结果是网关 IP 地址和接口的组合。如果网关 IP 与接口地址匹配,则目标 IP 是该接口的本地 IP - 实际上,目标是它自己的网关。

然后将数据包发送到确定的网关。如果找不到匹配项,则无法发送数据包并丢弃该数据包。请注意,默认路由 0.0.0.0/0 匹配任何目的地,因为它的掩码长度为零。

路由表总是在任何场景中使用,无论是在同一个局域网还是不同的网络。路由表确定通往目的地的最佳路径。

如果目的地在同一个子网上

当流量从 pc 发起时,源 IP 地址和目标位于同一子网中,或者此过程由 pc 的 AND 过程确定。如果 AND 过程的结果在同一子网中找到源和目标,或者然后数据包将到达第 2 层交换机并验证第 2 层交换机中的 mac 地址表,绕过验证路由表。

如果源和目标在不同的子网中

如果源 IP 地址和目标 IP 地址属于不同的子网,则验证 pc 中的路由表是否是持久路由已验证数据包的目的地是源 IP 地址的网关,进一步的数据包将在网关的 MAC 地址的帮助下到达源 IP 地址网关。来自网关数据包将验证设备中的路由表。如果直接连接网络意味着它将检查ARP表并将数据包转发到目的地,否则它将根据路由表将数据包转发到下一级。