分享一道计算机网络的经典面试题(关于为什么网络层地址和 MAC 地址共存)
有了 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 地址进行互联网通信行不行 ?
如果没有 MAC 地址,而是使用网络层协议进行通信,理论上来说是可以的,但是不好
因为在以太网诞生之初,IP 还没有垄断网络层协议(那时还有Novell网的IPX/SPX协议、DEC公司开发的CLNP网络协议,以及Apple公司开发的Apple Talk协议)
如果没有 MAC 地址,势必需要网卡解读网络层协议帧头的地址信息,而不同网络层协议帧头的地址都大相径庭,这就增加了以太网卡的实现复杂度。
如果网卡有了 MAC 地址,就可以不依赖于任何网络层协议,独立判断一个帧是否接收(依据 MAC 地址匹配),这就大大简化了网卡的实现。
即使以后出现更多的网络层协议,网卡也无需太多的改变,这就是网络分层的精髓
一层的内部实现无需知晓其上层、或下层
其实,《计算机网络自顶向下方法》对该问题有明确的回答
英文原版
中译版
综上所述,MAC 和 IP 缺一不可。
从 IP 到 MAC 的转换,使用 ARP 协议。
补充知识:
主机的 IP 地址是可以动态变化的,而 MAC 地址是写死的,一般不能变(当然也有随机 MAC 的手段)