我可以在不使用 IP 的情况下创建以太网网络吗

Mic*_*ael 14 networking ethernet mac-address

正如我从 ISO-OSI 模型中了解到的,MAC 地址在与 IP 地址不同的层上运行。这对我来说很清楚。

我可以接受以太网 (LAN) 不使用 IP 地址进行通信,而是使用 MAC 地址。我知道这些 MAC 地址不能用于 LAN 外的路由,因为它们没有分层定义。我也明白 IP 是在大型互联网上进行路由的最佳方式。我不完全相信的是,MAC 地址是在 LAN 中进行通信的最佳方式


我的问题如下:

  1. 以太网不能使用 IP 地址来发送消息吗?我不是说它应该,我只是问它是否可以选择这样做。
  2. 由于以太网使用 MAC 地址进行通信,我能否创建一个以太网网络,其中设备没有 IP 地址,只有 MAC 地址?

Spi*_*iff 6

以太网是否可以使用 IP 地址而不是它自己的数据链路层地址?当然不是,如果它想不知道它使用的是什么第 3 层协议。

我们按层设计网络协议,以便我们可以混合和匹配层。

以太网最初由施乐 PARC 的 Bob Metcalfe 等人开发,与网络层无关,因为他们的目标不仅是 TCP/IP 访问,也是施乐自己专有的 XNS 网络协议栈/套件。

DEC(数字设备公司)成为另一个早期采用者,主要将其用于他们的 DECnet 协议栈/套件。

在 80 年代末和 90 年代初,有许多相互竞争的 LAN 协议套件(都完全独立于 TCP/IP)在企业以太网 LAN 上运行。除了 XNS 和 DECnet,还有 Apple 的 AppleTalk (EtherTalk)、Novell 的 IPX、Banyan VINES、NetBEUI、DLC/LLC、IBM SNA、OSI/ISO 和其他我已经忘记的。

所以,是的,您可以使用没有 IP 的以太网。许多公司网络在 80 年代和 90 年代都这样做了。

因为以太网被设计成不关心在它上面运行的是什么第 3 层(网络层)协议,所以那些企业 LAN 支持各种供应商设备的混合相对容易,而且这些 LAN 添加 IPv4 相对容易90 年代中后期互联网起飞时的支持,现在我们添加 IPv6 支持相对容易。


big*_*osh 5

由于以太网使用 MAC 地址进行通信,我能否创建一个以太网网络,其中设备没有 IP 地址,只有 MAC 地址?

如果您从头开始编写自己的所有软件,那么您当然可以这样做。只需让软件在任何地方接受一个 MAC 地址,而该程序的正常副本会接受 IP 地址。使用所有系统调用来发送原始以太网数据包而不是 IP 地址,它会起作用 - 但这将是一个巨大的麻烦。

通常,您网络上的 MAC 地址不遵循任何模式。它们由制造商烧录到硬件中。它们又长又笨重。我的现在是 C8-60-00-CA-4B-9A。我旁边的电脑是00-40-F4-48-1B-88。

为了让机器能够互相交谈,您可以为每台机器提供一个硬编码列表,其中包含网络上所有其他机器的所有 MAC 地址,以便它知道将数据包发送到哪里。这是很多容易出错的输入,并且无论何时您更改任何网络硬件,您都必须四处更改所有列表以反映新的 MAC 地址。

这是一个巨大的麻烦,因此您最终可能会想出一种方法,让网络上的机器使用广播数据包自动发现彼此的 MAC 地址。然后你会给他们一种方法来用一些有意义的地址来标识自己,这样你就必须输入诸如“telnet C8-60-00-CA-4B-9A”之类的命令。

事实证明,这正是 IP 的作用——它是一种使用有意义的数字来寻址网络上的主机而不是硬编码 MAC 地址的方法。在 IP 之上添加 DNS,您可以键入诸如“telnet webserver”之类的命令。

以太网不能使用 IP 地址来发送消息吗?我不是说它应该,我只是问它是否可以选择这样做。

MAC 地址是 6 个字节的信息,而 IP 地址只有 4 个字节,因此您不能进行任何类型的 1 对 1 映射。您需要某种方式从 IP 地址(由想要与网络上的另一台主机通信的软件提供)查找 MAC 地址(以放入数据包)。

一种(硬核)方法是进入网络上的每台机器,并通过将前两个字节设为零(或其他相同的固定数字)将其硬件 MAC 地址更改为 IP 地址。对于网络上的每台机器)并将底部的四个字节设置为您希望它们在网络上拥有的“IP 地址”。(大部分网卡都会让你进去修改厂商分配的MAC地址)

为了使其真正起作用,接下来您还必须破解网络堆栈中的代码才能实际使用该系统。您基本上可以删除与 ARP 相关的所有内容(IP 用于将 IP 地址转换为 MAC 地址的方法)。您将删除构建/读取 IP 标头的部分。相反,您可以用非常简单的代码替换它,给定要发送到地址为 wxyz 的主机的 IP 数据包,构建一个将 DEST 地址设置为 00-00-wxyz 的以太网帧。

您还需要一种方法来向数据包的接收者表明它适用于哪种协议(UDP、TCP)。您可以通过覆盖现有字段将其粘贴在以太网标头中的某个位置。也许使用源地址的前两个字节之一?这不会影响目标机器的接收能力,但可能会弄乱一些交换机。您还可以将协议添加到以太网帧的开头或结尾,并将有效负载大小增加一 - 但这开始变得像 IP 标头。

那么所有这些工作会给你带来什么?

首先,它可以为您节省在每个传出数据包的 ARP 表中查找的开销。这可能只有几微秒的数量级。

您节省了计算 IP 标头校验和的工作,以及保存它们所需的内存。这在现代硬件上可能并不重要。

由于没有 IP 标头,因此您可以在网络上的每个数据包中节省 16 个字节。这可能取决于应用程序。

最大的好处是您不必执行任何 ARP 请求。向新主机发送标准 IP 数据包会触发 ARP 交换,这可能需要几毫秒且不可预测。对于某些对延迟和抖动非常敏感的应用程序,这可能是一个巨大的收益。

对于一些非常专业的应用程序,这实际上是有意义的。我曾经使用过一个实时系统,该系统仅使用广播 UDP 数据包进行所有主机间通信,唯一原因是它避免了这些 ARP 序列启动并意外增加延迟和抖动。我还曾经在一个资源有限的嵌入式系统上工作,该系统通过直接在 IP 数据包内发送 UDP 有效负载(无 IP 标头)来工作,因为它节省了实现所有 ARP 和网络掩码以及额外校验和内容所需的所有复杂性和内存。