『 Linux 』数据链路层 - MAC帧/以太网帧

ops/2024/11/30 1:11:35/

文章目录

    • MAC帧/以太网帧
    • 局域网的通信原理


MAC帧/以太网帧

MAC帧也叫做以太网帧,通常情况下MAC帧也是一个更广义的语术,用来描述数据链路层,即OSI模型的第二层的一种数据帧格式,这种格式包括其他如WI-FI,令牌环,帧中继等数据链路层所使用的数据帧;

以太网帧是具体使用的一种MAC帧,通常在讨论数据链路层的帧结构时两词代指相同内容;

MAC帧的报文结构如图所示;

MAC帧所采用的报文为定长报文,通过定长报文的方式将报头与有效载荷进行分离;

在进行分用时,MAC帧报头中类型字段将表明一些常用的数据格式,如IP(类型0800),ARP请求/响应(类型0806),PARP请求/响应(类型0835);

通过该字段来判断报文中的有效载荷需要交付给上层网络层的哪个协议,即分用思路;

而报文中的源地址和目的地址表示的通常为MAC地址;


局域网的通信原理

网络通信过程中始终需要遵从"先决策,后执行"的策略,即上层进行决策,下层进行执行;

对应在网络通信过程中,网络层通常担任决策的一方,即决定需要将数据包交由给下一跳的哪一台设备;

以IP协议为例,在使用IP协议进行网络通信时,通常使用IP地址进行决策,即具体下一跳(Next hop)需要将数据发送至哪一个IP地址的设备,而真正在数据链路层所使用的地址为MAC地址;

  • MAC地址

    通常MAC地址简单来说就是网络设备的"身份证";

    用于唯一标识联网设备的硬件地址,每台设备上的网络接口卡(如以太网卡,WIFI适配器)都有一个独特的MAC地址;

    MAC地址通常为48位,用6对十六进制数字不表示,如00:1A:2B:3C:4D:5E;

    每个MAC地址都是全球唯一的,在局域网中,MAC地址用于标识和区分不同设备;

通常情况下在同一个局域网中,数据链路层中数据的传输是每个设备都能接收到的,但每台设备在收到对应的MAC帧时对MAC帧进行分析,当观察到MAC帧中的目的地址与本机的MAC地址不同时将会丢弃剩下的有效载荷;

这种通信原理在数据链路层中也被称为单播,对应的广播情况下同一个局域网内的所有设备都会获取到该MAC帧,并将该MAC帧交付给上层;

通常情况下,在同一局域网中至运行一个设备进行网络通信,因为本质上网络通信在光缆中是光电信号,光电信号在传输过程中也可能因为其他信号从而被干扰,这种情况被称为数据碰撞;

因此本质上互联网就是有限资源,因此为了避免这种情况,每台设备在数据链路层都会提供对应的"碰撞避免算法",但"碰撞避免算法"终究只能尽量避免数据碰撞的发生;

在数据传输过程中,通常一个数据若是过大,那么它在网络中需要传输的时间也就更长,因此MAC帧对报文进行了定长的方式,避免过大的报文在网络中进行传输;

同时为了兼容MAC帧的载荷大小,上层协议也需要做出调整,如IP协议再面对较大的数据包时将会对数据包进行分片处理,使得向数据链路层交付的每个数据包都不会超过MAC帧限制大小;

而在之前的文章提过,通常不支持IP协议对数据包进行分片处理,原因是数据包若是进行分片且其中一个分片在传输过程中出现丢包情况则会导致所有的IP数据包再次进行重发而不会只重发丢失的分片,因此引入了传输层的一些策略,如TCP协议中的流量控制,滑动窗口,慢启动等策略;

每一层的协议都在与更下一层的协议进行兼容;

在上面的内容中可以了解到,每一个设备都要对所接收到的MAC帧进行检查,确保MAC帧中的MAC地址与本设备的MAC地址相同时才会交付给上层,而真正交付到对应设备时,对应的设备同样的在数据链路层中先进行解包为IP数据包,再由网络层协议如IP协议检查对应的路由表找到下一个设备的IP地址,再交付给数据链路层封装为MAC帧交由下一台设备;

因此在进行网络通信时本质上数据是在不停的进行 “封装-解包-再封装” 的操作的;

当一个MAC帧因目的MAC地址匹配而重新到达网络层进行查看路由表并重新设置新的目标MAC地址而重新封装为新的MAC帧,这意味着一个MAC帧是只在当前局域网内有效的,因为每过一个新的网关(路由器)后都会有一个新的MAC帧,也许其有效载荷是相同的,但实际他们的MAC帧报头都是重新封装且不同的,所以一个MAC帧只在当前局域网内有效;

本质上所谓的数据发送到目标网络是通过无数个连续的子网实现的;

的MAC帧报头都是重新封装且不同的,所以一个MAC帧只在当前局域网内有效;

本质上所谓的数据发送到目标网络是通过无数个连续的子网实现的;


http://www.ppmy.cn/ops/137791.html

相关文章

MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`

目录 前言1. 问题背景2. 错误分析2.1 错误信息详解2.2 可能原因 3. 问题排查与解决方案3.1 检查 MySQL 错误日志3.2 验证 MySQL 配置文件3.3 检查文件和目录权限3.4 手动启动 MySQL 服务3.5 修复 systemd 配置文件3.6 验证依赖环境 4. 进一步优化与自动化处理结语 前言 在日常…

泷羽sec---shell作业

作业一 写计算器 使用bc命令 需要进行安装bc 代码如下: #!/bin/bash echo "-----------------------------------" echo "输入 f 退出" echo "可计算小数和整数" echo "用法如:1.12.2" echo "------…

重塑视频新语言,让每一帧都焕发新生——Video-Retalking,开启数字人沉浸式交流新纪元!

模型简介 Video-Retalking 模型是一种基于深度学习的视频再谈话技术,它通过分析视频中的音频和图像信息,实现视频角色口型、表情乃至肢体动作的精准控制与合成。这一技术的实现依赖于强大的技术架构和核心算法,特别是生成对抗网络&#xff0…

【二分查找】力扣 2529. 正整数和负整数的最大计数

一、题目 二、思路 基本的二分查找模板是进行查找大于等于 target 值的第一个位置。统计负数个数转换为:查找 0 的位置。统计正数个数转换为:数组总个数 - 查找 1 的位置。 三、题解 class Solution {public int maximumCount(int[] nums) {int n nu…

简单线性DP

数字三角形--简单线性DP 题目链接:数字三角形 解题代码: import java.io.BufferedReader; import java.io.InputStreamReader;public class Main {static int N510;static int INF (int) -1e9;static String[] q;static int[][]fnew int[N][N];static …

Flink 安装与入门:开启流式计算新时代

在当今大数据蓬勃发展的时代,数据处理的时效性愈发关键。传统基于先存储再批量处理的数据方式,在面对诸如网站实时监控、异常日志即时分析等场景时,显得力不从心。随着 5G、物联网等技术的兴起,海量数据如潮水般涌来,且…

windows部署基于Composio的skekit应用问题解决记录

背景 最近在探索新方向的时候,发现一个项目:Composio, 它是为AI Agent准备的生产完备的工具集,可以和一些主流的agent框架进行结合,让agent具备更加强大的能力。按之前的视角来划分,应该属于应用层的。看了下项目的介绍,感觉还是蛮有意思的,准备使用其skekit(SWE Devel…

Spring Events 最新详解(spring4.2前后变化)

事件驱动设计模式,也可能通过Spring来实现。 围绕事件的三个角色: 事件(Event)事件发布者(Publisher)事件监听者(Listener) 文章内容: Spring Event.jpg 1. Demo-01:…