本文引证图片均来自 高军: 计算机网络

MAC地址

作用

两台主机之间最简略的通讯方式是运用信道直接相连,彼此之间直接发送数据。可是当主机数量增多,这种两两相连的方式会导致每台主机都衔接数不清的信道,这样的网络是无法运用的,因而就呈现了总线型、星型等网络。

总线型、星型等网络中的主机同享信道,那么主机怎么知道从信道中收到的数据是发送给自己的呢?为了区别不同的主机,这儿就产生了地址的概念。主机发送数据时要带上意图主机的地址,主机从信道上收到数据后先查看数据的意图地址是否和本身地址相同,相同则处理数据不然丢掉

因为这类地址用于媒体接入操控MAC(Media Access Control),因而这类地址被称为MAC地址

同享信道要考虑的一个问题是怎么和谐多个发送和接收站点对一个同享传输媒体的占用,即媒体接入操控

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

MAC地址一般固化在网卡里边,因而MAC地址也称为硬件地址,有时也被称为物理地址(注意MAC属于链路层不是物理层)。因为主机或许具有多张网卡(有线和无线)因而主机会具有多个MAC地址,所以MAC地址是对网络中各网络接口的仅有标识而不是设备的仅有标识

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

格式

本节评论IEEE 802局域网的MAC地址格式,MAC地址一共6个字节

  1. 前三字节:安排仅有标识符,由IEEE的注册办理机构分配
  2. 后三字节:网络接口标识符,由厂商自行分配

下图为华为取得的安排仅有标识符,会被用在华为制造的网卡设备MAC地址的前6个字符上,反过来我们经过MAC地址的前6个字符也可以确定网卡的制造商

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

MAC地址第一个字节的最低两位有特别用途:

  1. 最低位:0表明全球办理(全球仅有),1表明本地办理(本地仅有)
  2. 次低位:0表明单播(单一源到单一地址),1表明多播(单一源到多地址)
计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议
计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

MAC地址各字节在网络上的传输次序遵循以下规则:

  1. 字节:发送次序为第一到第六字节
  2. 字节内比特:发送次序为b0{b_{0}}b1{b_{1}}

实例

单播

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

播送,网络中的主机接收到帧后查看意图地址,发现意图地址是播送地址,所以一切主机都承受该帧

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

组播,主机A发送帧到多播地址07-E0-12-F6-2A-D8,网络中的主机接收到帧后查看本身多播组列表,假如多播地址坐落列表内则承受该帧,不然丢掉

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

至此,MAC地址的介绍就告一段落了。可是,目前为止描绘的只是数据在一个网络内的活动,假如数据要跨网络活动呢?这就需求MAC地址的两个搭档出场了,它们是网络层IP地址ARP协议。因为三者联系密切,所以这儿也做一下简略介绍

IP地址

由来

最早的时分为了避免同网络中的主机两两衔接,主机都衔接到一个叫衔接器的设备中,衔接器只是简略的将收到的数据转发给其他一切主机,其他主机依据数据的MAC地址决议是否承受该数据包。衔接器坐落物理层

衔接器将数据转发给一切主机是低效且不安全的,所以呈现了交换机。交换机内部有MAC表,记载哪个主机接在哪个端口,这样交换机在转发数据的时分只要依据意图MAC地址查表就可以做到精准转发。交换机坐落数据链路层

交换机MAC表最初是空的,当收到数据包时会记载它的源MAC地址端口映射联系,假如意图MAC地址和端口的映射联系没有记载就会先转发给一切主机,然后看哪台主机回应数据包就能记载意图MAC地址和端口的映射联系。跟着主机间的通讯MAC表会逐步完整(记载网络中一切MAC地址端口的映射联系)

假定一个网络中有一台交换机,那么不同网络想要通讯只需将两个网络的交换机衔接起来,这时分只需运用MAC地址即可完成跨网络通讯。可是,此时交换机会将一切其他网络的主机MAC地址也记载进表中,当网络数量或网络中的主机数量过多表就会太大导致交换机无法作业

上述问题的原因是人们不知道所衔接到的交换机代表的网络中有多少主机,所以人们提出了转发的计划——当数据需求跨交换机(网络)时,当前网络的交换机直接将数据转发到相应网络的交换机中由其进行网络内的数据传递。为了处理交换机之间转发数据的问题人们提出了路由的概念,交换机衔接在路由器上,当交换机发现意图MAC地址不在本网络中时就将数据转发给路由器,由路由器转发到相应的交换机中。路由器坐落网络层

路由器需求决议什么样的数据转发给哪个交换机,假如依然运用MAC地址,那么它需求建表记载MAC地址端口(交换机接在路由器端口)的映射联系,这会导致和交换机之间直接相连相同的问题,另外因为MAC地址格式问题,想要做到通配也不容易,所以人们提出了IP地址

IP地址标识两部分信息:

  1. 网络编号:用于标识不同的网络
  2. 主机编号:用于标识同一网络中的不同主机

路由器会树立路由表,运用子网掩码确定IP地址网络号,据网络号查表找到对应的端口(交换机)进行转发。子网掩码的存在使得路由器可以对IP地址进行通配,这样就不用为每一个IP地址记载端口映射联系,而是为一批IP地址记载映射联系

图片来源: 闪客sun

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

每个交换机都会记载默许网关(路由器)的地址,只要经过子网掩码发现数据包意图地址不在本网络就转发给路由器由其进行转发

当然,网络与网络之间会存在多个路由器,各个路由器怎么彼此发现以及路由表怎么树立便是另一个复杂的问题了,这儿不再展开

协作

下图展示MAC地址IP地址协作的例子,主机H1H2坐落不同的网络,网络间经过路由器相连,主机和路由器分别有自己的IP地址MAC地址

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议
1. 主机H1发送的数据分组包括本身的IP地址(IP1)和主机H2的IP地址(IP2),包括本身的MAC地址(MAC1)和路由器
R1的MAC地址(MAC3)
2. 路由器R1收到数据分组后依据意图IP地址(IP2)查表转发,一起将源MAC地址设置为本身端口的MAC地址(MAC4),
将意图MAC地址设置为R2的MAC地址(MAC5)
3. 路由器R2收到数据分组后依据意图IP地址(IP2)查表转发,一起将源MAC地址设置为本身端口的MAC地址(MAC6),
将意图MAC地址设置为H2的MAC地址(MAC2)

可以发现其实跨网络通讯便是一次次的网络内通讯组成的,在数据分组的转发过程中源IP地址意图IP地址不变的,可是MAC地址跟着发送方接收方的改动而改动(或者说跟着网络的改动而改动),这也旁边面验证了IP地址用于跨网络通讯,MAC地址用于同一个网络的通讯

不知道读者有没有考虑过这样一个问题——IP地址能完成跨网络通讯自然也能完成本网络间的通讯,那么为什么还需求MAC地址呢?自己以为这跟网络的开展进程有关,MAC地址早于IP地址,根据MAC设计并完成了大量的算法、协议和硬件设备,想要替代MAC并不是容易的事。另外,IP地址的呈现是为了处理跨网络通讯时路由表过大的问题并不是为了替代MAC,因而设计的时分也没有为替代MAC做过多考虑,因而在以太网网络层的IP和数据链路层的MAC就一直共存着。当然查资料的过程中发现有各式各样的说法,可是自己仍是以为这两者才是主要原因。

ARP协议

ARP(Address Resolution Protocol)协议用于处理知道IP地址不知道MAC地址的问题,比如交换机在配置默许网关时知道路由器的IP地址,可是交换机给路由器转发数据时在数据链路层需求将路由器的MAC地址写进帧首部,此时交换机没有路由器的MAC地址,那么就需求运用ARP协议来获取路由器的MAC地址

网络中每台主机都有ARP高速缓存表,在封装帧时会查表找到意图IP地址对应的MAC地址,假如找不到则在网络中发送播送帧

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

网络中的主机收到帧后查看请求帧中意图IP地址是否为本身IP地址,不是则丢掉帧,是则将播送帧中的源IP地址MAC地址记载进本身ARP表并回来单播呼应帧

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

主机收到呼应帧后将信息记载进本身ARP表即可

ARP表中的记载分为动态记载和静态记载,动态记载就如前文所述是经过播送和呼应获取的,生命周期为2分钟,静态记载便是手动设置的,生命周期不定。

计算机网络 (5) 数据链路层-MAC地址、IP地址及ARP协议

额外提一下,在动态获取记载的时分是或许被进犯的,进犯者只需求假装自己是意图主机并回来构造好的帧就能污染受害者的ARP表,使得数据被错误的发送给进犯者,这便是ARP进犯

参考文献

  • 【1】高军: 计算机网络
  • 【2】知乎: 有了 IP 地址,为什么还要用 MAC 地址?
  • 【3】流水灯: MAC地址的介绍(单播、播送、组播、数据收发)