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


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

文章插图
ARP 协议过程,来源:https://www.hackers-arise.com/post/network-basics-for-hackers-address-resolution-protocol-or-arp
如果目标电脑在另一个网络,这个时候发送方就会在自己的网络里广播说谁的IP是192.168.1.1(我们假设它的默认网关IP是192.168.1.1),网关就会回复自己的MAC 。然后,发送方就会通过网关的MAC地址给网关发一条IP报文,报文的目标IP就是接收方的IP地址,来源IP自然是发送方的IP地址 。
原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图

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

文章插图
IP 路由,来源:https://networklessons.com/cisco/ccna-routing-switching-icnd1-100-105/ip-routing-explained
以上图为例,假如H1想给H2发数据 。H1知道H2跟自己不在一个网络,所以它通过ARP查到R1的 Gi0/1 网卡的 MAC 地址,给 fa16.ee3f.fd3c 这个 mac 地址发送了一个 IP 报文,这个报文的目标IP是H2的IP地址,也就是 192.168.2.2,原IP地址是H1的IP,也就是192.168.1.1 。R1收到这个报文后发现目标地址是192.168.2.2,需要通过 Gi0/2 网卡转发给路由器 R2(因为R1保存了 H2 所在网络的前缀) 。R2 会重复同样的过程,最终IP报文被转发给H2 。整个过程,H1和R1都不需要知道H2的MAC地址,但所有节点必须知道相临节点的MAC地址(也叫下一跳) 。所以说,到现在为止,哪怕是引入了IP层,实际通信还是依赖MAC地址 。在IP网络中,如果目标在同一网络,则通过广播通信;否则,通过网关转发 。因为有广播的存在,所以网速还是会受到影响 。这时局域网也叫冲突域:
原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图
每个局域网都是冲突域,来源:https://geek-university.com/ccna/broadcast-domain-explained/
大家不要误会 。因为IP网络引入了路由器,所以跟原来的总线网络相比,冲突域变小了,广播减少了,网速提高了 。但人民群众的要求也提高了,网速必须更快!于是,人们又发明了交换机 。交换机是一种局域网设备,功能跟前面说的网桥类似 。
原作写的真好,转载记录了  有了 IP 地址,为什么还要用 MAC 地址?

文章插图
交换机,来源:https://geek-university.com/ccna/what-is-a-network-switch/
但是,交换交换机可以进一步减少广播的数量 。以上图为例 。如果A想给C发送数据,它会先通过ARP广播查询C的MAC地址 。这一步是免不了的 。但是,这一步也会被交换机监听/学习到,所以交换机会将C连接的网口跟C的MAC地址绑定到一起,等A给C发数据的时候,交换机只会给C发数据 。这个时候B和D都收不到数据 。不但收不到,B和D还可以在A与C通信期间进行通信,这就进一步提高了网络的利用效率 。因为有了交换机,所以原来的总线拓朴在一定程度上变成了星形拓朴 。又因为交换机可以隔离不同设备间的通信,所以总线网络一定程度上又变成了点对点网络 。那我们能不能最终去掉MAC地址,而只保留IP地址呢?理论上是可行的 。交换机既然可以学习MAC地址,那就一定可以学习IP地址 。这样,每个网口所连电脑的IP映射关系也就知道了 。电脑A如果想给C发数据,可以不查C的MAC地址,而是直接给交换机发一个IP报文(注意,这次没有MAC帧) 。交换机收到后直接转发给电脑C 。整个过程就仿佛回到了最开始的点对点链接路 。是不是有点历史轮回的感觉呢?现在没有去掉MAC地址,可能是因为以太网设备已经遍布全球,也足够便宜,已经没有必要再优化了 。但从原理上看,MAC地址确实可以去掉 。虽然没有消灭MAC地址,但IPv6引入了所谓的 link local,这种地址以 FE80 开头,只在当前链路有效 。什么意思,你可以给同一设备的不同网卡设置相同的 link local。比如你有一个路由器,所有的网卡都设成 FE80::1,那可以把连接这个路由器的所有网络的主机的下一跳地址都设成 FE80::1,而不论主机所在的实际网段是什么 。这在管理上比较方便 。之前 IPv4 时代只能不同网卡设不同地址,分开配置,比较麻烦 。