本文引证图片均来自 高军: 计算机网络
MAC地址
作用
两台主机之间最简略
的通讯方式是运用信道直接相连
,彼此之间直接发送数据。可是当主机数量增多,这种两两相连的方式会导致每台主机都衔接数不清的信道,这样的网络是无法运用的,因而就呈现了总线型、星型等网络。
总线型、星型等网络中的主机同享信道
,那么主机怎么知道从信道中收到的数据是发送给自己的呢?为了区别不同的主机,这儿就产生了地址
的概念。主机发送数据时要带上意图主机
的地址,主机从信道上收到数据后先查看数据的意图地址是否和本身地址相同,相同则处理数据不然丢掉
因为这类地址用于媒体接入操控MAC(Media Access Control)
,因而这类地址被称为MAC地址
同享信道要考虑的一个问题是怎么和谐多个发送和接收站点对一个同享传输媒体的占用,即媒体接入操控
MAC地址
一般固化在网卡
里边,因而MAC地址
也称为硬件地址
,有时也被称为物理地址
(注意MAC
属于链路层不是物理层)。因为主机或许具有多张
网卡(有线和无线)因而主机会具有多个MAC地址
,所以MAC地址
是对网络中各网络接口
的仅有标识而不是设备的仅有标识
格式
本节评论IEEE 802
局域网的MAC地址
格式,MAC地址
一共6个字节
- 前三字节:安排仅有标识符,由IEEE的注册办理机构分配
- 后三字节:网络接口标识符,由厂商自行分配
下图为华为取得的安排仅有标识符,会被用在华为制造的网卡设备MAC地址
的前6
个字符上,反过来我们经过MAC地址
的前6
个字符也可以确定网卡的制造商
MAC地址第一个
字节的最低两位
有特别用途:
- 最低位:0表明全球办理(全球仅有),1表明本地办理(本地仅有)
- 次低位:0表明单播(单一源到单一地址),1表明多播(单一源到多地址)
MAC地址各字节在网络上的传输次序
遵循以下规则:
- 字节:发送次序为第一到第六字节
- 字节内比特:发送次序为b0{b_{0}}到b1{b_{1}}
实例
单播
播送,网络中的主机接收到帧后查看意图地址,发现意图地址是播送地址
,所以一切主机都承受该帧
组播,主机A发送帧到多播地址07-E0-12-F6-2A-D8
,网络中的主机接收到帧后查看本身多播组列表
,假如多播地址坐落列表内则承受该帧,不然丢掉
至此,MAC地址
的介绍就告一段落了。可是,目前为止描绘的只是数据在一个网络内的活动,假如数据要跨网络活动呢?这就需求MAC地址
的两个搭档出场了,它们是网络层
的IP地址
和ARP协议
。因为三者联系密切,所以这儿也做一下简略介绍
IP地址
由来
最早的时分为了避免同网络中的主机两两衔接,主机都衔接到一个叫衔接器
的设备中,衔接器只是简略的将收到的数据转发给其他一切
主机,其他主机依据数据的MAC地址
决议是否承受该数据包。衔接器坐落物理层
衔接器将数据转发给一切主机是低效且不安全
的,所以呈现了交换机
。交换机内部有MAC表
,记载哪个主机接在哪个端口
,这样交换机在转发数据的时分只要依据意图MAC地址
查表就可以做到精准转发。交换机坐落数据链路层
交换机MAC表
最初是空的,当收到数据包时会记载它的源MAC地址
和端口
映射联系,假如意图MAC地址
和端口的映射联系没有记载就会先转发给一切
主机,然后看哪台主机回应数据包
就能记载意图MAC地址
和端口的映射联系。跟着主机间的通讯MAC表
会逐步完整(记载网络中一切MAC地址
和端口
的映射联系)
假定一个网络中有一台交换机,那么不同网络想要通讯只需将两个网络的交换机衔接起来,这时分只需运用MAC地址
即可完成跨网络通讯。可是,此时交换机会将一切其他网络的主机MAC地址
也记载进表中,当网络数量
或网络中的主机数量
过多表就会太大导致交换机无法作业
上述问题的原因是人们不知道所衔接到的交换机代表的网络中有多少主机,所以人们提出了转发
的计划——当数据需求跨交换机(网络)
时,当前网络的交换机直接将数据转发到相应网络的交换机中由其进行网络内的数据传递。为了处理交换机之间转发数据的问题人们提出了路由器
的概念,交换机衔接
在路由器上,当交换机发现意图MAC地址
不在本网络中时就将数据转发给路由器,由路由器转发到相应的交换机中。路由器坐落网络层
路由器需求决议什么样的数据转发给哪个交换机,假如依然运用MAC地址
,那么它需求建表记载MAC地址
和端口
(交换机接在路由器端口)的映射联系,这会导致和交换机之间直接相连相同的问题,另外因为MAC地址
的格式
问题,想要做到通配
也不容易,所以人们提出了IP地址
IP地址标识两部分信息:
- 网络编号:用于标识不同的网络
- 主机编号:用于标识同一网络中的不同主机
路由器会树立路由表
,运用子网掩码
确定IP地址
的网络号
,据网络号查表
找到对应的端口(交换机)
进行转发。子网掩码的存在使得路由器可以对IP地址
进行通配
,这样就不用为每一个IP地址
记载端口映射联系,而是为一批IP地址
记载映射联系
图片来源: 闪客sun
每个交换机都会记载默许网关(路由器)
的地址,只要经过子网掩码发现数据包意图地址不在本网络就转发给路由器由其进行转发
当然,网络与网络之间会存在多个路由器,各个路由器怎么彼此发现以及路由表怎么树立便是另一个复杂的问题了,这儿不再展开
协作
下图展示MAC地址
和IP地址
协作的例子,主机H1
和H2
坐落不同的网络,网络间经过路由器相连,主机和路由器分别有自己的IP地址
和MAC地址
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地址
,假如找不到则在网络中发送播送帧
网络中的主机收到帧后查看请求帧中意图IP地址
是否为本身IP地址
,不是则丢掉帧,是则将播送帧中的源IP地址
和MAC地址
记载进本身ARP表
并回来单播呼应帧
主机收到呼应帧后将信息记载进本身ARP表
即可
ARP表中的记载分为动态
记载和静态
记载,动态记载就如前文所述是经过播送和呼应获取的,生命周期为2
分钟,静态记载便是手动
设置的,生命周期不定。
额外提一下,在动态获取记载的时分是或许被进犯
的,进犯者只需求假装
自己是意图主机并回来构造好的帧就能污染
受害者的ARP表
,使得数据被错误的发送给进犯者,这便是ARP进犯
参考文献
- 【1】高军: 计算机网络
- 【2】知乎: 有了 IP 地址,为什么还要用 MAC 地址?
- 【3】流水灯: MAC地址的介绍(单播、播送、组播、数据收发)