原作写的真好,转载记录了 有了 IP 地址,为什么还要用 MAC 地址?( 二 )


原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图

原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图
ARCNET 网卡的拨动开关,来源:https://en.wikipedia.org/wiki/ARCNET
以太网则规定在网卡出厂的时候就得分配 48 位 MAC 地址,全球唯一 。随着总线网络的普及,越来越多的大公司或组织(主要是大学)开始使用网络连接它们的设备 。为了方便传输数据,人们还发明了网桥 。可以把网桥想象成装有多个网卡的设备,每个网卡连接一个总线网络 。网桥唯一的作用就是把从一个网卡收到的内容原样转发到另一张网卡所在的网络 。
【原作写的真好,转载记录了有了 IP 地址,为什么还要用 MAC 地址?】
原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图
网桥,来源:https://www.easytechjunkie.com/what-is-a-network-bridge.htm
这样网络的规模越来越大,连网的设备越来越多,通信冲突的频率也越来越高 。最终的结果就是数据传输的速度越来越低(因为只要有一人在发数据,其他所有人都得等待) 。但就这样,人们对互联互通的要求还没有被满足 。除了公司或者组织内部的网络,人们还想把不同城市的设备和网络都连起来,这就需要用到长途电话线 。我们前面说过网桥是一种无脑转发设备 。它的无脑不仅体现在不关心数据内容方面,还体现在尽自己最大能力转发 。如果是相同局域网,两边的网速相近,那不会有什么问题 。但如果一边是局域网,一边是长途电话线,那来自局域网的广播数据会把电话线挤爆,大家谁也别想玩 。事情发展到这步田地,就需要人们(另一拨人)坐下来开会讨论了 。最终,想了一个办法,就是让网桥变的智能一点 。让它可以「学习」不同网络所有设备的MAC地址 。当有数据需要转发的时候,它可以根据目标地址判断应该转发到哪个网卡,从而减少广播的数量 。但是,因为以太网的MAC是在出厂的时候指定的,所以没有一个简单的办法确定某个总线网络中的所有MAC地址,只能通过广播来学习,也只能在网桥设备保存全部的MAC地址,而且还要及时更新 。除此之外,网桥本身只转发,理论上也不需要MAC地址 。所以网络内的计算机不知道数据是经过几个网桥转发的,也不知道是在哪个环节出了问题 。最终,另一拨人(IETF)想出了再加一层的方案,也就是在以太网上引入了网络层(也就是IP层) 。注意,网络层是IETF这拨人鼓捣出来的,以太网是IEEE那拨人鼓捣出来的 。IETF这拨人决定给每一台网络设备加一个逻辑地址,也就是IP地址,而且觉得32位差不多够用了,甚至都没考虑 MAC 地址是48位 。引了IP协议层,前面说的网络问题基本得到解决 。首先,每一台设备都有一个IP地址 。通信双方使用IP地址进行通信 。IP地址是管理员按需指定的,可以根据前缀聚合 。所以原来的网桥(现在变成了路由器)不需要保存网络中的所有MAC地址,只要保存网络前缀就能进行转发 。
原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图
一种IP网络拓朴,来源:https://oswalt.dev/2011/07/the-anatomy-of-show-ip-route/
但问题来了,网络层工作在链路层之上 。要想通信,还得需要MAC地址 。怎样才能得到目标的MAC地址呢?这就需要用到ARP协议 。每当电脑在通信之前会先在网络上发一个广播(这个广播不会被转发到其他网络),问谁的IP地址是某某某 。这个时候对应的电脑就会回包说是我,我的MAC地址是某某某 。发送方就拿到了接收方的MAC地址,进而完成通信 。