先纠正一下几个比较模糊的概念:“MAC地址表储存IP地址”,
MAC地址表是二层设备中存储“MAC地址”和“转发端口”映射关系的表,并不直接存储IP地址。
“路由器根据MAC地址来选择路由进行数据发送”,对于三层设备的三层端口来说,通常是基于报文目的IP地址,对照自身的路由表来选择转发路径,只有二层设备基于“MAC地址”进行数据帧的转发。
这个问题展开了说比较复杂,但是只考虑基本原理似乎也没有那么麻烦,一句话概括就是“二层基于MAC地址转发数据帧,三层基于IP地址转发报文 ”MAC地址”是烧录在网卡或者接口上的物理地址,具有二层意义和全球唯一性,一般不能被改变。IP地址是网络中的主机或者三层接口在网络中的逻辑地址,在同一个网络内具有唯一性。IP地址和MAC地址的关系要分在二层通信和在三层通信两个部分来说明(其实本质上是一样的)二层以下数据帧的交换一般通过交换机或其他二层设备,需要用到主机间的MAC地址,但是通常主机网卡配置的是IP地址,此时就需要借助“ARP协议”将目标主机的IP地址转换为对应主机的MAC地址才能进行通信,完整过程就是主机依靠IP-MAC的对应关系封装数据帧,二层设备在收到含有目标MAC地址的数据帧后,查看自己的“MAC地址表”,便知道这个MAC地址该从自己的哪个端口发送出去。在windows下可以使用arp -a查看这种对应关系,可以在模拟器上轻松展现整个过程。当PC0和PC1能正常通信时,在PC0上查看ARP表如下:可以看出,到目标主机的IP地址映射为对应的MAC地址了,此时PC0就可以将目标主机的IP地址转换为对应的MAC地址封装在数据帧中发给交换机。交换机有那么多端口,它怎么就知道你发送的这个数据帧的目的地址该从自己的哪个端口转发出去呢?因此,交换机自己还要维护一张“MAC地址表”,用来记录目的MAC地址-端口的映射关系,如下图现在交换机看到0004.9a2e,3ad1的MAC,就知道要从F0/2把数据帧发送出去啦O(∩_∩)O二层数据帧的通信基本原理就是这些,当然这两张表是如何生成的就不是这个话题的讨论范围了,具体可以参考ARP协议的工作过程和交换机的转发原理。二层讨论的都是同一个网络内(IP地址在同一网段)数据的交换,“IP地址和MAC地址的关系很明确”:虽然主机都配置了IP,但从上面的例子可以看出,IP地址实际并不起作用,在生成数据帧的时候就转化为MAC地址了,并不参与实际的通信过程。但是如果要通信的主机不在一个网络内,这时IP地址才真正发挥它的作用。IP数据包在三层网络中的寻址通过路由器和各种路由协议来完成,在这个过程中,IP地址和MAC地址又有什么关系呢?看下面的拓扑现在路由器的两端分别为两个网络。数据想要从PC0到PC1,实际上经历了两个过程,先从主机到路由器的F0/0,再从F1/0口到PC1,单独看每个过程,由于在同一个网段内,所以就和上一种情况是一致的,唯一不同的是此时我们必须配置网关。我们仿照刚才的过程看看PC0的ARP表是什么样的可以看出,数据想从PC0到路由器,依然必须经历从IP地址到MAC地址的转换过程,而这个网关的MAC恰好就是F0/0口的MAC,再看交换机1的MAC地址表:恰好也有对应的端口,此时交换机就知道要把数据从F0/24发送出去,到这里起作用的还是MAC地址,那IP地址到底到哪才发挥真正的作用呢?我们继续往下看,现在查看路由器的路由表:路由器收到数据包后会查看数据包的目的IP字段,我们是发送到192.168.1.1这台主机,看路由表发现正好有这个条目,到192.168.1.0/24要从F1/0这个端口发送出去。后面的过程就不再叙述了和前面基本一致了。也就是说,虽然数据包发送时包含了完整的TCP/IP四层信息,但是IP地址只在网络间寻址才起作用,在同一个网络内,IP地址在发送端被转化为MAC地址进行寻址,而这种转化和交换的对应关系,依赖于ARP协议和MAC地址表。对于上面的例子来说,在PC0到路由器的F0/0之间的网络和F1/0到PC1之间网络,都是MAC地址负责寻址,IP地址只在负责连接两个不同网段的路由器上才发挥指导作用。
作者:Windroid
链接:https://www.zhihu.com/question/49335649/answer/115639556
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。