我知道在以太网 LAN 中,ARP 协议用于从 IP 地址获取 MAC 地址。如果无法使用 ARP,我的路由器如何获取外部网络上另一个路由器的 MAC 地址?
答案1
为什么您认为 ARP 是不可能的?ARP 就是实现它的方式。您的“内部网络”与“外部网络”没有什么特别之处,两者都使用相同的协议。
您的路由器设置了一组路由,用于将流量路由到您的内部网络,但它也有一个默认网关,指向您 ISP 网络中的路由器。您的路由器将使用 ARP 查找该默认网关的 MAC 地址。然后该路由器将执行相同操作以找到其“下一跳”。
答案2
我假设“外部网络”未直接连接到您的路由器。
它不执行 ARP。您的路由器在其路由表中查找目标地址。该表将列出下一跳地址,即下一个更接近目标的路由器的地址。然后,您的路由器将对路由器地址执行 ARP,因为它与您的路由器位于同一网络上(或者换句话说,它们共享一个公共网络)。
现在,下一跳地址可能不在您的路由器所连接的网络上。因此,您的路由器将在其路由表中查找到下一跳地址的路由。该路由也将有一个下一跳地址(我们将其称为 NH2)。NH2 将位于一个公共子网上,因此您的路由器将为 NH2 的 MAC 执行 ARP。
在 NH2 也不是本地的真正奇怪的情况下,您的路由器将继续查找其路由表,直到找到本地子网,否则它将丢弃数据包。
答案3
简短回答:
使用 MAC 地址的数据链路层(第 2 层)技术使用 ARP,即使对于“外部”(WAN)链路也是如此。
点对点的数据链路层技术不一定需要链路层地址,因为只有 2 个端点,并且每个端点都知道,如果它不是发送消息的端点,那么它一定是应该接收消息的端点,反之亦然。所以它们不需要 MAC 地址或 ARP 之类的东西。
在共享介质上进行多点对多点的数据链路层技术需要某种链路层地址和某种地址解析协议,即使它们不分别称为“MAC 地址”和“ARP”。但它们通常将其 ARP 等效项称为“<此数据链路技术的名称> ARP”
长答案:
从某种意义上说,以太网中的 MAC 地址和 ARP 仅用于类似以太网的数据链路,因此仅在类似以太网的数据链路上才需要查找下一跳 MAC 地址,并且 ARP 就是用于此的。
点对点串行链路(许多企业 WAN 链路都是如此)不一定需要数据链路层地址,因为您只能与另一台设备通信,因为线路上只有另一台设备。因此,您可以假设您收到的所有内容都是为您发送的,并且可以假设链路的另一端将处理您传输的所有内容。
那么,多设备(又称多点对多点)共享介质数据链路层与以太网不同,并且不使用类似以太网的 48 位 MAC 地址,那么情况又如何呢?好吧,这些数据链路可能具有某种链路层地址,即使它不是 48 位 MAC 地址,它们也需要某种方式将 IPv4 地址映射到其数据链路层地址,即使它不是传统的以太网 ARP。一般来说,设计如何使 IPv4 在其他数据链路上工作的人基本上遵循以太网模型,并为其数据链路创建 ARP 协议。这些协议通常与传统的以太网 ARP 不同,名为“<在此处插入数据链路层协议的名称> ARP”。
因此,如果你通过光纤通道实现 IP,那么“光纤通道 ARP 上的 IP“(更简单的名称“光纤通道 ARP”或“FARP”已经用于光纤通道自己的协议之一)。
如果你通过 SONET/SDH 实现 IP(技术上是通过“MAPOS”,即通过 SONET/SDH 实现多点联网的方式),那么你就有“路由协议“。
如果你通过 FireWire(IEEE 1394 串行总线)实现 IP,那么你就有“1394 地址解析协议“
如果你回到 90 年代初期,并希望通过 AppleTalk/LocalTalk 实现 IP,那么你可以这样做“邻居路由协议“(更简单的名称“AppleTalk ARP”或“AARP”已经用于将 AppleTalk 的网络层地址映射到数据链路层地址的协议)。
答案4
如果无法使用 ARP,我的路由器如何获取外部网络上另一个路由器的 MAC 地址?
下一跳要么通过以太网到达,要么不通过。如果通过以太网,则 ARP 有效。如果不是通过以太网,则不需要 MAC。