数据链路层分析

文章目录

  • 前言
  • 一、数据链路层概述
  • 二、终端之间的通信
  • 三、帧格式
    • 1.Ethernet_II型
    • 2.IEEE 802.3
  • 四、MTU分析
  • 五、数据帧的传输
    • 1.MAC地址
    • 2.单播
    • 3.广播
    • 4.组播
    • 5.数据帧的收发


前言

网络中传输数据需要定义并遵循一些标准,以太网是根据IEEE802.3标准来管理和控制数据帧的,了解IEEE802.3标准是充分理解以太网中链路层通信的基础。


一、数据链路层概述

数据链路层(data link layer)是OSI参考模型中的第二层,介乎于物理层和网络层之间。
在这里插入图片描述

数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自物理层的数据可靠的传输到相邻节点的目标机网络层。

数据链路层的传输单元:

工作在二层的网络设备:交换机

二、终端之间的通信

在这里插入图片描述

数据链路层控制数据帧在物理链路上传输

数据包在以太网介质上传播之前必须封装头部和尾部信息,其封装后的数据包称为数据帧,数据帧中封装的信息决定了数据如何传输。

以太网上传输的数据帧有两种格式,选择哪种格式由TCP/IP协议簇中的网络层决定。

三、帧格式

在这里插入图片描述

两种帧格式:Ethernet_II 和 IEEE802.3

Ethernet_II 帧格式,是上世纪80年代提出的DIX v2格式。Ethernet_II 后来被IEEE802标准接纳,并写进了IEEE802.3x-1997的3.2.6节。

IEEE802.3帧格式是1983年提出的

Ethernet_II 和 IEEE802.3两种格式的主要区别在于Ethernet_II格式中包含一个Type字段,标识以太帧处理完之后将被发送到哪个上层协议进行处理,IEEE802.3格式中,同样的位置是长度字段。

如何区别Ethernet_II 和 IEEE802.3:

  • 不同的Type字段值可以用来区别这两种帧的类型
  • 当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE802.3格式
  • 当Type字段值大于等于1536(或者十六进制的0x0600)时,帧使用的是Ethernet_II格式
  • 以太网中大多数的数据帧使用的是Ethernet_II格式

不管是哪一种帧都具有帧头帧尾结构:
在这里插入图片描述

帧校验序列字段,用于检验传输过程中帧的完整性。

1.Ethernet_II型

在这里插入图片描述

Ethernet_II的帧中各字段说明如下:
在这里插入图片描述

2.IEEE 802.3

在这里插入图片描述

IEEE802.3的帧中各字段说明如下:
在这里插入图片描述

SAP服务访问点,它是一个层次系统的上下层之间进行通信的接口,N层的SAP就是N+1层可以访问N层服务的地方。SSAP可以理解为来源设备的服务点,DSAP可以理解为目的设备的服务点。

Org Code 三个字节都为0,Type字段的含义与Ethernet_II帧中的Type字段相同。

四、MTU分析

以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500字节和1492字节。链路层的这个特性称为MTU,即最大传输单元。不同类型网络的数据帧长度大多数都有一个上限。如果IP层有一个数据报要传,而且数据帧的长度比链路层的MTU还大,那么IP层就需要进行分片即把数据报分成若干片,这样每一片就都小于MTU。

Ethernet_II帧
在这里插入图片描述

上三层数据最小是46字节,这里上三层指的是网络层、传输层、应用层。

五、数据帧的传输

数据链路层基于MAC地址进行帧的传输。
在这里插入图片描述

以太网在二层链路上通过MAC地址来唯一标识网络设备,并且实现局域网上网络设备之间的通信。MAC地址也叫物理地址,大多数网卡厂商把MAC地址烧入了网卡的ROM中。发送端使用接收端的MAC地址作为目的地址。以太帧封装完成后会通过物理层转换成比特流在屋里介质上传输。

1.MAC地址

MAC地址,也称为物理地址,是被烧入到网卡的全球唯一标识。
在这里插入图片描述

MAC地址由两部分组成,分别是供应商代码和序列号。其中前24位代表该供应商代码,由IEEE管理和分配。剩下的24位序列号由厂商自己分配。
在这里插入图片描述

网络设备的MAC地址是全球唯一的。

MAC地址长度为48比特,通常用十六进制表示。

MAC地址包含两部分:前24比特是组织统一标识符(OUI,Organizationally Unique Identifier)由IEEE统一分配给设备制造商。例如,华为的网络产品的MAC地址前24比特是0x00e0fc。后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配。

MAC地址 = 厂家标识 + 内部编号,可以使用命令ipconfig /all 查看自己的MAC地址。

以太网封装完成后会通过物理层转换成比特流在物理介质上传输,局域网上的帧可以通过三种方式发送:

  1. 单播
  2. 广播
  3. 组播

2.单播

在这里插入图片描述

单播,指从单一的源端发送到单一的目的端。

每个主机接口有一个MAC地址唯一标识,MAC地址的OUI(组织唯一标识符)中,第一个字节第8个比特表示地址类型。对于主机MAC地址,这个比特固定为0,表示目的MAC地址为此MAC地址的帧都是发送到某个唯一的目的端。

在共享式网络中,所有主机都能收到源主机发送的单播帧,但是其他主机发现目的地址与本地MAC地址不一致后会丢弃收到的帧,只有真正的目的主机才会接收并处理收到的帧。

3.广播

在这里插入图片描述

第二种发送方式是广播,表示帧从单一的源发送到共享以太网上的所有主机。广播帧的目的MAC地址为十六进制的 FF:FF:FF:FF:FF:FF,所有收到该广播帧的主机都要接收并处理这个帧。

广播方式会产生大量流量,导致带宽利用率降低,进而影响整个网络的性能。

当需要网络中的所有主机都能接收到相同的信息并进行处理的情况下,通常会使用广播方式。

4.组播

在这里插入图片描述

第三种发送方式为组播,组播比广播更加高效。组播转发可以理解为选择性的广播,主机侦听特定组播地址,接收并处理目的MAC地址为该组播MAC地址的帧。

组播MAC地址和单播MAC地址是通过第一个字节中的第8个比特区分的。组播MAC地址的第8个比特为1,而单播MAC地址的第8个比特为0。

当需要网络上的一组主机(而不是全部主机)接收相同信息,并且其他主机不受影响的情况下通常会使用组播方式。

5.数据帧的收发

当主机接收到的数据帧所包含的目的MAC地址是自己时,会把以太网封装剥掉后送往上层协议。
在这里插入图片描述

帧从主机的物理接口发送出来后,通过传输介质传输到目的端。共享式网络中,这个帧会到达多个主机。主机检查帧头中的目的MAC地址,如果目的MAC地址不是本机MAC地址,也不是本机侦听的组播或广播MAC地址,则主机会丢弃收到的帧。

如果目的MAC地址是本机MAC地址,则接收该帧,检查帧校验序列(FCS)字段,并与本机计算的值对比来确定帧所在传输过程中是否保持了完整性。如果帧的FCS值与本机计算的值不同,主机会认为帧已被破坏,并会丢弃该帧。如果帧通过了FCS校验,则主机会根据帧头部中的Type字段来确定将帧发送给上层哪个协议处理。本例中,Type字段的值为0x0800,表明该帧需要发送到IP协议上处理。在发送给IP协议之前,帧的头部和尾部会被剥掉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver开启CDC

1、背景 由于需要学习flink cdc,并且数据选择sqlserver,所以这里记录sqlserver的cdc开启操作步骤。 2、基础前提 官方介绍地址:https://learn.microsoft.com/zh-cn/sql/relational-databases/track-changes/enable-and-disable-change-dat…

隐式转换的魔法:Scala中隐式转换的深度解析

隐式转换的魔法:Scala中隐式转换的深度解析 在Scala编程语言的丰富特性中,隐式转换是一个强大而微妙的工具。它允许开发者在不改变现有代码的情况下,扩展或修改类的行为。本文将深入探讨Scala中隐式转换的工作原理,并通过详细的代…

如何优化前端性能:提高网页加载速度的实用技巧

我们在前端开发中,性能优化是提高用户体验的关键因素。网页加载速度直接影响用户的满意度和留存率。本文将介绍几种优化前端性能的实用方法,帮助你提高网页加载速度。 问题描述 : 首先前端性能优化涉及多个方面,包括减少HTTP请…

Java命名规范:

Java命名规范: 大驼峰命名法/帕斯卡命名法: ​ 作用:类名、接口名 ​ 规则:每个单词首字母大写 ​ ps: ​ public class HelloWorld{} ​ 小驼峰命名法: ​ 作用:方法名、变量名 ​ 规则&am…

专为运维工程师设计!阿里藏经阁出品的Python实战手册被我搞来了

Python 可能是极少数既简单又强大的编程语言中的一种。更重要的是,用它来编程是非常快乐的事。 今天给小伙伴们分享的是阿里“藏经阁”出品的专门给运维工程师设计的Python实战手册 废话不多说,下面把内容展示给大家 01 Python快速回顾 02 Python脚本…

【大模型】基于ChatGLM进行微调及应用 [更新中......]

文章目录 一、前言二、说明2.1 代码结构2.2 依赖包版本 三、启动对话演示3.1 命令行交互 cli_demo.py3.2 网页交互 web_demo.py 四、微调模型4.1 基于 P-Tuning v2 微调模型4.1.1 软件依赖4.1.2 下载数据集4.1.3 下载模型文件4.1.4 操作步骤 4.2 基于 Full Parameter 微调模型4…

洛谷P10677题解

题目描述 给一个 n m n\times m nm 的字符矩阵,有些位置有障碍(记为字符 #),需要在矩阵上找出一条起始点任意的路径(可以重复经过某个格子),使得字典序最大。 可以证明答案一定是有限的或者…

从进程到协程,浅谈Java提高CPU利用率的发展

综合CPU利用率来讲,计算机远古时期,为提高CPU利用率,有以下概念 串行进程->并行进程->线程->线程池>->虚拟线程(协程) 一,串行进程, 早期的操作系统对任务调度,往往从最简单的实现开端,串型进程意思是对分配的一个任务,其任务能百分百占用CPU,哪怕…

前程无忧滑块

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

OpenCV学习之cv2.addWeighted函数

OpenCV学习之cv2.addWeighted函数 一、简介 在图像处理和计算机视觉中,图像融合是一种常见的操作。cv2.addWeighted 函数是 OpenCV 提供的用于对两幅图像进行加权融合的函数,通过对图像像素值进行线性加权和偏移,可以实现图像的混合和过渡效…

日期时间显示网页

SweetOrange_Clock 🕘 一、简介 1、这个项目包括一个HTML文件,其中包含页面的样式和脚本。 2、页面以优雅的黑白配色为主题,突出了实用性和视觉冲击力,使得显示内容在视觉上更为突出和易于阅读。 3、这是一个日期时间显示器。通…

高通源代码版本ADK工具版本源代码release版本MDE版本介绍

0 Preface/Foreword 1 版本介绍 高通代码存放在chipcode中,网址URL:Chipcode 1.1 高通源代码版本 Bluetooth Audo芯片的高通源代码版本号(类似于分类的类名):ADK.SRC.1.0 (最新qcc307x系列及之后的芯片如…

SQL中Order by详解

在 MySQL 中,ORDER BY 语句用于对查询结果进行排序。 语法: SELECT column1, column2,... FROM table_name ORDER BY column_name [ASC | DESC];以下是对其主要部分的详细解释: column_name :指定要依据其进行排序的列名。 ASC…

Pycharm安装依赖

1. IDE集成的错误解决 鼠标悬停,点击 install 2. 配置环境 ctrlalts 3. 终端运行pip (要求有先有一个pip) 最好用最简单

NSE and KGE

NSE(Nash-Sutcliffe Efficiency): 解释:NSE 是衡量水文模型模拟结果与观测值之间拟合程度的指标。它计算模拟值与观测值之间的均方误差,并将其与观测值的方差进行比较。NSE 的取值范围为-∞至 1,值越接近 1…

切片的基础知识

文章目录 ● Slice 的底层实现原理?● array 和 Slice 的区别?● 拷贝大切片一定比小切片代价大吗?● Slice 深拷贝和浅拷贝?● 零切片、空切片、nil切片?● Slice 的扩容机制?● Slice 为什么不是线程安全…

Python进阶教程--科学计算基础软件包NumPy

NumPy(Numerical Python)是一个开源的Python库,用于科学计算。它提供了一个高性能的多维数组对象和用于处理这些数组的工具。NumPy是Python科学计算的基础库,被广泛用于数据分析、机器学习、科学计算等领域。 1.1 NumPy 概述 Nu…

C++把一个类封装成动态链接库

一、步骤 1. 创建类头文件 首先,定义你要封装的类。例如,创建一个名为MyClass的类: // MyClass.h #pragma once#ifdef MYCLASS_EXPORTS #define MYCLASS_API __declspec(dllexport) #else #define MYCLASS_API __declspec(dllimport) #end…

智能扫地机器人程序中出现的问题可以参考的解决方案

在解决智能扫地机器人程序中可能遇到的问题时,可以参考以下分点表示和归纳的解决方案: 环境感知与地图构建 ① 使用先进的传感器技术:如激光雷达、超声波和红外传感器,以提高环境感知的准确性和可靠性。 ② 优化地图构建算法&a…

AI辅助设计:如何通过机器学习革新创意工作流程

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习 💒 公众号…