数据链路层分析

文章目录

  • 前言
  • 一、数据链路层概述
  • 二、终端之间的通信
  • 三、帧格式
    • 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…

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

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

专为运维工程师设计!阿里藏经阁出品的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…

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

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

前程无忧滑块

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

日期时间显示网页

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系列及之后的芯片如…

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 为什么不是线程安全…

WCCI 2024开幕,横滨圣地巡礼,畅游动漫与美食的世界

惊喜!WCCI 2024开幕,横滨圣地巡礼!畅游动漫与美食的世界 会议之眼 快讯 会议介绍 IEEE WCCI(World Congress on Computational Intelligence)2024,即2024年IEEE世界计算智能大会,于6月30日至…

windows USB 设备驱动开发-Host端和Device端

Windows 中的 USB 宿主端驱动程序 下图显示了适用于 Windows 的 USB 驱动程序堆栈的体系结构框图。 此图显示了适用于 USB 2.0 和 USB 3.0 的单独 USB 驱动程序堆栈。 当设备连接到 xHCI 控制器时,Windows 加载 USB 3.0 驱动程序堆栈。 Windows 为连接到 EHCI、OHC…

星辰计划01-动态代理

会话1: 什么是动态代理? 👧 什么是代理啊?👨来来来,听我细细来说 代理这个词在不同的上下文中有不同的含义,主要可以归纳为以下几类解释: 计算机网络中的代理服务器(Proxy Server&#xff0…

跨平台Ribbon UI组件QtitanRibbon全新发布v6.7.0——支持Qt 6.6.3

没有Microsoft在其办公解决方案中提供的界面,就无法想象现代应用程序,这个概念称为Ribbon UI,目前它是使应用程序与时俱进的主要属性。QtitanRibbon是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibb…

Linux_生产消费模型_Block_Queue

目录 一、互斥锁 1.1 错误的抢票 1.1.1 类的成员函数与构造 1.1.2 start 函数 1.1.3 线程的回调函数 1.1.4 main 函数 1.1.5 结果 1.2 概念 1.3 相关系统调用 1.3.1 锁的创建 1.3.2 锁的初始化 1.3.2.1 动态初始化 1.3.2.2 静态初始化 1.3.3 锁的销毁 1.3.4…

看不懂懂车大爆炸,你就错过了国产小车的王炸!

咦?咋的啦?咱中国自己的汽车品牌前几天在汽车工业协会公布的数据里一跃而起,真的是威风凛凛啊!2023年咱们自家的乘用车品牌市场份额硬生生地占了个56%,这可是半壁江山啊!特别是那些10万块钱以下的家用小车&…

32.哀家要长脑子了!

1.299. 猜数字游戏 - 力扣(LeetCode) 公牛还是挺好数的,奶牛。。。妈呀,一朝打回解放前 抓本质抓本质,有多少位非公牛数可以通过重新排列转换公牛数字,意思就是,当这个数不是公牛数字时&#x…

C++多态~~的两个特殊情况

目录 1.多态的概念 2.简单认识 (1)一个案例 (2)多态的两个满足条件 (3)虚函数的重写 (4)两个特殊情况 1.多态的概念 (1)多态就是多种形态; …

SQL 29 计算用户的平均次日留存率题解

问题截图如下: SQL建表代码: drop table if exists user_profile; drop table if exists question_practice_detail; drop table if exists question_detail; CREATE TABLE user_profile ( id int NOT NULL, device_id int NOT NULL, gender varchar…