数据链路层

发布于:2025-07-22 ⋅ 阅读:(16) ⋅ 点赞:(0)

1.以太网

以太网=数据链路层+物理层协议

1.1.以太网数据帧格式

• 源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的;

• 帧协议类型字段有三种值,分别对应IP、ARP、RARP;

• 帧末尾是CRC校验码。

数据帧为什么要有上限和下限?

前提:局域网就是、个碰撞域,一个时刻,只能发送一个数据帧。

所以使用以太网的时候,使用时间越长越好,还是越短越好?  短


所以,主机A发送数据帧,越长越好,还是越短越好?       短


数据帧越多越好,还是越少越好?越少        少

数据帧不能太长,数据帧也不能太多,单个数据帧,既不能太长,也不能太短!,数据帧要有上限,和下限!

MAC地址与IP地址的区别

举个例子:

我要从广东出发去安徽

先进行路线规划(网络层)

广州-长沙-武汉-合肥

1.广州-长沙

目的IP:广州

源IP:合肥

目的MAC:广州

源MAC:长沙

2.长沙-武汉

目的IP:广州

源IP:合肥

目的MAC:长沙

源MAC:武汉

3.武汉-合肥

目的IP:广州

源IP:合肥

目的MAC:武汉

源MAC:合肥

源IP, 目的IP始终是整个通信路线的起点和终点
目的MAC ,源MAC 是关注当前这一段路,从哪到哪

1.2.MTU

什么是MTU?

MTU 相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层,产生的限制.


以太网帧中的数据长度规定最小 46 字节,最大 1500 字节,ARP 数据包的长度不够 46 字节,要在后面补填充位;


最大值 1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;


如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU了,则需要对数据包进行分片(fragmentation);


不同的数据链路层标准的 MTU 是不同的;

MTU对IP的影响:

由于数据链路层 MTU 的限制,对于较大的 IP 数据包要进行分包.

1.将较大的 IP 包分成多个小包,并给每个小包打上标签;


2.每个小包 IP 协议头的 16 位标识(id) 都是相同的;


3.每个小包的 IP 协议头的3位标志字段中,第2位置为 0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为 0);


4.到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;


5.一旦这些小包中任意一个小包丢失,接收端的重组就会失败.但是 IP 层不会负责重新传输数据;

MTU对UDP的影响

1.一旦 UDP 携带的数据超过 1472(1500-20(IP 首部)-8(UDP 首部)),那么就会在网络层分成多个IP 数据报.


2.这多个 IP 数据报有任意一个丢失,都会引起接收端网络层重组失败.那么这就意味着,如果 UDP 数据报在网络层被分片,整个数据被丢失的概率就大大增加了

MTU对TCP的影响

1.TCP 的一个数据报也不能无限大,还是受制于 MTU.TCP 的单个数据报的最大消息长度,称为 MSS(Max Segment Size);


2.TCP 在建立连接的过程中,通信双方会进行 MSS 协商


3.最理想的情况下,MSS 的值正好是在 IP 不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的 MTU).


4.双方在发送 SYN 的时候会在 TCP 头部写入自己能支持的 MSS 值


5.然后双方得知对方的 MSS值之后,选择较小的作为最终 MSS


6.MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2);

2.ARP协议

知道了我们最后一层是以太网,所以有个前提:真正在物理层流动的数据其实就是数据帧

如果我们只知道目标主机的IP地址,不知道对方的MAC地址,就无法给对方发送数据帧?
所以:需要一种 局域网协议,把IP转换成为对应的mac地址--ARP协议!

也叫做地址解析协议

主体分成两步:

1.拿着目标主机的IP地址,在群里广播

2.目标主机收到,然后进行应答!MAC地址一对一

ARP的位置:处于数据链路层,处于IP协议和以太网之间

2.1ARP协议格式

注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。


1.硬件类型指链路层网络类型,1为以太网;


2.协议类型指要转换的地址类型,0x0800 为IP 地址;


3.硬件地址长度对于以太网地址为6字节:


4.协议地址长度对于和IP 地址为4 字节;

(前四个参数是固定写法)


5.op 字段为 1 表示 ARP 请求,op 字段为 2表示 ARP 应答

2.2.ARP填充的运行机制

一、场景前提

  • 路由器 R 需向主机 E 发送 IP 报文(src: IPXdst: IPE,数据:你好 )。
  • 路由器 R 已知主机 E 的 IP 地址(IPE) ,但不知道其 MAC 地址 → 触发 ARP 协议,获取 MAC 地址。

二、ARP 协议完整流程(6 步)

1. ARP 请求触发

路由器 R 的网络层收到 “发送 IP 报文到 IPE” 的任务,检查 ARP 缓存表(本地记录 IP→MAC 映射的表):

  • 没有主机 E 的 IP→MAC 映射 → 触发 ARP 协议,生成 ARP 请求包。

2. 构造 ARP 请求包

ARP 请求包的关键字段(以以太网环境为例):

3. 广播 ARP 请求

路由器 R 将 ARP 请求包封装到以太网帧中:

  • 以太网帧的目的 MAC 地址设为广播地址(FF:FF:FF:FF:FF:FF ) → 该帧会被局域网内所有主机接收(包括主机 A/B/C/D/E )。
  • 以太网帧的源 MAC 地址是路由器 R 的 MAC 地址(MAC_R )。

然后,路由器 R 通过局域网接口发送这个广播帧。

  

4. 主机接收与处理 ARP 请求

局域网内所有主机(A/B/C/D/E )收到广播帧后,解封装出 ARP 请求包,检查目标 IP 地址(TPA)(其实先对op位进行检查,常看是应答报文还是请求) :

  • 主机 A/B/C/D:发现 TPA 不是自己的 IP → 直接丢弃 ARP 请求包,不处理。
  • 主机 E:发现 TPA 是自己的 IP(IPE) → 触发 ARP 响应流程。

5. 构造并回复 ARP 响应

主机 E 生成 ARP 响应包,关键字段:

主机 E 将 ARP 响应包封装到以太网帧中:

  • 以太网帧的目的 MAC 地址是路由器 R 的 MAC 地址(MAC_R )→ 直接单播给路由器 R。
  • 以太网帧的源 MAC 地址是主机 E 的 MAC 地址(MAC_E )。

然后,主机 E 发送这个单播帧给路由器 R。

6. 路由器接收 ARP 响应,更新缓存

路由器 R 收到主机 E 的 ARP 响应包:

  • (其实也是先查看op位置是否为2应答报文)提取主机 E 的 IP(IPE)→ MAC(MAC_E) 映射关系,存入 ARP 缓存表。
  • 后续发送给主机 E 的 IP 报文,直接从 ARP 缓存表获取 MAC_E,封装以太网帧发送。

三、后续通信:有了 MAC 地址,如何发数据?

路由器 R 拿到主机 E 的 MAC 地址(MAC_E )后,发送 IP 报文的流程变为:

  1. 网络层:构造 IP 报文(src: IPXdst: IPE,数据:你好 )。
  2. 数据链路层:封装以太网帧:
    • 源 MAC:MAC_R(路由器 R 的 MAC )
    • 目的 MAC:MAC_E(主机 E 的 MAC )
    • 类型:0x0800(表示上层是 IP 协议 )
  3. 物理层:将以太网帧转换为电信号 / 光信号,通过局域网发送给主机 E。

细节:主机都会在一段时间内,记录下来局域网中,各个IP对应的Mac地址的映射关系!
但是不是永久记下来
因为可能更换了mac地址而且可能IP变化的

3.ARP欺骗

ARP欺骗分成「正常通信」→「欺骗注入」→「中间人劫持」三阶段:

阶段 1:正常 ARP 通信(欺骗前状态)

网络角色

  • 主机 A(IP: ipA,MAC: macA
  • 路由器 / 网关 R(IP: ipR,MAC: macR
  • 外部网络(通过 R 连接内网)

ARP 缓存(真实映射)

  • 主机 A ARP 表:ipR ↔ macR(知道 “网关 IP 对应真实 MAC”)
  • 路由器 R ARP 表:ipA ↔ macA(知道 “主机 A IP 对应真实 MAC”)

通信逻辑
主机 A 发往外部网络的数据,会通过正确的 ipR ↔ macR 映射,把数据帧交给路由器 R 转发,实现正常上网。

 阶段 2:恶意主机 M 注入 ARP 欺骗包

新增角色:恶意主机 M(IP 无固定伪装,MAC: macM

欺骗动作

  1. 欺骗主机 A
    主机 M 向主机 A发送虚假 ARP 响应,声称:
    “我是 ipR(网关IP),我的MAC是 macM”
    → 主机 A  ARP 表被篡改,错误记录:ipR ↔ macM

  2. 欺骗路由器 R
    主机 M 向路由器 R发送虚假 ARP 响应,声称:
    “我是 ipA(主机A IP),我的MAC是 macM”
    → 路由器 R ARP 表被篡改,错误记录:ipA ↔ macM

 阶段 3:中间人劫持(数据被 M 截获 / 篡改)

通信被劫持逻辑

  • 主机 A 发往外部网络的数据:
    因主机 A ARP 表是 ipR ↔ macM,数据帧会被发往主机 M(而非真实网关 R)。

  • 路由器 R 发往主机 A 的数据:
    因路由器 R ARP 表是 ipA ↔ macM,响应数据也会被发往主机 M(而非真实主机 A)。

  • 主机 M 的 “中间人” 行为
    主机 M 可选择:

    • 「转发」:把数据原样传给真实目标(网关 R / 主机 A),隐藏劫持痕迹;
    • 「篡改」:修改数据内容(如植入广告、窃取信息)后再转发;
    • 「拦截」:直接丢弃数据,让主机 A / 路由器出现网络异常。

4.交换机

局域网的一个特性:就是在同一时间是只允许一台主机在局域网中发送消息,所以整个局域网就是一个碰撞域。

其中交换机的作用:就是划分碰撞域,减少一个局域网中的碰撞概率,提高整体的传输效率。

举个例子:

1.假设此时一个主机 A B C D E    ,但因为大家都没有发消息所以交换机的作用还没体现出来。    

2.当这个局域网中的所有的主机,都向局域网中发送消息,此时交换机就会记录每个主机的大致位置,例如:A和D在交换机的左侧,其余的都在交换机的右侧。

3.当交换机把大家的信息都记录下来的时候。假设此时主机E要给主机C发送消息,此时交换机就知道主机C在右侧,所有就不会将这条消息发送给交换机的左侧,减少了信息的碰撞

5.CSMA/CD协议

CSMA/CD(带冲突检测的载波监听多路访问 )协议,是一种在有线局域网(如以太网早期)中使用的介质访问控制方法。

工作原理与关键步骤

  • 载波监听(Carrier Sense):网络中的每个节点在发送数据前,会先监听传输介质(比如以太网的同轴电缆、双绞线等)上是否有其他节点正在发送数据,也就是检测信道是否空闲。若信道空闲,节点会尝试发送数据;若信道 busy(有数据在传输),则节点会等待,直到信道空闲后再尝试发送。
  • 多路访问(Multiple Access):意味着多个节点都可以访问同一个传输介质,大家共享这一通信信道,都有机会在信道空闲时发送自己的数据。
  • 冲突检测(Collision Detection):节点在发送数据的同时,还会继续监听信道,判断自己发送的数据和其他节点发送的数据是否在信道中发生了冲突(即多个节点同时发送数据,信号相互干扰 )。要是检测到冲突,节点会立即停止发送数据,然后发送一个干扰信号(强化冲突,让其他节点也能快速发现冲突),之后会等待一段随机的时间,再重新尝试上述 “载波监听→尝试发送→冲突检测” 的过程。

特点

  • 优点:简单易懂,容易实现,能较好地应用于早期共享式局域网环境,让多个节点共享信道进行通信,在一定程度上解决了多节点访问信道的问题 。
  • 缺点:随着网络中节点数量增多、通信负载加大,冲突发生的概率会大幅上升,导致网络效率降低;而且它一般适用于有线网络,在无线网络中,由于无线信号的特点(比如信号衰减、隐藏终端问题等 ),难以有效检测冲突,不太适用;另外,存在 “边发送边监听” 的时间和资源开销。

应用场景

曾经在以太网(如 10Base - 5、10Base - 2 等传统以太网标准 )中广泛应用,不过随着以太网技术发展,现在的以太网大多采用交换机进行数据转发,以全双工模式工作,CSMA/CD 协议的使用场景大幅减少,但它是理解局域网介质访问控制机制的重要基础。

简单说,CSMA/CD 就是局域网里多个节点共享信道时,先听有没有人用信道,没人用就发数据,发的时候还盯着,要是和别人的数据 “撞车”(冲突)了,就赶紧停发、捣乱一下(发干扰信号),过会儿再重新来一遍流程 。


网站公告

今日签到

点亮在社区的每一天
去签到