MAC是唯一身份标识,就像人的身份证,IP地址是一个存在于地图上的地址。我原来在北京上学,我购物的时候邮递地址填北京市海淀区XX小区XX楼XX号,即使快递员不认识我,不知道我的身份证号,也可以送到我家门口。但我现在毕业了,去上海工作了,我又从网上购物,这时候我需要填一个新的地址才行,虽然我不填地址,告诉顺丰我的身份证号也能唯一标识到我,但对顺丰小哥来说,无异于大海捞针。
在分配 ip 地址之前,主机要向 DHCP 服务器请求一个 ip 地址,此时需要一个唯一的地址来进行区分。另外 mac 地址也有分离物理层逻辑和上层逻辑的作用(例如交换机只需要考虑 mac 地址,路由器才需要看 ip 地址)。
因为IP是动态分配的,同一个子网下的所有人的IP前缀相同,可以体现网络的分级结构。类比一下,IP就相当于“北京市西城区西皇城根北街甲2号”,全国骨干网只要记住北京在哪里就可以了,北京的骨干网只要记住西城区在哪里就可以了,以此类推(当然实际上不一定是完全按地域划分,比如可能是北京电信是一个子网,北京联通是一个子网,但是思路都是把下级子网抽象成一个节点)。而MAC则相当于身份证号,如果按MAC路由的话就要记住每个人在哪里。
首先,IP地址是被分配的。不管是DHCP还是设置一个静态的IP,本质上都是被分配的,因为你要匹配你所接入的子网网络。IP是划分子网的,这样才能有效率地路由。
当年设计 IP 地址的目的是什么呢?当年设计出 IP 地址这个东西,就是因为随着网络中的设备逐渐增多,人们发现路由(也就是寻找数据包从发送方到接收方的路径)变得越来越困难了。于是人们想了一个办法,就是把网络划分成很多个子网。这样,在路由的时候,路由器可以把其他子网看成一个整体来进行计算。对于目的地在其他子网的数据包,路由器只需要让数据包到达那个子网即可,而剩下的工作就由子网内部解决了。虽然这种方法只能让寻找到的路径接近最优而不保证最优,不过它大大减少了路由器的计算量,利大于弊,所以被采用了。
那么为什么我们需要 IP 地址呢?因为如果我们只用 MAC 地址的话,我们会发现路由器需要记住每个 MAC 地址所在的子网是哪一个(不然每一次收到数据包的时候路由器都要重新满世界地去找这个 MAC 地址的位置)。而世界上有2^48个 MAC 地址,这就意味着即使我们给每个 MAC 地址只留 1 字节的储存空间,每个路由器也需要 256 TB 的内存!这显然是不可能实现的。
这就是我们需要 IP 地址的原因了。和 MAC 不同的是,IP 地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的 IP 地址前缀都是一样的。这个前缀就像邮政编码一样。这样,路由器通过 IP 地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。
既然 IP 地址不能去掉,那么能不能去掉 MAC 地址呢?也不能。因为 IP 地址是要设备上线以后,才能根据他进入了哪个子网来分配的,在设备还没有 IP 地址的时候(或者分配 IP 地址的过程中),我们还需要用 MAC 地址来区分不同的设备。
总之,MAC 地址就像自己的 ID 号,而 IP 地址就像带着邮政编码的住址,各有各的用途。所以我们需要两个地址,缺一不可。
转自知乎楼宇,原文地址:https://www.zhihu.com/question/21546408/answer/53576595
评论 null 条