![当 IP 地址已经唯一时,为什么需要发送 ARP 来询问 MAC 地址?](https://linux22.com/image/567561/%E5%BD%93%20IP%20%E5%9C%B0%E5%9D%80%E5%B7%B2%E7%BB%8F%E5%94%AF%E4%B8%80%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81%E5%8F%91%E9%80%81%20ARP%20%E6%9D%A5%E8%AF%A2%E9%97%AE%20MAC%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
在通常的网络中,既然每个主机都有一个在网络中的站点之间公认的唯一的IP地址,那为什么还需要MAC地址呢?
假设 A 站要向 B 站发送数据。A 站知道 B 站的 IP 地址。但 A 站发送前仍会发出 ARP 请求 B 站的 MAC 地址。获得 B 站的 MAC 地址后,A 站会以 B 站的 MAC 地址作为目标地址发送数据。
为什么 B 不能像响应 A 发出的 ARP 一样直接接受数据包?这样,站点 A 就不必发送 ARP 来询问 MAC 地址,这也就消除了拥有 MAC 地址的必要性。此外,IP 地址在网络站点之间是唯一的,为什么需要另一个 MAC 地址来识别站点?
答案1
因为您需要在网卡中内置一个唯一标识符,以便在没有 IP 地址的情况下识别站点。或者,当没有想要获取 IP 地址的站点的标识时,系统应如何使用 DHCP 获取有效的 IP 地址?
由于 IP 不是可以通过以太网发送的唯一协议,因此以太网本身必须提供唯一的标识符以允许不同的协议。
答案2
首先,我赞同 Dan 的回答;对这个问题进行适当的研究比提出每个问题都只能照亮黑暗的问题要好得多。我建议Steven 的 TCP/IP 图解,这是一本网络圣经;我的第 1 卷书脊已经因为过度使用而破损。但既然你问了这个问题,而当 Dan 的答案出现时我已经打了一半的答案,那么让我戴上我的老管理员帽子,按“无论如何都要发帖”。
部分原因是历史原因。MAC 地址是第 2 层地址,而 IP 地址是第 3 层地址(例如,这个维基百科页面了解有关图层的更多详细信息)。
为什么要分开呢?因为当以太网发明时,IP 并不是唯一可以在以太网上承载的网络技术。我自己在 80 年代中期广泛使用了在以太网上运行的 DECnet,而它没有 IP 地址。此外,完全有可能在没有 MAC 地址的非以太网网络技术上运行 IP;我想到的是令牌环网络,还有 SLIP。
如果以太网和 IP 按照您的建议焊接在一起,上述两件事都不可能实现。是的,回想起来,IP 显然是互联网领域的巨大胜利,但在 1981 年,这一点并不那么明显,当时将两层分离绝对是正确之举。
答案3
xENOn,这是我过去多次问过自己的问题。事实上,这有点武断,因为正如 MadHatter 所提到的,有些 IP 网络类型不需要物理地址就可以很好地运行。也就是说,理论上不需要额外的地址类型。但是,当 IP 地址自动分配时,例如通过 DHCP,MAC 地址就派上用场了,因为 DHCP 服务器需要清楚地知道哪个主机接收了哪个 IP,或者没有单个主机被授予未经请求的额外 IP 地址。如果没有 MAC 地址,您需要手动设置每个主机的 IP 地址,也就是说,当您有大量主机时,这不太实用,对 IT 管理员来说简直是一场噩梦。当涉及到以太网本地链路时,您没有太多选择,因为以太网子系统只识别以太网帧,也就是说,每个以太网接口电路都会过滤掉所有不带有自己的或广播/多播 MAC 地址作为目标地址的以太网帧。只有那些通过这种前端过滤的帧才会真正将其 IP 负载传送到 IP 层。希望它能帮助您解开这个谜团。