答案1
简短的回答,取决于 L2 主机上可用的协议。
每个第 2 层协议系列都有一些方法来通告/发现局域网上的系统的 MAC。正如 HeavyD 所提到的,这通常是通过广播来完成的,该技术在 ARP 中使用。
在过去(当您的问题很中肯的时候),唯一执行这些与网络相关的任务的人是网络管理员,他们在设置生成树或其他非路由多段 LAN 时可以轻松地从路由器/网桥上的标签上读取 MAC。您要么必须依赖名称映射协议(例如老式的 NetBUI,如果您感兴趣的话,它依赖于广播),要么手动配置它们。
答案2
如果您不知道实际的 MAC,您可以始终使用以太网广播地址 (FF:FF:FF:FF:FF:FF)。
这实际上是 ARP 的工作方式,请求被发送到广播地址,然后具有所请求 IP 的主机用自己的 MAC 进行响应。如果仅使用广播不可行,则需要实施类似于 ARP 的协议来发现主机。
答案3
如果不支持IPv4,则不需要IPv4路由器的MAC地址。
如果它甚至不知道 IPv4 是什么,它怎么会知道 IPv4 路由器是什么呢?它为什么需要与 IPv4 路由器对话呢?
重要的是要意识到,您在 LAN 上考虑的“路由器”实际上是 IPv4 概念,位于网络层(第 3 层)。没有“以太网层路由器”这样的东西;网络间路由是网络层(第 3 层)的任务。在以太网层,网络上可能存在通过多个交换机(技术上称为“网桥”)的“转发路径”,但这种以太网层路径查找称为“交换”或“桥接”,而不是“路由”。在使用精确术语时,我们将术语“路由”保留为第 3 层设备执行的操作。
如果主机支持其他可路由的第 3 层协议,它将使用该其他可路由的第 3 层协议定义的协议来查找该协议的第 3 层路由器。
例如,IPv6 使用与 IPv4 不同的以太网类型(以太网协议 ID 号)。IPv4 使用 0x0800,而 IPv6 使用 0x86dd。IPv6 主机使用 IPv6 的邻居发现协议 (NDP) 来查找同一以太网 LAN 上的相邻主机和路由器的 MAC 地址。NDP 建立在 ICMPv6 之上,而 ICMPv6 当然也建立在 IPv6 之上。
再举一个例子,在 TCP/IP 占据主导地位之前,AppleTalk 是 Apple 在 80 年代和 90 年代为 Mac 开发的专有协议栈。AppleTalk 的网络层(第 3 层)称为 DDP(数据报传送协议)。AppleTalk 主机通过 AppleTalk 地址解析协议 (AARP) 以太网类型 0x80f3 找到其 DDP 路由器。
其他人可能会给你举例说明如何使用 80 年代和 90 年代的所有专有协议栈完成类似的事情,而 TCP/IP 最终取代了这些协议栈:Novell IPX/SPX、Banyan VINES、DECnet 等。
目前仍在使用的少数非 IPv4/ARP/IPv6 以太网协议通常不能直接路由到当前以太网 LAN 的边缘之外,因此不需要查找任何第 3 层路由器。PPPoE、802.1X (EAPOL) 和 802.1D 生成树协议 (STP) 浮现在脑海中。PPPoE 通过一种名为 PPPoE 主动发现 (PAD) 的广播协议查找 PPPoE 接入集中器(服务器)及其 MAC 地址。802.1X 和 STP 只是将其数据包多播到 IEEE 为这些协议的目的指定和保留的特殊多播 MAC 地址。