数据链路层

所谓的跨网络通信,本质上就是把多个局域网进行串联的过程。真正在网络中传输的报文,其实都是数据帧


1. 以太网

1.1 认识以太网

"以太网"不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网、无线LAN等。由此可知,局域网通信的标准有多套。

简单的跨网络通信模型如下图所示:

真正的跨网络通信,无论底层是以太网、令牌环网还是无线LAN,在IP层和以上各层来看是没有差别的,底层的差异被数据链路层屏蔽了。


1.2 Mac 帧格式

这里所对应的数据(帧的数据字段),一般就是IP报文。

MAC地址是不能跨网络的 ,MAC地址在路由过程中,在每一跳都会改变(源MAC变成当前发送方的MAC,目的MAC变成下一跳的MAC)。

任何一个报文都离不开回答两个问题:

  1. 接收方如何将报头和有效载荷分离? MAC帧的报头是固定长度的(14字节以太网头 + 4字节尾部CRC),所以分离很简单。
  2. 接收方如何分用? 报文中存在类型字段(Type),表示上层协议的类型(如0x0800表示IP,0x0806表示ARP)

MAC帧有个规定:有效载荷的长度不能超过1500,也不能小于46字节 ,范围是46~1500字节。如果IP报文的长度不足46字节,会通过**填充字段(PAD)**凑够46字节。

正因为有报文填充,IP报头中才有了16位总长度字段。因为IP报文在MAC帧中可能被填充,所以IP报头中的16位总长度字段表明了真正的IP报文有多长,从而区分哪些是填充数据。


1.3 局域网中的通信与碰撞

在以太网中,如果主机A要向主机E发送数据,必须封装成MAC帧 。主机A为什么要给主机E发送数据?这不由MAC帧决定,而是由网络层决定(路由表和用户意图)。

在局域网中发送的消息,其他主机也能收到 ,只是通过判断目的MAC地址来决定是接收还是丢弃。如果某个主机的网卡模式设置成混杂模式 ,它收到报文时不做MAC地址判断,直接向上交付,这就是**抓包(嗅探)**的原理。

数据链路层只保证数据发出不在局域网中发生碰撞,至于对方是否收到不确定,因为没有应答。

在主机A和主机E进行通信时,主机C和主机D也在进行通信,如果大家都向以太网中发送数据,就会发生数据碰撞 。因此,以太网往往也被称为碰撞域

一旦数据发生碰撞,参与通信的主机就要进行碰撞检测和退避 。碰撞检测会让主机延迟一段时间再重发 ,错开时间,这就是一种延迟重发机制

在以太网中,任何时刻只允许一台主机发送数据,以太网相当于一个临界资源。


延申出的两个问题:

数据帧的长度是否影响碰撞概率?

如果数据帧太长,发送碰撞时,重传的代价太大 。MAC帧是利用以太网的空闲时间在通信,因此要保证各主机发送数据帧的时间要错开。帧越短,以太网中的间隙越多 ,发生碰撞的概率越低,通信效率越高。但是数据帧太短,有效数据传输效率就降低了(因为头部开销占比变大)。因此需要在效率和碰撞风险之间寻找平衡

数据帧在网络中是以光电信号传输的,速度非常快,发生碰撞的概率很小。

主机数增多的影响

如果局域网中通信的主机增多碰撞概率增加 。用户感觉不到具体的碰撞,但可以感受到网速变慢。网速就是单位时间内上传和下载的流量。


1.4 交换机

怎么缓解主机数量增大、网速急剧下降的情况?在数据链路层存在一种设备,叫做交换机 。交换机可以将以太网划分成不同的碰撞域

假设交换机将局域网分成左右两部分:

  • 若没有交换机,主机A与主机D通信、主机C与主机E通信,只能一个一个来
  • 若有交换机,主机A与主机D通信在左侧区域,主机C与主机E通信在右侧区域,可以同时进行,互不干扰

交换机的意义划分碰撞域,有效减少数据碰撞问题 。划分后的每个碰撞域都可以独立对外工作,且彼此之间互不干扰,并且可以互相通信(跨区域通信时交换机会转发)。

所以,一般一个大的局域网,会使用交换机划分成一个个小的碰撞域


交换机的原理

交换机刚开始什么都不知道,通过自学习建立MAC地址表:

  1. 主机A给主机E发送数据
  2. 交换机不知道目的主机E在哪,但它知道数据帧是从左侧来的,于是记录:主机A的MAC地址在左侧
  3. 交换机将数据转发到右侧区域(相当于导线)
  4. 主机E收到数据后,返回应答给主机A(目的MAC = macA,源MAC = macE)
  5. 交换机也收到这个应答,记录:主机E的MAC地址在右侧
  6. 经过不断学习,交换机知道了哪些MAC在左边,哪些在右边

后来,主机A要给主机D发送消息(都在左侧),交换机发现通信双方在同一个碰撞域,阻止消息扩散到右侧碰撞域,从而提高了效率。


2. ARP 协议**(地址解析协议)**

2.1 认识 ARP

如下图:

主机B的路由表中记录了下一跳路由器F的IP地址 ,但不知道它的MAC地址;路由器D知道主机C的IP地址,但不知道主机C的MAC地址。

不知道MAC地址,就无法封装MAC帧 。怎么办?在同一个网段中,必须有一项技术,能够将下一跳IP地址转化成下一跳的MAC地址 。这项技术叫做ARP(地址解析协议)

ARP 的相关知识:

ARP协议属于局域网通信协议 ,它属于数据链路层的一种协议(与MAC帧同层),它只工作在数据链路层,不会再向上交付数据

ARP是什么? 能够将IP地址转化成MAC地址的一种技术。

ARP为什么要有? 没有它,就不能将报文交给下一跳,它是局域网通信的支撑技术。


ARP 的工作原理

示例:以太网中存在四台主机A、B、C、D。主机A只知道主机D的IP地址(ipD),想知道主机D的MAC地址。

步骤1:广播ARP请求 :主机A在以太网中广播一个ARP请求:目的MAC地址:FF:FF:FF:FF:FF:FF(广播地址),帧类型:0x0806(表示ARP协议),数据内容:who is ipD?

步骤2:所有主机接收:主机B、C、D都能收到这个广播帧,它们发现目的MAC是广播地址,全部向上交付到ARP层

步骤3:非目标主机丢弃 :主机B、C发现询问的IP不是自己,在ARP层直接丢弃

步骤4:目标主机应答 :主机D发现询问的IP就是自己,返回ARP应答 :目的MAC:macA,源MAC:macD,帧类型:0x0806,数据内容:I am ipD, my MAC is macD。这次不是广播,而是单播通信

步骤5:主机A记录: 主机A收到应答,知道了主机D的MAC地址,并将其存入ARP缓存表

总结ARP的过程就是一个先广播请求,再单播应答的过程


2.2 ARP 数据报格式

ARP报头会整体作为MAC帧的有效载荷部分,所以ARP报头真正的部分是:

ARP报头固定长度为28字节

硬件类型:链路层网络类型,1为以太网

协议类型:要转换的地址类型,0800为IP地址,0806位ARP地址

硬件地址长度:以太网地址长度为6字节

协议地址长度:IP地址长度为4字节

op字段:1表示ARP请求,2表示ARP应答

发送端以太网地址:发起APR请求/应答的mac地址

发送端ip地址:发起APR请求/应答的ip地址

目的以太网地址:接收APR请求/应答的mac地址

目的ip地址:接收APR请求/应答的ip地址


2.3 ARP请求与应答

ARP请求与应答完整流程

以太网中存在五台主机A、B、C、D、E。主机A要向主机E发送数据,但只知道主机E的IP地址(ipE)。

ARP请求阶段:主机A构建ARP请求:op:1,发送端MAC:macA,发送端IP:ipA,目的MAC:FF:FF:FF:FF:FF:FF,目的IP:ipE。封装成MAC帧:目的MAC=广播,源MAC=macA,类型=0x0806。广播发送到以太网。

各主机处理 :主机B、C、D:发现询问的IP不是自己,在ARP层丢弃;主机E:发现询问的IP是自己,准备发送ARP应答

ARP应答阶段:主机E构建ARP应答:op:2,发送端MAC:macE,发送端IP:ipE,目的MAC:macA,目的IP:ipA。封装成MAC帧:目的MAC=macA,源MAC=macE,类型=0x0806。单播发送到以太网

主机A接收 :主机A收到后,提取macE,存入ARP缓存表

知道对方的MAC地址后,就可以封装MAC帧,发送数据了。

任何一台主机都可能接收ARP请求和接收ARP应答,最先关注的都是op字段,因为主机并不确定自己收到的ARP是请求还是应答


2.4 ARP 缓存

ARP工作在每个局域网之间都需要产生。如果每次通信都要广播,网络压力会比较大,效率也会变慢。因此,路由器/主机会缓存ARP映射,缓存也会过期。

使用 arp -a 命令可以查看ARP缓存表:

**为什么ARP缓存要过期?**IP地址和MAC地址都可能会变化(如DHCP重新分配IP),缓存过期机制保证了IP与MAC的映射是最新的

如何获取局域网内所有IP对应的MAC地址? 使用 ping 命令扫描整个网段,触发ARP请求。使用ifconfig指令,查看自己的ip地址,输入指令:cnt=1; while [ cnt -le 255 \]; do ping -c1 "172.31.14.{cnt}"; echo "ping -c1"; let cnt++; sleep 1; done

百分数显示的就是丢包率,若是丢包率为100%,说明主机内并不存在该ip地址。

知道某台主机的MAC地址,想知道它的IP地址,使用的技术是RARP(逆地址解析协议)。它是一个很古老的技术,已经被淘汰。


2.5 ARP欺骗(中间人攻击)

在以太网中,主机A ARP请求主机E,主机E ARP应答主机A。这是正常流程。

攻击场景:主机D构造一个假的ARP应答:声称:ipE对应的MAC地址是macD;或者:ipA对应的MAC地址是macD

ARP缓存的特点:对于同一个IP,只记录最新的MAC地址

后果:

  • 主机A收到假的ARP应答后,会更新ARP缓存,认为主机E的MAC变成了macD
  • 之后主机A发送给主机E的报文,实际上会被主机D收到
  • 主机D可以转发给真正的主机E(让双方感知不到),同时窃听所有通信

如果主机D同时伪造主机A和主机E的ARP映射,就可以成为中间人,实现双向窃听甚至篡改数据。这就是中间人攻击。它可以用来盗取信息,甚至实现定向目标主机断网(比如发送一个错误的网关MAC映射)。

防御手段:静态ARP绑定、ARP防火墙、交换机端口安全等。


相关推荐
Tel199253080042 小时前
ENDAT2.2 协议信号转 SSI /BISS-C转换卡 ENDAT2.2 协议信号转DMC多摩川高速协议转换器 互转卡
c语言·开发语言·网络
云飞云共享云桌面2 小时前
精密机械制造工厂研发部门使用SolidWorks和ug,三维设计云桌面如何选择?
大数据·运维·服务器·网络·数据库·人工智能·制造
小心我捶你啊2 小时前
VPS的主要用途,与其它方式的区别
服务器·网络协议·tcp/ip
网络小白不怕黑2 小时前
1.2 VMware部署Rocky Linux 9 (MBR分区表,图形化安装)
linux·运维·服务器
BizObserver3 小时前
从 SEO 到 GEO:2026 年品牌信息分发逻辑的颠覆性变革
大数据·运维·网络·人工智能·安全
杨航 AI3 小时前
Skills:让 AI 拥有“可插拔能力”的一种工程化方案
网络·人工智能
练习时长一年3 小时前
@NotEmpty注解引发的报错
java·服务器·前端
BizViewStudio4 小时前
甄选 2026:AI 重构新媒体代运营行业的三大核心变革与落地路径——附10家优质服务商
大数据·网络·人工智能·媒体
佳xuan4 小时前
linux运维
linux·运维·服务器