假设我们有一个 LAN - 5 台主机连接到一个交换机。我没有为任何主机配置任何 IP 地址。我可以通过发送 L2 流量 - L2 标头和上面的数据与另一台主机通信吗?
如果是,任何主机将如何知道目标主机的 MAC 地址,对于 ARP,我们无论如何都需要一个 IP 地址。
假设我们有一个 LAN - 5 台主机连接到一个交换机。我没有为任何主机配置任何 IP 地址。我可以通过发送 L2 流量 - L2 标头和上面的数据与另一台主机通信吗?
如果是,任何主机将如何知道目标主机的 MAC 地址,对于 ARP,我们无论如何都需要一个 IP 地址。
如果您只有 L2 连接(在您的情况下为以太网),则除了计算机知道他自己的主机名和 MAC 地址之外,没有主机<-> MAC 地址映射的概念。
显然,通过监控接收到的数据包上的“源”mac地址(寻址到它自己的mac地址或广播给所有人),它可以了解LAN上存在的其他mac地址(有点像交换机学习的方式哪个 MAC 地址在交换机上的哪个端口后面)。
但是为了知道计算机 XYZ 的 mac-address 为 00112233445566,某人(用户)需要在某处指定。
要在 LAN 上动态查询哪个 mac-address 与给定的主机名匹配,需要做更多的工作:您可以编写一些软件,将广播 L2 数据包发送到整个 LAN,并作为有效负载发送主机名。您可以在所有侦听此类数据包的计算机上放置一个软件,并在收到包含其自己主机名的广播数据包时发送响应。
这或多或少会取代 IP 世界中 ARP 的功能。
恭喜:您刚刚在 L2 网络之上创建了一个基本功能,这是实现完整 L2-L3 网络堆栈的第一步。
在数据链路层(本例中为以太网),没有“IP 地址”的概念,唯一存在的地址是 MAC 地址。发送的帧可以标记为 包含IP 数据包(EtherType 0x0800/0x86DD),但由更高级别的层决定如何处理数据。
仅从以太网接口的角度来看,这是可能的。但是,从大多数使用该接口的设备的角度来看,他们更愿意从 TCP/IP 或 UDP/IP 层查看网络,而不会看到下面存在的内容。人们需要专门的网络软件来利用这些数据包进行通信。
瞻博网络技术库文章 第 2 层网络:以太网帧的好处就 这个主题说:
在纯 L2 网络中管理 MAC 地址取决于处理数据包的软件。需要广播地址才能通过网络获知。地址解析协议 (ARP) 是一种用于发现链路层地址的通信协议。
是的。大多数操作系统都会为此提供 API(尽管通常是特权的),并且存在各种直接在以太网之上实现协议的程序。(当然这就是操作系统实现 IP 本身的方式。)
如果您正在寻找示例,“etherwake”和“open-plc-utils”是您想到的两个项目。
它不会神奇地知道目的地。这是您的程序/协议需要自行处理的事情。例如,您可以简单地要求用户手动指定正确的目标 MAC 地址。
您还可以实现某种利用 L2 广播的发现协议(即,为您自己的协议制作等效的 ARP)。例如,在 Mikrotik RouterOS 中,“RoMON”基于 L2 的管理协议将广播发现数据包并收集来自附近节点的响应。
(同时,“MAC-Telnet”协议只是广播所有数据,根本不关心下一跳MAC地址。这当然是一个安全问题,只能接受,因为MAC-Telnet是最后的恢复工具.)
或者您可以使用多播并让所有节点侦听固定地址上的数据包。例如,Homeplug 管理协议 (open-plc-utils) 默认情况下会将所有帧发送到 00:b0:52:00:00:01 并将从任何Homeplug 设备获得响应。