有了 MAC 地址,为什么还需要 IP 地址 ?

计算机网络诞生之初,只是一个个小的局域网,还没有形成如今的互联网;

局域网内的计算机之间通信,需要对每个计算机进行唯一标识,所以就诞生了 MAC 地址。

随着计算机网络的发展,局域网之间开始互联互通,产生了计算机跨网络通信的需求;

试想,假设局域网 A 内的主机 A1 想要发送数据包给局域网 B 内的主机 B1

若 A1 只知道 B1 的 MAC 地址,显然 A1 无法知道应该将数据包发往哪个网络

即:MAC 地址并不具备标识网络的作用

所以,能够标识网络的 IP 地址诞生


既然 IP 地址的定位是标识网络,那么为什么要把 IP 地址设计成既能标识网络,又能标识主机 ?

举个例子,假设局域网 A 内的主机 A1 想要发送数据包给局域网 B 内的主机 B1

假设A1 只知道 B1 的 IP 地址

如果 IP 地址只能标识网络,那么 A1 就只能将数据包发往目的网络,然后数据包就不知该何去何从了

所以 IP 地址既要能标识网络,又要能标识主机


既然有了 IP 地址,为什么还要有 MAC 地址 ?或者说只靠 IP 地址进行互联网通信行不行 ?

参考了:http://liupj.top/2022/04/04/ether-net/

如果没有 MAC 地址,而是使用网络层协议进行通信,理论上来说是可以的,但是不好

因为在以太网诞生之初,IP 还没有垄断网络层协议(那时还有Novell网的IPX/SPX协议、DEC公司开发的CLNP网络协议,以及Apple公司开发的Apple Talk协议)

如果没有 MAC 地址,势必需要网卡解读网络层协议帧头的地址信息,而不同网络层协议帧头的地址都大相径庭,这就增加了以太网卡的实现复杂度。

如果网卡有了 MAC 地址,就可以不依赖于任何网络层协议,独立判断一个帧是否接收(依据 MAC 地址匹配),这就大大简化了网卡的实现。

即使以后出现更多的网络层协议,网卡也无需太多的改变,这就是网络分层的精髓

一层的内部实现无需知晓其上层、或下层


其实,《计算机网络自顶向下方法》对该问题有明确的回答

英文原版
20230130194206

中译版
20230130194400


综上所述,MAC 和 IP 缺一不可。

从 IP 到 MAC 的转换,使用 ARP 协议。


补充知识:

主机的 IP 地址是可以动态变化的,而 MAC 地址是写死的,一般不能变(当然也有随机 MAC 的手段