哈工大计算机网络课程局域网详解之:MAC地址与ARP协议
文章目录
- 哈工大计算机网络课程局域网详解之:MAC地址与ARP协议
- MAC地址
- ARP:地址解析协议
- 寻址:从一个LAN路由至另一个LAN
MAC地址
在介绍MAC地址前,首先回顾一下之前在网络层中介绍过的IP地址。
在IP地址中,以IPv4为例,IP地址是32位来表示,作为这样一个地址:
- 是用来标识网络中网路设备的接口的,比如主机的网口,路由器的接口等。
- 用于标识网络层(第三层)分组,支持分组转发。
作为MAC地址和网络层的IP地址有很大差异,MAC地址在现实网络中也往往被称为物理地址、LAN地址、以太网地址等。 需要注意的是,称为物理地址并不代表它是物理层的,而是在数据链路层被使用的。 由于MAC地址常常使用在以太网或者局域网这样的网络中,因此也被称为LAC地址或以太网地址。
MAC地址的作用:
MAC地址作用于数据链路层,用于局域网内标识一个帧从哪个接口发出,到达哪个物理相连的其他接口。
作为现在的网络中,尤其是最常见的一些局域网中,使用的最多的MAC地址形式是48比特MAC地址。一般在网卡出厂时,就会在ROM中固化一个唯一的MAC地址,从而保证每一块网卡拥有的MAC地址是唯一的。有时也可以软件设置和修改,但是修改后仍然需要帮助在所在的局域网内MAC地址是唯一的。
MAC地址的形式比如:1A-2F-BB-76-09-AD,把48位比特分成了6个字节,用16进制来书写。
MAC地址的重要意义,也就在于局域网中的每块网卡都有一个唯一的MAC地址。这样的话,在一个局域网内,构造数据帧时,就可以利用这个唯一的MAC地址来标识这个数据帧从哪里发出,目的地址是哪里。
为了保证每个网卡都拥有的是唯一的MAC地址,显示是需要有一种机制来管理的。具体来说,MAC地址的管理是由国际组织IEEE统一管理与分配。
任何一个网卡生产商需要去IEEE组织购买MAC地址空间(前24比特)。而后24比特则由厂商自行为每个网卡分配地址。
有了这样的机制之后,才可以保证在全球任何一个地点,购买任何一个网卡生产商生产的网卡,其MAC地址一定是唯一的。
为了更好的理解MAC地址,我们与前面介绍过的IP地址做个类比:
- MAC地址:像身份证号。每个人都有一个唯一的身份证号。
- IP地址:邮政地址。邮政地址有一个归属关系或者层次关系,比如省-市-县-街道等构成。
因此,有时也可以将MAC地址理解为一种“平面“地址,所谓“平面”地址,就是标识所有地址空间在一个平面内,在这个平面内,每个地址都有其唯一性,没有所谓的区域划分。所以是可“携带”的,即一块网卡,无论拿到任何地方,原则上都可以确定它的MAC地址是唯一的。
但是IP地址不一样,IP地址是层次地址,是不可“携带”的。因为IP地址是归属某一个网络的,之前我们讲过,IP地址前缀表示子网,剩余位数才表示子网内的主机号。因此,如果单纯把IP地址拿到另一个子网去,实际上是无效的,因为它可能不归属于当前子网。
当然,更重要,也是最基本的差异在于,IP地址是一个网络层地址,而MAC地址是一个数据链路层地址,用作的目的是不同的(IP地址用于标识一个数据报,MAC地址用于标识一个数据帧)。
ARP:地址解析协议
作为IP地址与MAC地址之间的关系,实际上就涉及到一个非常重要的协议把两者关联起来。比如,对于主机的网卡来说,它会有一个唯一的MAC地址,同时,它又是关联到某一个接口的,因此也会有一个网络层的IP地址。
那么如何将两者关联起来呢?也就是说,在同一个局域网(LAN)内,如何在已知目的接口IP地址的前提下,确定其MAC地址呢?
为了解决上面的问题,在现代网络中,通常都采用这样一种做法:
- 每一个主机,包括路由器,都会维护一个ARP表。
- ARP表存储某些LAN结点的IP/MAC地址映射关系。
- 典型的信息比如:<IP地址;MAC地址;TTL>
- TTL(Time to Live):表示经过这个时间之后该映射关系会被遗弃(典型值为20min)。目的是为了更新旧数据,使得有新的映射关系时,能够更新ARP表。
下面给出一个示例性的过程,来便于理解ARP地址解析的工作过程:
-
当局域网中某一结点A想要给同一局域网内的结点B发送IP数据报。此时结点A知道目的主机(结点B)的IP地址,但不知道MAC地址。正常情况下,结点A在将IP数据报封装到数据帧之前,会去检索本地结点(结点A)的ARP表。
假设结点A没有在本地的ARP表中找到结点B的IP地址与MAC地址的映射关系,此时就利用到了ARP协议。
-
此时,结点A就会利用ARP协议,在局域网内,广播ARP协议查询分组。这个查询分组实际上要封装到链路层的数据帧中,广播到其他结点。查询分组中就包含了结点B的IP地址。
在链路层广播分组,比如在以太网,实际上就是将48位目的MAC地址全置为1:FF-FF-FF-FF-FF-FF。
-
数据帧广播出去后,局域网内的所有结点都会收到该ARP查询
-
收到该ARP查询分组之后,只有结点B发现查询的IP地址与自己的IP地址是匹配的,此时,结点B就会向结点A返回响应,应答自己的MAC地址。这个响应也是封装成数据帧进行传输,此时的数据帧传输应该就是单播的形式,只向结点A发送应答。
-
结点A在收到ARP响应之后,会在其ARP表中,缓存结点B的IP地址->MAC地址对的映射关系。
通过上面的过程我们也可以看出来,ARP协议是一个“即插即用”的协议。当一个新的主机接入局域网时,本地的ARP表通常来说都是空的,而ARP表的不断丰富和更新,都是在通信过程中不断完善的。因此,作为ARP协议,在整个运行过程中,是无需网络管理员或者用户进行配置的。
上述示例性过程展示的是在同一个局域网中结点间利用ARP协议获取IP地址->MAC地址的映射关系。如果两个结点不是在同一个局域网内,要如何处理呢?
寻址:从一个LAN路由至另一个LAN
考虑这样的一个网络,A和B所在的两个子网通过路由器R互联。
通信过程:A通过路由器R向B发送数据报,在这一通信过程中我们重点关注寻址方式。这里寻址包括两层:IP地址(数据报中)的寻址过程和MAC地址(数据帧中)的寻址过程。
- 假设结点A已经获取到目的结点B的IP地址。通过应用层域名解析,或者用户指定IP访问的方式,获取目的IP地址。
- 假设结点A也已经知道第一跳路由器R左侧接口的IP地址。通过本机配置的默认网关来获取。
- 假设结点A知道第一跳路由器R左侧接口的MAC地址。通过上面介绍过的ARP协议广播查询分组获取的。
有了上面的假设已知条件后,我们进一步来分析此时跨局域网下的ARP协议请求过程。
结点A构造IP数据报,其中源IP地址是A的IP地址,目的IP地址是结点B的IP地址。
网络层封装好的IP数据报会进一步在数据链路层封装成数据帧来传输。因此结点A根据网络层封装好的IP数据报,构造链路层数据帧,其中源MAC地址是A的MAC地址,目的MAC地址是路由器R左侧接口的MAC地址,携带A到B的IP数据报。
该数据帧发送后,被目的MAC地址的路由器R接收,此时数据帧从结点A传输到路由器R。路由器R左侧接口接收到该数据帧后,完成链路层的相关功能后,如果该数据帧没有问题的话,就会把该数据帧封装的网络层的IP数据报提取出来,交给上层的IP协议进行处理。进一步的,在网络层,路由器R会根据目的IP地址查询路由转发表,从而将该IP数据报转发到下一跳链路上去,图中就是路由器R的右侧接口。
在右侧的接口上,作为路由器,需要进一步的将该IP数据报封装到一个新的数据帧里去。在这个新的数据帧里,源MAC地址是路由器R右侧接口的MAC地址,目的MAC地址是B的MAC地址,用来封装A到B的IP数据报。
该新的数据帧在右侧的局域网中传输之后,就会到达目的主机B。B在链路层收到该数据帧之后,也要完成链路层功能,之后如果发现数据帧没有问题,就会提取出这个数据帧封装的IP数据报,交给上层的IP协议。IP协议完成IP层的功能之后,再把IP数据报封装的传输层数据段Segment提取出来,交给上层传输层。传输层处理完后,再进一步交付给上层应用层,交付给主机B的具体应用进程进行处理。
以上就是当两个不在同个局域网内的主机间需要通信时如何进行寻址的过程。在整个寻址过程中,显然,A不是直接利用ARP协议直接获取B的MAC地址的。而是将每个局域网都当作一个独立的模块,在每个局域网内再根据ARP协议来对MAC地址寻址。
具体来说,其中一个局域网内的源主机通过路由发现它需要通信的目的主机不在同一个子网内,此时根据网络层路由,就会先把该IP数据报封装成数据帧,发给子网对应的默认网关。因此,实际上,在第一阶段源主机所在子网内,是根据ARP协议先获取了默认网关连接到该子网的对应接口的MAC地址。路由器接收到该数据帧后,再根据数据帧中封装的IP地址,确定下一跳转发接口的MAC地址。同时,它也利用ARP协议获取转发接口所在子网的目的结点MAC地址(如果目的结点是最终主机,则是目的主机的MAC地址,如果是路由器,则仍然是路由器对应接口的MAC地址)。进而封装成新的数据帧,发往下一个目的地,依次类推,最终到达目的主机。
经过上述介绍我们也能发现,作为ARP协议,在网络的通信过程中是非常重要的。它构建起了网络层的IP地址和数据链路层的MAC地址的映射关系。