一周学完计算机网络之三:1、数据链路层概述

简单的概述

数据链路层是计算机网络体系结构中的第二层,它在物理层提供的基本服务基础上,负责将数据从一个节点可靠地传输到相邻节点。可以将其想象成一个负责在两个相邻的网络设备之间进行数据 “搬运” 和 “整理” 的 “快递中转站”。

在这里插入图片描述

几个重要概念:

  • :封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。通俗的来说就是:网络层传递给数据链路层的数据,会被分割成大小不一的数据“包裹”,这个数据会被插入帧头和帧尾,构成数据帧。
  • 帧头和帧尾:帧里面包括了目的地址,就是让目的主机通过帧的这个地址知道这个信息是发送给自己的。此外还包含标志位,比如PPP帧格式中就有标志位来进行帧的定界(两个帧之间的数据边界)。

在这里插入图片描述

在这里插入图片描述

  • **帧定界:**如果帧头和帧尾的标志位,如何区分边界呢?比如以太网V2的MAC帧。

    • 以太网V2的MAC帧,会在帧中插入8个字节(64比特)的前导码,前导码由 7 个字节的前同步码和 1 个字节的即帧开始定界符,SFD组成,总共 8 个字节。它位于 MAC 帧的最前端,在物理层传输时,会先于目的地址、源地址等其他字段被发送出去。作用主要有二:

      • 时钟同步:以太网中数据的传输是基于时钟信号的,发送方按照自己的时钟节奏发送数据,接收方需要与发送方的时钟保持同步,才能准确地接收和解析数据。
      • 帧起始标识:最后的(SFD)作为帧开始定界符,用于标识 MAC 帧的正式开始。接收方在检测到 SFD 后,就知道接下来的比特流是一个 MAC 帧的数据部分,从而开始对帧进行解析和处理。

      在这里插入图片描述

  • 可靠传输:就是能够实现,发送方发的数据,和接收方接受的数据完全一样,不能有任何丢失或者错误。需要用到差错检测、确认与重传、序号与排序的技术手段。这种传输方法的成本会比较高。

    • 差错检测:发送方在数据中加入一些冗余信息,如校验和、循环冗余校验(CRC)码等。接收方通过对收到的数据进行相应的计算,来检查数据在传输过程中是否发生了错误。例如,若计算出的 CRC 码与收到的 CRC 码不一致,就知道数据出现了差错。
    • 确认与重传:接收方收到数据后,会向发送方发送确认信息(ACK),告知发送方数据已正确接收。如果发送方在一定时间内没有收到接收方的确认信息,或者收到了否定确认信息(NAK),就会认为数据传输出现了问题,然后重新发送数据。这种自动重传请求(ARQ)机制可以有效地解决数据丢失或出错的问题。
    • 序号与排序:为了保证数据的顺序性,发送方会给每个数据分组加上一个序号。接收方根据序号对收到的数据进行排序,将乱序的数据调整到正确的顺序后再提交给上层应用。
  • 透明传输:用这种前导码的形式来区分帧,如果帧里面的数据和这个帧定界一样的时候,接收数据的时候,就会把这个数据误认为是帧定界来处理。容易引发误判。解决方法就是使用透明传输,实现方法就是如下方法:

    • 字节填充:当数据中出现与帧定界符相同的字节时,为了避免接收方将其误认为是帧的边界,发送方会在该字节前面插入一个转义字节。接收方收到数据后,会自动删除这个转义字节,恢复数据的原样。例如,下面这种情况:(ESC表示转义字符)

    在这里插入图片描述

    ​ 但是有的时候,转义字符就是数据本身怎么搞,因此就在转义字符前面也加入一个转义字符。

    在这里插入图片描述

    • 比特填充:在一些数据链路层协议中,如 HDLC 协议,采用比特填充的方式来实现透明传输。当数据中出现连续的若干个 1(通常是 5 个 1)时,发送方会在其后插入一个 0。接收方收到数据后,会自动删除这些插入的 0,从而保证数据的透明传输。

在这里插入图片描述

  • 差错检测:检验码会被封装在帧尾,比如图片中的FCS就是。发送方把数据送到接收方以后,可以根据这个来判断是否有误码(就是本来是0变成1,本来是1变成了0)。

    • 奇偶校验:奇偶校验法是根据被传输数据中 “1” 的个数的奇偶性来进行校验的。具体来说,在发送数据时,会在数据后面添加一个奇偶校验位,使得整个数据(包括校验位)中 “1” 的个数为奇数或偶数。接收方收到数据后,会根据事先约定的奇偶性规则来检查 “1” 的个数,如果 “1” 的个数不符合约定的奇偶性,则认为数据在传输过程中出现了错误。

      缺点是,无法识别出偶数位的比特误码情况。而且只能检验,不能纠错。

    • 循环冗余校验CRC:CRC 的基本原理是将待传输的数据比特序列看作是一个多项式的系数,通过特定的生成多项式对这个多项式进行除法运算,得到的余数作为校验码附加在数据后面一起传输。接收方收到数据后,用同样的生成多项式对收到的数据进行除法运算,如果余数为零,则认为数据传输正确;否则,说明数据在传输过程中出现了错误。

    img

  1. 确定生成多项式:生成多项式是一个预先选定的二进制多项式,通常用 G ( x ) G(x) G(x) 表示。不同的应用场景会使用不同的生成多项式,例如,在以太网中常用的生成多项式是 G ( x ) = x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1 G(x)=x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
  2. 在数据后面添加 n 个零:n 是生成多项式$ G(x)$ 的最高次数。例如,对于上述以太网中的生成多项式, n = 32 n = 32 n=32。假设待传输的数据为 D ( x ) D(x) D(x),将 D ( x ) D(x) D(x)左移 n 位,即相当于在数据后面添加 n 个零,得到 D ( x ) × x n D(x) \times x^n D(x)×xn
  3. 进行模二除法:用 D ( x ) × x n D(x) \times x^n D(x)×xn 除以生成多项式 G ( x ) G(x) G(x),得到的余数 R ( x ) R(x) R(x) 就是 CRC 校验码。这里的除法是模二除法,即采用异或运算进行减法,不考虑借位。
  4. 附加校验码:将得到的 CRC 校验码 R ( x ) R(x) R(x) 附加在原始数据 D ( x ) D(x) D(x) 的后面,形成最终要传输的数据帧 T ( x ) = D ( x ) × x n + R ( x ) T(x)=D(x) \times x^n + R(x) T(x)=D(x)×xn+R(x)

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

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

相关文章

✨WordToCard使用分享✨

https://www.wordtocard.com 家人们,今天发现了一个超好用的工具——WordToCard!😜 它可以把WordToCard文档转换成漂亮的知识卡片,学习笔记、知识整理和内容分享都变得超轻松~🤗 支持各种WordToCard语法…

扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析

扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject?React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies(部分)3. 新增 Babel …

[Java实战]Spring Boot 整合 Redis(十八)

[Java实战]Spring Boot 整合 Redis(十八) 在现代的分布式应用开发中,Redis 作为一种高性能的键值存储数据库,被广泛用于缓存、消息队列、排行榜等多种场景。Spring Boot 提供了强大的支持,使得整合 Redis 变得非常简单…

【氮化镓】GaN在不同电子能量损失的SHI辐射下的损伤

该文的主要发现和结论如下: GaN的再结晶特性 :GaN在离子撞击区域具有较高的再结晶倾向,这导致其形成永久损伤的阈值较高。在所有研究的电子能量损失 regime 下,GaN都表现出这种倾向,但在电子能量损失增加时,其效率会降低,尤其是在材料发生解离并形成N₂气泡时。 能量损失…

R语言实战第5章(1)

第一部分:数学、统计和字符处理函数 数学和统计函数:R提供了丰富的数学和统计函数,用于执行各种计算和分析。这些函数可以帮助用户快速完成复杂的数学运算、统计分析等任务,例如计算均值、方差、相关系数、进行假设检验等。字符处…

k8s术语之Horizontal Pod Autoscaling

应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高整体的整体资源利用率,让service中的Pod个数自动调整呢?Horizontal Pod Autoscaling:使pod水平自动缩放。这个Object也是最能体现kubernetes之于传统运维价值的地方&a…

Linux复习笔记(三) 网络服务配置(web)

遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 二、网络服务配置 2.3 web服务配置 2.3.1通信基础:HTTP协议与C/S架构(了解) ​​HTTP协议的核心作用​​ Web服务基于HTTP/HTTPS协议实现客户端&#xff…

9.1.领域驱动设计

目录 一、领域驱动设计核心哲学 战略设计与战术设计的分野 • 战略设计:限界上下文(Bounded Context)与上下文映射(Context Mapping) • 战术设计:实体、值对象、聚合根、领域服务的构建原则 统一语言&am…

CSS Layer 详解

CSS Layer 详解 前言 最近在整理CSS知识体系时,发现Layer这个特性特别有意思。它就像是给样式规则提供了一个专属的「VIP通道」,让我们能更优雅地解决样式冲突问题。今天我就用最通俗的语言,带大家全面了解这个CSS新特性。 什么是CSS Laye…

【Dv3Admin】工具视图配置文件解析

在开发后台管理系统时,处理复杂的 CRUD 操作是常见的需求。Django Rest Framework(DRF)通过 ModelViewSet 提供了基础的增删改查功能,但在实际应用中,往往需要扩展更多的功能,如批量操作、权限控制、查询优化等。dvadmin/utils/viewset.py 模块通过继承并扩展 ModelViewS…

‌云原生CAE软件

‌云原生CAE软件‌是一种在设计和实现时就充分考虑了云环境特点的软件,能够充分利用云资源,实现高效、可扩展和灵活的仿真分析。 定义和特点 云原生CAE软件是一种在云端构建和运行的CAE(Computer Aided Engineering,计算机辅助工…

若依定制pdf生成实战

一、介绍 使用 Java Apache POI 将文字渲染到 Word 模板是一种常见的文档自动化技术,广泛应用于批量生成或定制 Word 文档的场景。使用aspose可以将word转成pdf从而达到定制化pdf的目的。 参考文档:java实现Word转Pdf(Windows、Linux通用&a…

Redis再次开源!reids8.0.0一键安装脚本分享

准备工作 1. 下载 Redis 8 安装包 # Redis 8.0.0 示例(请替换为实际版本) http://download.redis.io/releases/redis-8.0.0.tar.gz一、脚本内容: #!/usr/bin/python # -*- coding: UTF-8 -*-import os import time import shutil import s…

stm32之BKP备份寄存器和RTC时钟

目录 1.时间戳1.1 Unix时间戳1.2 UTC/GMT1.3 时间戳转换**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…

Android学习总结之算法篇八(二叉树和数组)

路径总和 import java.util.ArrayList; import java.util.List;// 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;// 构造函数,用于初始化节点值TreeNode(int x) {val x;} }public class PathSumProblems {// 路径总和 I:判…

Scala和Spark的介绍

Scala 1. Slaca的发展过程 由洛桑联邦理工学院的马丁 奥德斯在 2001 年基于 Funnel 的工作开始设计,设计初衷是想集成面向对象编程和函数式编程的各种特性。 Scala 是一种纯粹的面向对象的语言,每个值都是对象。 Scala 也是一种函数式语言&#xff0…

配置Hadoop集群环境-使用脚本命令实现集群文件同步

在 Hadoop 集群环境中,确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案,支持批量同步文件到所有节点: 1. 前提条件 所有节点已配置 SSH 免密登录主节点(NameNode)能通过主机…

Redis能保证数据不丢失吗之RDB

有了AOF为什么还需要RDB? 上一篇我们介绍了Redis AOF持久化策略。Redis能保证数据不丢失吗之AOF AOF虽然能实现持久化,但由于AOF恢复数据的时候是一条一条命令重新执行的,但数据量大的时候,Redis数据恢复的时间就会很久,这会导致Redis在重启的时候,有一大段时间的不可用…

AI浪潮下的艺术突围战:对话《名人百科数据库》执行主编刘鑫炜

当AI生成的画作在国际赛事中摘冠,当算法推荐主导艺术传播路径,技术革命正以前所未有的速度重塑艺术生态。我们独家专访深耕艺术推广领域的刘鑫炜主编,探讨当代艺术家在智能时代的生存法则。 图为《名人百科数据库》执行主编刘鑫炜 技术重构创…

Python 实现失败重试功能的几种方法

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 方法 1:手动 `while` 循环 + 异常捕获方法 2:使用 `tenacity` 库(推荐)方法 3:使用 `retrying` 库(旧版,已停止维护)方法 4:`requests` 自带重试(适用于 HTTP 请求)方法 5:自定义装饰器(灵活控制)方法…