前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >即生瑜,何生亮 — MAC 地址与 IP 地址

即生瑜,何生亮 — MAC 地址与 IP 地址

作者头像
周三不加班
发布2019-07-05 17:40:20
1.3K0
发布2019-07-05 17:40:20
举报
文章被收录于专栏:程序猿杂货铺程序猿杂货铺

阅读本文大概需要 6 分钟

原文 | http://sina.lt/gpqN

在教计算机网络课程中,经常会碰到这样的问题,为什么需要两个地址:一个是MAC(物理地址),另一个是IP地址。各种解释都有,基本上一个观点就是一个是物理地址,一个是逻辑地址。然而,这样的解释太抽象,什么是物理,什么是逻辑。这些抽象的表述会让人无法理解到其本质。下面我就谈谈这个问题。

要想说明这个问题,首先得说说计算机网络的目标是什么。计算机网络的根本目标就是将数据从一点传送到另外一点。听起来很简单,但是里面包含的意思很多。例如,两个点之间是在同一个网络还是跨网络连接的,如何才能将数据正确的传送到对方,如果出现错误怎么办等等。

为了说明问题的本质,我们首先将问题简化:假设两点在一个网络内。在这种情况下,只需要MAC地址就可以了。例如通过交换机将多台电脑组成一个网络,为了找到对方,必须通过一个地址来标识。就像寄快递一样,如果没有地址,快递员是无法将快递送到对方的所在地的。这就是我们所说的MAC地址。当A点要将数据传递给B点时,会在数据的首部添加B的MAC地址,即目标地址。当然在首部中也有源地址,即发送方的MAC地址,还有其它一些信息,例如用于校验的等等。组装好的这个数据称为帧。然后A点就将帧通过网卡发送出去。

此时交换机收到这个帧后,查找自己的转发表。转发表主要有两列,一列是MAC地址,另外一列是该MAC地址对应的端口。查找的结果只有两种情况:找到或没找到。如果找到就将数据从该MAC对应的端口转发出去。如果没找到,很简单,交换机会把帧向所有端口广播(除了该帧进入的端口),因此肯定会有一个合适的端口收到的。这个广播的方法很粗暴,也很奏效。

这就是MAC地址的作用。MAC地址是刻录在网卡这个物理设备上的,一般是无法改变的。

然而,如果两点不在一个网络内。这时就需要IP地址了。因为IP地址含有两个部分,一个是网络地址,一个是主机地址。因此,通过对方的IP地址,是可以判断出对方是否和本机在一个网络内。如果在一个网络内,如上所述,只需要知道对方的MAC地址即可通信。

如果不在一个网络内,本机的网络层就认为数据应该发送给网关。道理是显然的,如果不在一个网络内,首先得把数据发送出网络才可以。如何发出网络,当然是发给网关,因为网关就相当于网络的门卫。要想把数据发给网关,同样需要知道网关的MAC地址,如何知道网关的MAC地址呢?这就涉及到ARP协议。

电脑缓存里有一张ARP表,该表主要有两列:一列是IP地址,另外一列是MAC地址。这张表不是天生就有的,是随着网卡收到网络中的各种通信数据,不断学习增加的。

话说回来,如果ARP表中有网关IP地址对应的MAC地址,则问题就转化为网内数据发送,上面已经讲的很清楚了。如果ARP表中没有网关IP地址对应的MAC地址,则启动ARP协议,即向网内广播,询问该IP地址的MAC地址。广播询问的结果是网关收到广播后,发现是问自己的MAC地址,所以就回复询问方自己的MAC地址。然后数据发给网关的问题,也转化为网内数据发送,上面已经讲的很清楚了。

大家发现没有,在跨网通信时是需要IP地址的。因为需要通过IP地址来判断是网内通信还是网外通信。有人可能会说,让MAC地址也具有能够区分网络的特征不就可以不需要IP了么。事实上这样做是不实际的。每个网卡出厂时就有一个独一无二的MAC地址,出场时是不可能知道你用它时是在哪一个网络里,也就是天生它就不具有能够区分网络的特性。而且也不需要它具有这种特性。因为MAC只负责设备到设备的通信就够了。这层通信是真正的通信,所以称为物理通信。

而跨网络传输数据时,需要考虑传输的路径,即为了到达目的地,下一跳应该去哪儿,从而一跳一跳的传输到目的地。而网内传输,不需要考虑传输路径,只要发出去一定可以到达。最坏情况下就是通过广播传输也能到达。而跨网络传输时,这一招不灵了。因此,跨网传输时需要考虑网络之间的传输,需要使用能够表示网络特征的地址,即IP地址。所以IP地址是负责网络到网络传输的。

至于发给网关后,下一步发给谁,本机就管不着了。本机只能保证在网络内传输,即下一跳的概念。下下一跳,只能由网关来负责了。其实网关就是路由器的一个接口。网关通过IP地址来确定路由,通过查找路由表来确定下一跳应该去往哪个网络,然后就将数据从连接那个网络的路由器的接口发送出去。发送出去同样要判断目标IP是和当前路由接口的网络是否同一网络。问题又回到上面讲的过程了,所以周而复始。

可见IP地址和MAC地址的概念并不矛盾。他们之间是不同层次的,就像有了领导还必须有群众才可以,谁也离不开谁。数据从一点传到另外一点,要经过几个网络,网络路线是怎样的,需要使用IP地址来解决。而网内传输需要使用MAC地址来传输。可见没有网内真正的通信传输,何以实现网络之间的通信。而如果没有网络路由的路径的话,数据是不可能到达目的地的,因为方向都没有。

如果再往深里挖掘,地址的概念还可以包括网址。就像百度的网址,我们为什么有了IP还需要网址呢?这超过了我们的题目范围,下次再说。

本文来自陈智罡科学网博客,链接地址: http://blog.sciencenet.cn/blog-411071-1037673.html 陈智罡科学网博客

推荐阅读

分布式缓存 --- Redis 如何提高缓存命中率

缓存更新的套路

一次惊心动魄的服务器误删文件恢复过程

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员啊粥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档