如果一个或多个 IP 地址可以映射到同一个 MAC 地址,那么为什么需要 MAC 地址?即使 MAC 是数据链路层地址,而 IP 是网络层协议,为什么 IP 还不够用?
这个问题讨论了为什么 MAC 地址不够用,但我想知道为什么 IP 地址不够用。
答案1
如果一个或多个 IP 地址可以映射到同一个 MAC 地址,那么为什么需要 MAC 地址?即使 MAC 是数据链路层地址,而 IP 是网络层协议,为什么 IP 还不够用?
起初,各层之间确实没有这种划分,以太网地址直接用作主机地址。但只要有多个网络层协议,这种划分就不可避免,因为原始协议的“网络”地址(其格式在那时就已经确定)变成新引入协议的“数据链路层”地址。
最初,以太网并不是为了承载 IPv4(当时还不存在)而构建的,而是为了承载施乐的小狗协议套件,早期的“实验以太网”确实直接使用与 8 位 Pup 地址相同的 8 位地址。
因此,当其他人写下如何通过实验以太网承载 IPv4,那些 8 位 Pup 地址成为从 IPv4 的角度来看 8 位“MAC”地址。
后来,当施乐公司切换到 48 位寻址(因为 8 位不够长)他们又直接使用 48 位以太网地址作为 XNS 主机地址的一部分。此时他们已经处于必须将 8 位 Pup 地址转换为 48 位以太网地址的情况。
现在想象一下以太网硬件直接使用 32 位 IPv4 地址。如果是这样的话,为了在现有网络上传输其他协议(如 IPv6)(无需拆除和更换每个交换机和 NIC),您仍然需要在新的 IPv6 报头下方包含一个剩余的 IPv4 报头,并且您需要一种方法来动态地将节点的 IPv6 地址映射到其 IPv4 地址(听起来很像 ARP,不是吗),然后您仍然会得到与今天完全相同的情况,只是“MAC”地址是 32 位。
(从某种意义上说,你可以说这正是发生的事情。因为以太网地址(部分)是 XNS 地址,所以你实际上可以说 48 位 MAC 地址曾是最初是来自另一个世界的“IP”地址 - 当以太网适应承载不使用相同地址格式的不同类型的协议时,它就变成了“MAC”地址。)
在所有情况下,原因都是“链路层”地址不仅为操作系统所知,还被硬件使用。例如,在旧的共享总线以太网中(每个节点都可以看到每个数据包),硬件会查看“目标 MAC”字段并丢弃不需要的数据包,这样 CPU 就不会受到干扰。
随着以太网的后续改进,MAC 地址不再仅限于主机 - 以太网交换机也会跟踪它们。每个交换机都会在内存中构建一个“以太网路由表”,该表会说明哪个 MAC(L2)地址位于哪个物理(L1)端口后面,这样它就可以正确地将 L2 帧仅传送到需要它们的特定端口(而不是将每个数据包泛洪到整个以太网)。
这意味着无论选择了哪种标头和地址格式,它实际上都会融入所有以太网网卡和所有以太网交换机的硬件中,并成为所有其他网络层协议必须使用的。
答案2
设计一个仅使用 IP 数据的物理接口很容易,而且您可以完全消除 macaddress。您必须重新考虑 dhcp 的工作方式,因为 mac address 对于当今 dhcp 的功能至关重要,但许多 dhcp 事务已经不使用 macaddress 作为客户端的唯一 ID。不利的一面是,所涉及的大部分硅片必须检查更大、更动态的标头部分。想象一下,如果您的交换机和以太网适配器必须更换才能从 ipv4 移动到 ipv6。
此外,还有许多网络功能(如绑定等)需要重新设计。即使是现在,IP 网络也还不是通用的,例如光纤通道和无限带宽网络有一段时间没有使用 IP,而且许多部署对这些网络上的 IP 不感兴趣。
IP 正在慢慢吞噬大部分网络,就像 http3 正在慢慢吞噬 TCP 一样。因此,新的网络设计完全有可能跳过使用 mac 地址的操作,但这可能只会在 aws 或 google 等云工厂内发生。
答案3
苹果或媒体访问控制地址,以设备的唯一标识符开头。它也被称为生物免疫分析或刻录地址。它位于固件中。
随后,大公司开始订购具有特定 MAC 地址范围的网络适配器。这开始破坏唯一性。
现在手机经常使用随机MAC地址。
不过,大多数情况下,我可以用它来识别网络上的设备,尤其是当我想为其中一些设备分配静态 IP 地址时。