静态路由中网关的 IP 地址如何影响路由

静态路由中网关的 IP 地址如何影响路由

我一直使用 Windows 7 计算机连接到位于同一物理网络但位于不同子网的 Windows 10 计算机。在向 Windows 7 添加静态路由之前,所有流量都向上传输到主路由器,然后再向下传输到 Windows 10。这导致启动 RDP 连接时出现长时间延迟,因此我向 Windows 7 添加静态路由以避开顶部路由器。我犯了一个错误,但最终成功了,我不知道为什么。

网络图

网络图

Windows 7 的静态路由

1. None
2. route add 10.1.1.0 mask 255.255.255.0 10.1.0.99
3. route add 10.1.1.0 mask 255.255.255.0 10.1.1.3
  • 使用route 1 tracert节目10.1.0.98 -> 10.1.0.1 -> 10.1.0.99 -> 10.1.1.4
  • 使用route 2 tracert节目10.1.0.98 -> 10.1.0.99 -> 10.1.1.4
  • 使用route 3 tracert节目10.1.0.98 -> 10.1.0.99 -> 10.1.1.4

我知道为什么route 2有效,但我不知道为什么route 3也有效。

附言:如果有人能建议一个更清晰的标题,请随意。

答案1

路由 3 的工作原理取决于 Ubuntu 计算机处理 ARP 数据包的方式。针对 10.1.1.3 的 ARP 请求在 10.1.0.0/24 上发出,并在 10.1.0.99 接口上接收。由于该计算机拥有 10.1.1.3,它以其 10.1.0.99 的硬件地址进行响应。当 Windows 7 计算机稍后尝试与 Windows 10 计算机建立 RDP 连接时,它会发送发往 10.1.1.3 网关但带有同一子网上计算机的 MAC 地址的数据包,交换机可以直接转发该数据包。

尝试验证

在 Windows 7 上

.\Arping.exe -i 10.1.0.98 -T 10.1.1.3

在 Ubuntu 上

22:19:51.275116 (Windows 7 MAC) > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 10.1.1.3 tell 10.1.0.98, length 46

答案2

路由 3 的神奇之处在于,部分归功于地址解析协议,部分归功于转发表,部分归功于路由算法。

维基百科

地址解析协议 (ARP) 是一种通信协议,用于发现与给定互联网层地址(通常是 IPv4 地址)相关联的链路层地址,例如 MAC 地址。

许多操作系统在启动时执行免费 ARP这有助于解决可能出现的问题,例如,最近更换了网卡(更改了 IP 地址到 MAC 地址的映射),而其他主机的 ARP 缓存中仍然有旧的映射。

因此,Ubuntu 在启动时已宣布其存在及其所连接的两个子网的接口,从而向整个网络宣布。Windows 10 所做的任何类似宣布都只在其子网内,因此从未到达 Windows 7。即使从未收到此类宣布,Windows 7 也会使用 ARP 协议向网络发送广播数据包以查找匹配项,以询问“谁拥有 10.1.1.4”。

这里有一个很大的提示,即该命令没有在跳数中列出路由器。尽管 Windows 7 不知道,tracert但 的请求直接发往 Ubuntu 计算机。10.1.1.410.1.1.4

我们在这里看到的运行是 Windows IP 路由表:路由确定过程

  • 对于路由表中的每个条目,对目标 IP 地址和网络掩码进行按位逻辑与运算。将结果与条目的网络 ID 进行比较,以确定是否匹配。

  • 匹配路线的列表已编译。匹配最长的路线(与目标 IP 地址匹配位数最多的路由)将被选中。最长匹配路由是到目标 IP 地址的最具体路由。如果找到多个具有最长匹配的条目(例如,到同一网络 ID 的多个路由),则路由器使用最低度量来选择最佳路由。如果存在多个具有最长匹配和最低度量的条目,则路由器可以自由选择要使用哪个路由表条目。

Windows 7 路由在 10.1.1.4和之间找到了一个共同前缀10.1.1.3,即10.1.1。其他可能性是 的路由器或 Ubuntu 10.1.0.99,但其共同前缀仅为10.1,因此没有被选中。

我们在这里看到的是建立在路由表之上的转发表。而 路由表 由于 是基于 IP 地址来编译路由的,因此转发表包含相应的 MAC 地址。因此转发表包含一条条目,内容为:“对于10.1.1.X,将数据包转发到 Ubuntu 计算机的 MAC 地址”。一旦数据包到达 Ubuntu 计算机,它就知道如何将其转发到10.1.1.4

这就是 Windows 7 中的数据包最终会出现在 Windows 10 上的方式,反之亦然。

相关内容