数据链路层-第七节:MAC地址IP地址和ARP协议
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据链路层-第七节:MAC地址IP地址和ARP协议相关的知识,希望对你有一定的参考价值。
文章目录
本节对应视频如下
虽然IP地址和ARP协议属于TCP/IP体系结构中的网际层,但它们与MAC地址存在一定的关系,所以放在一起讨论比较合适
- MAC地址:是以太网的MAC子层所使用的地址
- IP地址:是TCP/IP体系结构网际层所使用的地址
- ARP协议:属于TCP/IP协议的网际层,其作用是通过设备所分配到的IP地址获取MAC地址
一:MAC地址
(1)概述
MAC地址:当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址。在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
- MAC地址有时也被称为物理地址(注意:这并不意味着MAC地址属于网络体系结构中的物理层)
如下图所示,主机C给主机D发送的帧中,在帧首部中的目的地址字段会填入主机D的MAC地址,而在源地址字段会填入主机C自己的MAC地址。这样,总线上其他各主机收到该帧之后,就可以根据帧首部中的目的地址字段的值是否与自己的MAC地址匹配进而选择丢弃或接受该帧
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
(2)IEEE 802局域网的MAC地址
A:地址格式
IEEE 802局域网的MAC地址格式:由48个比特构成,每8个比特为1个字节(从左至右依次为第一、第二、第三、第四、第五和第六字节)
- 组织唯一标识符OUI(前三个字节): 生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI
- 网络接口标识符(后三个字节): 由获得OUI的厂商随意分配
这种地址标识符称之为扩展的唯一标识符EUI,对于48比特的MAC地址,可称为EUI-48
B:地址表示方法
地址表示方法:
- 标准表示法: 每4个比特写成1个十六进制的字符,共12个字符,再将2个字符分为1组,共6组,组与组之间使用短横线连接,也即
XX-XX-XX-XX-XX-XX
,例如00-0C-CF-93-8C-92
(Windows) - 冒号表示法:和标准表示法,只不过使用冒号代替短横线,也即
XX:XX:XX:XX:XX:XX
,例如00:0C:CF:93:8C:92
(Linux、android、Apple)
C:查询MAC地址
查询MAC地址:
- 在 Windows 操作系统上查询 MAC 地址:
- 打开命令提示符
- 输入 “ipconfig /all” 并回车
- 在输出中寻找 “物理地址” 对应的值,该值即为 MAC 地址
- 在Linux操作系统上查询 MAC 地址:
- 打开终端
- 输入 “ifconfig” 并回车
- 在输出中寻找 “HWaddr” 对应的值,该值即为 MAC 地址
- 在Mac操作系统上查询 MAC 地址:
- 打开终端
- 输入 “ifconfig” 并回车
- 在输出中寻找 “ether” 对应的值,该值即为 MAC 地址
查找到地址后,到这个网站可以查找该MAC地址对应的信息
D:MAC地址分类
MAC地址分类:MAC地址第一字节的b0位和b1位的不同取值对应了不同类型的MAC地址
- 第一字节b0位
- 0:单播地址
- 1:多播地址
- 第一字节b1位
- 0:全球管理
- 1:本地管理
**很显然共有四种类型的MAC地址:
- 全球管理的单播地址:在厂商生产网络设备(网卡、交换机、路由器)已固化
- 全球管理的多播地址:标准网络设备所支持的多播地址,用于特定功能
- 本地管理的单播地址:由网络管理员分配,覆盖网络接口的全球管理单播地址
- 本地管理的多播地址:由用户对主机进行软件配置,以表明其属于哪些多播组
需要注意的是,当48个比特全为1时就是广播地址,也即FF-FF-FF-FF-FF-FF
E:地址数量
地址数量:由于MAC地址由48个比特构成,所以总地址数量为 2 48 = 281 , 474 , 976 , 710 , 656 2^48=281,474,976,710,656 248=281,474,976,710,656个,也即二百八十多万亿,四类MAC地址各占总地址空间的 1 4 \\frac14 41
对于使用EUI-48空间的应用程序,IEEE目标寿命为100年,直到2080,但是鼓励采用EUI-64作为替代
F:MAC地址发送顺序
MAC地址发送顺序:
- 字节发送顺序:第一字节 → \\rightarrow →第六字节
- 字节内比特发送顺序: b 0 → b 7 b_0\\rightarrow b_7 b0→b7
G:单播、多播、广播MAC地址举例
单播MAC地址:
-
假设主机B要给主机C发送单播帧,所以先构建单播帧
- 在帧首部中的目的地址字段填入主机C的MAC地址、源地址字段填入自己的MAC地址
- 再加上帧首部中的其他字段、数据载荷以及帧尾部
-
主机B将该单播帧发送出去
-
主机A和C都会收到该单播帧
-
主机A发现该单播帧的目的MAC地址和自己的MAC地址不匹配,于是丢弃该帧
-
主机C发现该单播帧的目的MAC地址和自己的MAC地址相匹配,于是接受该帧
广播MAC地址:基本过程与单播相似
- 主机A和C都会收到该广播帧,发现该帧目的地址字段内容是广播地址,所以接受
多播MAC地址:
- 主机A发送多播帧给多播地址
- 主机B、C、D都会收到该多播帧
- 主机B和C发现该多播帧目的MAC地址在自己的多播组列表中,所以接受该帧
- 主机D发现该多播帧目的MAC地址不在自己的多播组列表中。所以丢弃该帧
二:IP地址
(1)概述
IP地址:是因特网(Internet) 上的主机和路由器所使用的地址,用于标识两部分信息
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:表示同一网络上的不同主机(或路由器各接口)
如下图
- 对于网络N8:给其两台主机各分配了一个IP地址,给路由器R4连接该网络的接口也分配了一个IP地址
- 这个三个IP地址前三个十进制数是相同的,它是网络N8的编号
- 最后一个十进制数各不相同,
- 对于网络N9:给其两台主机各分配了一个IP地址,给路由器R1连接该网络的接口也分配了一个IP地址
- 这个三个IP地址前三个十进制数是相同的,它是网络N9的编号
- 最后一个十进制数各不相同,是网络N9上各主机和路由器接口的编号
很显然, 之前介绍的MAC地址不具备区分不同网络的功能
- 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)
- 如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用
(2)从网络体系结构看IP地址和MAC地址
如下图
- 由于IP地址属于网络体系结构中网络层的范畴,因此在网络层首部应该封装有源IP地址和目的IP地址
- 由于MAC地址属于网络体系结构中数据链路层的范畴,因此在数据链路层首部应该封装有源MAC地址和目的MAC地址
如下图,假设主机H1要给主机H2发送一个数据包,我们从网络体系结构的角度来看看数据包在传输过程中,IP地址和MAC地址变化情况
-
主机
H1
将数据包发送给路由器R1
-
在网络层封装的IP数据报首部中,源IP地址应填写主机
H1
的IP地址IP1
、目的IP地址应填写主机H2
的IP地址IP2
-
在数据链路层封装的帧首部中,源MAC地址应填写主机
H1
的MAC地址MAC1
,目的MAC地址应填写路由器R1
的MAC地址MAC3
-
路由器
R1
将收到的数据包转发给路由器R2
-
在网络层封装的IP数据报首部中,源IP地址仍然填写主机
H1
的IP地址IP1
、目的IP地址仍然填写主机H2
的IP地址IP2
-
在数据链路层封装的帧首部中,源MAC地址应填写路由器
R1
的MAC地址MAC4
,目的MAC地址应填写路由器R2
的MAC地址MAC5
-
路由器
R2
将收到的数据包转发给主机H2
-
在网络层封装的IP数据报首部中,源IP地址仍然填写主机
H1
的IP地址IP1
、目的IP地址仍然填写主机H2
的IP地址IP2
-
在数据链路层封装的帧首部中,源MAC地址应填写路由器
R2
的MAC地址MAC6
,目的MAC地址应填写主机H2
的MAC地址MAC2
通过上面的例子可以看到
- 数据包转发过程中源IP地址和目的IP地址保持不变
- 数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变
三:ARP协议
ARP协议(Address Resolution Protocol):中文名为地址解析协议,其主要功能是获取到IP地址对应的物理地址。每台主机都会有一个ARP高速缓存表(如下图),它记录了IP地址和MAC地址之间的对应关系。其中类型分为
- 动态:自动获取,生命周期默认为2min
- 静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效
如下,使用一个例子来说明ARP协议工作原理
-
主机B要给主机C发送数据包,在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但是没有找到
-
因此主机B需要发送ARP请求报文来获取主机C的MAC地址,其内容如下图
-
ARP请求报文被封装在MAC帧中发送,目的地址为广播地址
-
总线上的其他主机都能收到该广播帧
-
主机A网卡收到该广播帧后交付上层处理,上层ARP进程解析ARP请求报文,发现所询问的IP地址不是自己的IP地址,所以不予理会
-
主机A网卡收到该广播帧后交付上层处理,上层ARP进程解析ARP请求报文,发现所询问的IP地址正是自己的IP地址,所以进行响应
-
主机C将主机B的IP地址与MAC地址记录到自己的ARP告诉缓存表中
-
然后给主机B发送ARP响应报文,告知自己的MAC地址,其内容如下图
-
ARP响应报文被封装在MAC帧中发送,目的地址为单播地址
-
总线上的其他主机都能收到该单播帧
-
主机A的网卡收到该单播帧后,发现其目的MAC地址与自己的MAC地址不匹配,于是丢弃该帧
-
主机B的网卡收到该单播帧后,发现其目的MAC地址与自己的MAC地址相匹配,于是交付上层处理
-
上层的ARP进程解析ARP响应报文,将其所包含的主机C的IP地址与MAC地址记录到自己的ARP高速缓存表中
-
现在,主机B就可以给主机C发送之前想要发送的数据包了
最后特别注意的是,ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用
以上是关于数据链路层-第七节:MAC地址IP地址和ARP协议的主要内容,如果未能解决你的问题,请参考以下文章