我是计算机网络方面的新手。我了解网络协议分层的好处以及“链路层和 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 地址的处理速度可能更快,我就不会感到惊讶。不过我怀疑这种速度差异是否会导致整体速度下降,因为我怀疑那里的任何“缓慢”都不会成为瓶颈。