数据链路层三个基本问题(封装成帧 、透明传输和差错检测 )

2023-10-31


数据链路层使用的信道主要有以下两种类型:
点对点信道:这种信道使用一对一 的点对点通信方式。
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。 在这里插入图片描述
在这里插入图片描述

使用点对点信道的数据链路层

1.1 数据链路和帧

链路 (link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。
数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
一般的适配器都包括了数据链路层和物理层这两层的功能。
也有人采用另外的术语把链路分为物理链路和逻辑链路。
物理链路就是上面所说的链路。
逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。
早期的数据通信协议曾叫做通信规程 (procedure)。因此在数据链路层,规程和协议是同义语。在这里插入图片描述
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。
在这里插入图片描述

数据链路层不必考虑物理层如何实现比特传输的细节,甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。

1.2 三个基本问题

数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:

1. 封装成帧

封装成帧 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。在这里插入图片描述
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。在这里插入图片描述

2. 透明传输

如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。在这里插入图片描述
这个时候就比较可怕了,我们的完整数据极有可能会丢失,那么有什么办法可以解决呢?
解决方法字节填充 (byte stuffing) 或字符填充 (character stuffing)。
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
在这里插入图片描述

3. 差错检测

在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

循环冗余检验CRC

在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。
在发送端,先把数据划分为组。假定每组 k 个比特。
假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测用的 n 位冗余码一起发送。 用二进制的模 2 运算进行 2^n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。
得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少 1 位,即 R 是 n 位。
将余数 R 作为冗余码拼接在数据 M 后面发送出去。

文字叙述比较抽象,举个冗余码的例子:
现在 k = 6, M = 101001。
设 n = 3, 除数 P = 1101,
被除数是 2^nM = 101001000。
模 2 运算的结果是:商 Q = 110101,
余数 R = 001。
把余数 R 作为冗余码添加在数据 M 的后面发送出去。发送的数据是:2^nM + R
即:101001001,共 (k + n) 位。

在这里插入图片描述

注意余数的位数和被除数后面添加的0的个数一样,都是除数位数减一位。

帧检验序列 FCS

下面来介绍一下帧检验序列 FCS,在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
循环冗余检验 CRC和帧检验序列 FCS 并不等同。
CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。
FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的唯一方法。

接收端对收到的每一帧进行 CRC 检验

(1) 若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。
(2) 若余数 R 不等于 0,则判定这个帧有差错,就丢弃。
但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。

所以应当注意:仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受
“无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。
也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。
要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
应当明确,“无比特差错”与“无传输差错”是不同的概念。
在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据链路层三个基本问题(封装成帧 、透明传输和差错检测 ) 的相关文章

  • Anaconda安装-超详细版(2023)

    Anaconda安装 超详细版 2023 前言 彻底卸载python Anaconda下载地址 安装详细步骤 配置环境变量 检验安装是否成功 更改conda源 后续安装第三方库可以加快速度 超详细彻底卸载Anaconda教程 Tensorf
  • 交互设计实用指南系列11-减少记忆负担

    http ued taobao org blog 2010 03 交互设计实用指南系列11 减少记忆负担 科普 辞海 中 记忆 的定义是 人脑对经验过的事物的识记 保持 再现或再认 记忆是人类一个非常重要的心理活动 它是人类很多其他思维活动
  • 【HJ72】百钱买百鸡问题

    题目描述 公元前五世纪 我国古代数学家张丘建在 算经 一书中提出了 百鸡问题 鸡翁一值钱五 鸡母一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁 鸡母 鸡雏各几何 现要求你打印出所有花一百元买一百只鸡的方式 输入描述 输入任何一个整数 即可运行程
  • 从浏览器地址栏输入url到显示页面的步骤

    浏览器输入URL到渲染过程解析 从浏览器地址栏输入url到显示页面的步骤 从浏览器地址栏输入url到显示页面的步骤 目录 1 概述 2 DNS域名解析 3 三次握手与四次挥手 4 DOM CSSOM 渲染树的构建 渲染与绘制 1 概述 浏览
  • Mac里的airdrop传输文件

    01 两方打开 02 设置对所有人可以发现 03 右键需要传输的文件 04 选择共享 airdrop 05 点击页面上的名称 开始传输 note 可以传输 app文件 这样可以大大节省下载安装所要耗费的时间 word只要一分钟就能从从无到有
  • 机器学习_深度学习毕设题目汇总——图像生成

    下面是该类的一些题目 题目 基于生成式对抗网络的无监督图像生成研究 用于图像生成的机器学习算法在人像合成中的研究与应用 可抵抗相机抖动的高动态图像生成算法研究 图像生成诗歌的端到端模型研究 基于GANs的脑部MRI图像生成方法研究 基于GA
  • 问二十四:分类说明JUC包常用类有哪些?

    JUC中常用类汇总 JUC的atomic包下运用了CAS的AtomicBoolean AtomicInteger AtomicReference等原子变量类 JUC的locks包下的AbstractQueuedSynchronizer AQ
  • 【Ensemble Learning】第 3 章:混合模型

    在第2章中 您学习了如何以不同方式划分和混合训练数据以构建集成模型 其性能优于在未划分数据集上训练的模型 在本章中 您将学习不同的组装方法 与混合训练数据方法不同 混合模型方法在不同的机器学习模型中使用相同的数据集 然后以不同的方式组合结果
  • pads win10显示不全

    打开注册表 WIN R 1 路径 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Fonts 将原来的 Microsoft YaHei TrueType Mic
  • C++ Vector容器的push_back( )与pop_back( )函数

    C Vector容器的push back 与pop back 函数 push back pop back 参考链接 push back 函数将一个新的元素加到vector的最后面 位置为当前最后一个元素的下一个元素 push back 在V
  • java IDEA加密/解密 源码

    package tool import org apache commons codec binary Base64 import org bouncycastle jce provider BouncyCastleProvider imp
  • Git如何Check Out出指定文件或者文件夹

    原文 http www handaoliang com a 20140506 195406 html 在进行项目开发的时候 有时候会有这样的需求那就是 我们只希望从Git仓库里取指定的文件或者文件夹出来 在SVN里面 这非常容易实现 因为S
  • 实训9——门磁报警

    实验九 门磁报警 一 实验目的 通过门磁传感器 判断三种开门方式 1 正常开门 就是有正常开门方式 例指纹开门 蓝牙开门后 主人打开门 触发门磁 2 门未关好 在正常开门后 主人没有即使关门 会引发门未关好报警 3 有人撬门 非正常开门 即
  • [Python人工智能] 十五.无监督学习Autoencoder原理及聚类可视化案例详解

    从本专栏开始 作者正式研究Python深度学习 神经网络及人工智能相关知识 前一篇文章详细讲解了循环神经网络LSTM RNN如何实现回归预测 通过sin曲线拟合实现如下图所示效果 本篇文章将分享无监督学习Autoencoder的原理知识 然
  • 用户增长漫谈二

    除了功能迭代 增量开发配套敏捷理念 这里重要谈一个概念 宏观 微观上都有可取之处 品牌架构 反应企业意愿 个性 未来可能性留存 兼容不同利益群体方式进程商业活动 主品牌 标识性弱 但是个性强烈 业务 产品特性底的处理方式 以资金 实力彰显
  • MyBatis 学习笔记(八)---源码分析篇--SQL 执行过程详细分析

    前言 在面试中我们经常会被到MyBatis中 占位符与 占位符的区别 大多数的小伙伴都可以脱口而出 会对值进行转义 防止SQL注入 而 则会原样输出传入值 不会对传入值做任何处理 本文将通过源码层面分析为啥 可以防止SQL注入 源码解析 首

随机推荐

  • JS逆向爬虫案例分享

    某域网站数据爬取之反爬策略JS逆向分析 本次分享解析某域网站数据的反爬机制 此次只做技术分享 如有侵权 请联系删除 1 分析网 首先打开网站发送请求 点击F12 发送请求发现电脑端并没有接口返回数据 即返回切换手机端观察 点解F12观察找到
  • Mplayer 1.0pre5 安装纪实

    一开始装了个realone gold 版 但是怎么弄都没有声音 没有办法 只能硬着头皮装mplayer 了 刚刚接触linux 真的是什么也不懂 连看个电影也得费这么大的事 搞了一天 终于算是能看到图像和声音来 现在是只其然 但不怎么知所以
  • 【医学图像分割】读论文系列 1

    医学图像分割 读论文系列 1 文章目录 医学图像分割 读论文系列 1 Title Introduction Abstract Keyword Method Experiment Conclusion Title 标题 Noisy Label
  • JS - 手写节流、防抖

    目录 节流 解释 手写实现 全部计时器实现 Date now 时间戳实现 混合 防抖 解释 手写实现 节流 解释 节流 throttle 是指让某一个函数的触发次数在一定时间内限定在一定范围内 最常的情况是一定时间内只触发最初的一次 常用在
  • 01_Numpy的图片处理(读取,变换,保存)

    Numpy的图片处理 读取 变换 保存 使用Numpy的ndarray可以读取图片文件 并且可以对图片进行各种各样的处理 例如 图片像素值的读取 替换 随机剪裁 拼接等等都可以使用ndarray 对于已经习惯使用Numpy的人们来说 已经可
  • Springboot集成华为云OBS

    Springboot实现华为云对象存储OBS文件上传下载 文章目录 Springboot实现华为云对象存储OBS文件上传下载 前言 一 OBS是什么 二 使用步骤 1 引入依赖 2 HuaweiyunOss工具类 3 上传下载测试 总结 前
  • lua快速入门

    Lua语言简介 1993 年在巴西里约热内卢天主教大学 Pontifical Catholic University of Rio de Janeiro in Brazil 诞生了一门编程语言 发明者是该校的三位研究人员 他们给这门语言取了
  • pytorch dataset自定义_目标检测:SSD模型——pytorch数据载入及增广

    进行模型训练的第一步是载入数据 使用pytorch框架载入数据需要两个步骤 构建Dataset数据集和创建Dataloader数据迭代器 pytorch要载入数据训练SSD 可以直接调用 torchvision datasets VOCDe
  • 【arxiv】Few-Shot Text Generation with Pattern-Exploiting Training

    原文链接 https arxiv org pdf 2012 11926 pdf Abstract 为预先训练好的语言模型提供简单的任务描述或自然语言提示 可以在文本分类任务产生令人印象深刻的few shot结果 在本文中 我们表明了这个潜在
  • storm ui 启动失败,zooper重启解决方案

    给大家写了一个zk集群 如果你linux命令的基础部分 搭建zk集群是很简单的事情 zk集群搭建好了我们怎么连接zk 客户端 进行操作那 接下来就给大家演示如何使用zk shell 的使用 补充 登陆zooper客户端 删除操作 删除sto
  • 关于python报证书验证失败如何解决

    1 使用python访问https的时候返回错误 urllib error URLError
  • 利用Python实现四则运算

    利用Python实现四则运算 输入两个变量 根据类型判断他是否进行运算 若为a和b同时满足int或float类型时 则利用choice选择你所要进行的那种运算 若类型错误 输出其类型 a eval input 请输入a b eval inp
  • tensorflow 移植到android平台

    我的书 淘宝购买链接 当当购买链接 京东购买链接 本文基于 https github com MindorksOpenSource AndroidTensorFlowMachineLearningExample 下载和安装jdk ndk和s
  • shell脚本根据端口杀死进程(带完整解析)

    各位可以将下述内容当为学习Shell脚本 如果只是想要更方便地根据端口杀死进程 可以直接使用该方法 port是端口 kill 9 lsof ti port 在项目开发的时候 我们经常需要根据相对应的端口来杀死进程 而这样的操作最少需要两步
  • 直流无刷减速电机PID控制

    最近做了直流无刷减速电机的控制的项目 针对项目中遇到的问题做下总结 PID Control PID 代码 速度环 位置环 串级 STM32F407VET6 STM32CubeMX 更新记录 V1 0 0 2022 8 5 完善了RTOS程序
  • 怎么使用大疆无人机建模?

    倾斜摄影测量技术是国际测绘遥感领域近年发展起来的一项高新技术 以大范围 高精度 高清晰的方式全面感知复杂场景 通过高效的数据采集设备及专业的数据处理流程生成的数据成果直观反映地物的外观 位置 高度等属性 为真实效果和测绘级精度提供保证 同时
  • 说说学习python pycharm中踩的坑

    说说学习python pycharm中踩的坑 我真的很讨厌很痛苦这种啥都不懂 只能在黑暗中摸索的感觉 1 python 3 9 及以上版本是不支持win7的 2 要安装 python 2 7 和 python 3 8 这样才能在pychar
  • 反射、xml解析

    反射 反射就读取class文件 获取该文件中的属性 方法等 作用 用来获取指定路径下的class文件中所具备的的所有属性和方法 返回Class对象的方式之一 getClass 每一个引用数据类型都有一个getClass的方法 返回的是该类的
  • EXCEL的快速分列

    1 打开Excel并选择分列 选择智能分列 点击 2 选择手动设置分列 3 注意符号一定是英文要和你分列的数据内符号一致 4 点击下一步完成 效果如下
  • 数据链路层三个基本问题(封装成帧 、透明传输和差错检测 )

    文章目录 使用点对点信道的数据链路层 1 1 数据链路和帧 1 2 三个基本问题 1 封装成帧 2 透明传输 3 差错检测 循环冗余检验CRC 帧检验序列 FCS 接收端对收到的每一帧进行 CRC 检验 数据链路层使用的信道主要有以下两种类