如果我们仍然通过私有 IP 地址进行通信,即使我们在同一个 LAN 上,那么拥有 MAC 地址有什么意义呢?

如果我们仍然通过私有 IP 地址进行通信,即使我们在同一个 LAN 上,那么拥有 MAC 地址有什么意义呢?

我是计算机网络方面的新手。我了解网络协议分层的好处以及“链路层和 IP 层分离”。早在 90 年代,就有多个相互竞争的链路层协议,这种分离可能是合理的。

然而,我的理解是,如今以太网是事实上的链路层协议,但在同一个以太网上,我们仍然通过私有 IP 地址进行通信!而且,该私有 IP 地址必须通过 ARP 协议转换为 MAC 地址。链路层和互联网层根本没有“分离”,MAC 地址给该过程带来的唯一东西是 ARP 开销。

那么我想问:为什么要这么麻烦?为什么我们不能只使用 IP 地址将数据包传递到同一以太网上的另一台机器?

我能想到的唯一好理由是成本。如果我们只通过私有 IP 地址路由所有内容,那么所有内容都需要直接连接到路由器,这通常比链路层交换机更昂贵。

此外,可能还有不太常见的非 IP L3 协议仍在使用,以太网在下面运行。但是,我不知道对于大多数用例来说,通过支付看似不必要的 ARP 开销来迎合这些次要情况是否有意义。

最后,我听到“MAC 地址是全局唯一的”这一论点,但我认为它与路由没有太大关系......私有 IP 地址也可以是唯一的,它在移动时发生变化这一事实对于路由的成功并不重要。

使用 MAC 地址进行路由还有其他好处吗?

答案1

可以如果你从头开始设计整个堆栈,确实可以这样做。(例如,这或多或少就是自动取款机‘交换机’起作用了——ATM 是竞争网络技术之一,并且在 L2 和 L3 之间有更紧密的集成。)

但如今,这种改变可能真的不值得因为您提到的协议是“事实上的标准”——现有以太网 LAN 的部署基础非常庞大,考虑到性能的微小提升,进行这样的改变是不可能的。

当 90 年代存在多个相互竞争的链路层协议时,这种分离可能是有意义的。

不,MAC 地址与多个竞争地址更相关网络层协议1 – 它们允许以太网交换机独立于上层协议(IPv4、IPv6、EtherTalk、DECnet、NetWare IPX)完成其工作。

(我认为这里需要注意的是,IP 并不是第一个使用以太网的协议——最初以太网是为施乐的 XNS 和 Pup 协议构建的,直到几年后才被其他各种 LAN 系统采用(其中一些当时比 IP 流行得多)。所以最终,拥有单独的 L2 寻址才是让 IP 能够首先放在以太网上的原因。)

以太网最大的改进之一是从共享总线(每个人都接收所有数据,所有过滤都由主机完成)转变为交换网络(以太网交换机将每个帧仅定向到正确的输出端口)。但要实现这一点,交换机必须真正理解最外层的寻址 - 它们通过查看转发的 L2 报头来构建一种“L2 路由”表。通常这是在硬件中完成的,学习和转发直接嵌入到 ASIC 中。

因此,如果您直接发送没有以太网报头的 IPv4 数据包,您实际上无法使用任何现有的以太网交换机 - 它们会误解 IP 报头(因为它们仍然被硬编码为在特定位置查找 6 字节地址,而 IP 使用 4 字节地址并且位置不同),因此在这种情况下,学习或“愚蠢”转发都无法正常工作。换句话说,要执行此升级,您需要一次性拆除并更换整个网络,而以太网几十年来一直成功地避免了这种情况。

但如果你把它们全部替换成“IPv4 交换机”(实际上可以是自动学习 IPv4 路由器,就像前面提到的 ATM),你就必须替换它们再次才能开始使用 IPv6(就像许多网络运营商必须将旧的仅支持 IPv4 的路由器升级为双栈路由器一样)。因此,以太网 MAC 层抽象出不同网络层协议的方式在今天仍然非常有用——即使现在 IPv6 转换非常困难,但如果必须更换每个交换机(而不仅仅是每个路由器),成本仍将高出 100 倍。

最后,在基于以太网的 LAN 上运行的不仅仅是 IP——大型网络可能有几种根本不基于 IP 的“管理”协议,而是有其专用的 L2 数据包类型。最重要的示例之一是 RSTP(生成树协议),以太网交换机使用它来避免大型网络中的环路;它需要重建为基于 IP,LACP、LLDP、802.1X 等也是如此。(更不用说 IS-IS,它运行在 ISO CLNP 上——“真正的”OSI 协议栈的残余——并且是企业网络中最常见的动态路由协议之一。)


1(同样,网络层协议(IP 等)抽象出了不同的链路层协议。其中还有很多,例如,采用 DOCSIS 的“有线互联网”与以太网不兼容,3G/4G/LTE 连接使用的协议套件也不兼容。


此外,可能还有不太常见的非 IP L3 协议仍在使用,以太网在下面运行。不过,我不知道大多数用例是否应该迎合这些小情况,

这些都不是小事——它们在家庭环境之外非常常见。(实际上,甚至我的家庭 LTE 网关也默认运行 STP……)但是,是的,它仍然有意义,因为它允许相同设备,无需进行任何更改,即可在所有环境中工作 - 您可以使用相同的交换机,相同的打印机,从“大型企业”网络转移到“家庭”网络时无需重新配置PC 2等。

但是 ARP 几乎没有开销——它只是一个请求/回复,然后就没事了。我猜你指的是实际 MAC 报头的开销?那是 1508 个字节中的 8 个字节,这仍然只是 0.5% 的开销。它比 IP 报头的开销小得多(例如,IPv4 为 20 字节,IPv6 为 20 字节)。

因此,通过删除 MAC 层开销,您获得的收益很小,但损失却超过改变的价值。

减少 IP 和以太网报头相对开销的一个更简单的方法是使用更大的镜框,例如~4096 甚至~9000 字节的有效负载(称为“巨型帧”),而不是通常的 1500 字节,这样您就可以获得更高的有效负载:开销比率。如今,以太网硬件广泛支持大型帧,但它们仍然需要重新配置子网内的每个主机,因此它只在存储网络等地方出现。


2(这实际上是 NetWare 的 IPX 所需要的,它有四种不同的 L2 封装选项。除了现代的“以太网 II”格式外,它还可以使用较旧的“802.3 以太网”报头类型,并且也有 3 种不同的变体 - 基本 LLC、LLC+SNAP 和“原始”IPX。)

答案2

使用 MAC 地址进行路由还有其他好处吗?

没有任何使用 MAC 地址进行路由是有充分理由的,因为它不是用于路由!

您目前还不了解路由概念。路由通过 IP 地址在 OSI 第 3 层进行。MAC 地址在 OSI 第 2 层运行。请注意OSI 层1 和 2 在第一层内合并互联网协议套件。严格来说,只要设备位于同一个 LAN 上,就不需要 IP 地址。这意味着在同一 LAN 上的设备之间使用 IP 是“开销”,因为它增加了一个不必要的网络层(因为 LAN 内的路由不是必需的,仅在不同的 LAN 之间才需要)。

因此,您的问题实际上应该是“当通信发生在同一个 LAN 上时,我们为什么需要 IP 地址?” 而答案,用外行的话来说,就是我们希望有一个“地址”来访问计算机,“无论”它位于何处。

我建议你试着“反过来”思考。从小型网络开始,然后逐步建立(只需通过交换机将两个设备相互连接。或者只需将两个设备直接连接,理论上甚至不需要 MAC 地址)。然后你就会明白为什么、如何以及何时需要路由器和路由。

附注:请注意以太网包括 OSI 第 1 层和第 2 层的标准,因此它并不完全适合单个 OSI 层,但它确实“完全”适合互联网协议套件的第一层。

答案3

MAC 地址和 IP 地址均用于唯一定义网络上的设备。NIC 卡的制造商提供 MAC 地址,而 DHCP 服务器(通常)提供 IP 地址。

这两者在协议的不同层上运行:MAC地址在数据链路层上运行,而IP地址在网络层上运行。

换句话说,你可以把 MAC 地址比作你的街道地址,而 IP 地址则是你邮箱上的名字。为了邮件能够送达,需要查阅街道地址,以找出在哪里找到你的邮箱。

为了找到 IP 地址, 地址解析协议 (ARP) 其工作原理类似于电话簿,搜索您的姓名/IP 以找出您的地址/MAC,这是消息需要经过的物理路径。一旦知道了路径,就可以传递消息。

这两种协议都不是多余的——都是消息传递所必需的。

答案4

我已经有一段时间没有研究过这个问题了……

如果我们仍然通过私有 IP 地址进行通信,即使我们在同一个 LAN 上,那么拥有 MAC 地址有什么意义呢?

嗯,这是一个很大的假设。至少从历史角度来看,这非常具有假设性。IP 是 OSI ISO 参考模型第 3 层的各种可能网络协议之一。现在看来非常通用,但并非总是如此。曾经有一种叫做 IPX 的东西,有些人显然一直使用到 Win XP 时代。https://en.wikipedia.org/wiki/IPX/SPX 虽然我从未见过 IPX,而且我是在 Win98 时代上网的。

我们有以太网网络交换机,它们使用 MAC 地址(OSI ISO 上的第 2 级)。

但现在我们来看,假设只有 IP。也许交换机更快。IP 地址是分层的,需要路由。

如果您有大量节点/网络接口,那么路由肯定更好。但是对于较少的数量,非分层算法可能更快,或者如果不是更快,那么更简单。或者构建起来更便宜或诸如此类。

展望未来,假设你从 IPv6 转向更高版本的 IP。网络交换机仍将工作,因为它不适用于 IP。

不过,我的理解是,如今以太网是事实上的链路层协议,但是在同一个以太网上,我们仍然通过私有IP地址进行通信!

我认为当我们谈论以太网时,我们谈论的只是第 3 层以下的层,因此没有 IP 地址。您可以说使用以太网的网络通常也使用 IP。

另外,您说以太网是一种链路层协议。嗯,我更熟悉 OSI ISO 参考模型的术语......它会说以太网是一种数据链路层协议。

选择 TCP/IP 架构而不是 OSI ISO 架构,可能是因为 TCP/IP 架构先于 OSI ISO 架构出现。但我们倾向于使用 OSI ISO 参考模型来指代 TCP/IP 架构。

此外,该私有 IP 地址必须通过 ARP 协议转换为 MAC 地址。链路层和互联网层根本没有“分离”,MAC 地址给该过程带来的唯一东西就是 ARP 开销。

好吧,那么看一下 TCP/IP 参考模型...您有 Internet 层,据我所知,在它下面,有网络访问层,也称为链路层。

我认为 ARP 可以被视为链路层和 Internet 层。或者有人会说介于两者之间。

如果我们不将“数据包”一词作为互联网层术语,而是使用该术语的电信含义并指代整个事物。

然后你会看到你有一个记录和字段。

数据链路层字段,然后是网络层字段,然后是传输层字段。

以及“层”上的协议。

因此第 2 层封装第 3 层,第 3 层封装第 4 层。

使用 ARP,如果我们可以说 ARP 封装任何协议,它会封装第 2 层和第 3 层。(这不是第 2 层封装第 3 层封装第 4 层等的正常规则)。

我发现层的概念没什么用,我认为记录和字段更清楚,也更能说明我们所关注的内容。

我刚刚搜索了 wireshark(一个数据包嗅探器)和 ARP,以检查并显示 ARP 是什么样子的,就哪些协议在哪些协议中而言......整个记录是什么样的

在此处输入图片描述

“层”概念不应该被抛弃,只是它不太适用于 ARP。而且我认为,无论如何,从记录和字段的角度来思考更简单,也涵盖了 ARP。

那么我想问:为什么要这么麻烦?为什么我们不能只使用 IP 地址将数据包传递到同一以太网上的另一台机器?

我能想到的唯一好理由是成本。如果我们只通过私有 IP 地址路由所有内容,那么所有内容都需要直接连接到路由器,这通常比链路层交换机更昂贵。

此外,可能还有不太常见的非 IP L3 协议仍在使用,以太网在下面运行。但是,我不知道对于大多数用例来说,通过支付看似不必要的 ARP 开销来迎合这些次要情况是否有意义。

最后,我听到“MAC 地址是全局唯一的”这一论点,但我认为它与路由没有太大关系......私有 IP 地址也可以是唯一的,它在移动时发生变化这一事实对于路由的成功并不重要。

使用 MAC 地址进行路由还有其他好处吗?

MAC 地址非常好... 事实上非常好,以至于您什么时候需要摆弄 MAC 地址呢?

另外,我提到新版本的 IP 出现的原因。而交换机及其简单的协议仍然适用。

或许,没有任何技术原因导致我们必须拥有 MAC 地址或第 2 层地址。

我认为路由器实际上也使用 MAC 地址来工作,因为如果它们收到一个数据包(通常是因为它需要被路由到其他地方),它们会认为它应该被路由到某个地方,然后它们会写入正确的 MAC 地址。

从理论上来说,也许可以重写路由协议以减少麻烦,并且可以摆脱网络交换机。

顺便说一句,假设人们确实转向了路由器。路由器被重写为不再考虑数据链路层/链路层地址。还要记住,如今大多数路由器都被视为笑话,几乎算不上路由器,例如,它们实际上是带有 2 个“臂”和内置网络交换机的路由器。它们的路由功能非常少。显然,当人们想要做更多类似路由的事情时,他们往往不会使用路由器,而是使用可以执行“VLAN”的设备。我有一段时间没有研究过 VLAN,但 VLAN 被认为是第 2 层。如果我身边有 Wendell Odom 的《网络第一步》一书,我会对 VLAN 说更多!思科仍会生产“真正的路由器”,即不仅仅是两个“臂”和一个内置网络交换机的路由器。

如果 IP 地址在某种程度上是人类可读的,而 MAC 地址的处理速度可能更快,我就不会感到惊讶。不过我怀疑这种速度差异是否会导致整体速度下降,因为我怀疑那里的任何“缓慢”都不会成为瓶颈。

相关内容