当前位置: 首页 > news >正文

奇偶校验、crc循环冗余检验

数据链路层

链路

从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换点

数据链路

是指把实现通信协议硬件软件加到链路上

数据链路上传输的数据包,称之为

数据链路层是以为单位进行传输和处理数据的

数据链路层的三个重要问题

封装成帧

将数据链路层给网络层交付的协议数据单元添加帧头和帧尾的操作称之为封装成帧

在这里插入图片描述

添加帧头帧尾的目的,都是为了以帧为单元传送数据,为了实现数据链路层的功能。

在这里插入图片描述

帧头和帧尾的作用之一就是帧定界

从数据链路层开始,将以太网的数据层封装好MAC帧后,将其交付给物理层,物理层在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送,前导码中的前七个字节为同步码,作用为使接收方的时钟同步,之后的一个字节为帧开始定界符,表明其后面跟随的为MAC帧,另外以太网规定了帧间时间间隔为96比特的发送时间。因此,MAC帧并不需要帧 结束定界符。

透明传输

是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在

数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符

处理方式,通过识别每个帧定界符,对除去第一个以及最后一个帧定界符进行添加转义字符

  • 对于面向字节的链路 使用字节填充的方法实现透明传输

  • 对于面向比特的链路 使用比特填充的方式实现透明传输

为了提高帧的传输效率,应该使帧的数据部分的长度尽可能的大一些

考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的最大长度,即为最大传送单元MTU

差错检错

比特差错,再传输中1变成0,0变成1

误码率

传输错误的比特占所传输总比特总数的比率称之为误码率BER(Bit error rate)

使用差错检错码来检测数据在传输过程之中是否发生了比特差错,是数据链路层的重要问题

eg:MAC帧和PPP帧中都存在一个4字节的FCS字段,目的是为了检测帧在传输过程中是否产生了误码。

奇偶校验

在待发送的数据后面添加一位奇偶校验位,使整个数据中的“1”的个数为奇数或者偶数
在这里插入图片描述

由于这种的误差太大,因此一般不采用。

循环冗余校验CRC(Cyclic Redundancy Check)

  • 双方约定好一个生成多项式G(X)
  • 发送方基于待发送的数据和生成多项式计算出差错检错码(冗余码),将其添加到待传输数据的后面一起传输
  • 接收方通过计算生成多项式来计算收到的数据是否产生的误码

在这里插入图片描述

CRC算法要求生成多项式必须包含最低次项

例子:

在这里插入图片描述

进行除法的运算的时候为异或运算

在这里插入图片描述

[!warning]

  • 检错码只能检测错误,不能纠正错误
  • 纠正错误可使用冗余信息更多的纠错码进行前向纠错,但,纠错码的开销过大,因此在计算机网络中较少使用
  • CRC有很好的检测能力(漏检率低),虽然计算复杂,但是易用硬件实现,因此多用于数据链路层

可靠传输

可靠传输的基本概念

当产生误码的时候,

  • 对于不可靠传输,会丢弃存在误码的帧,其他什么也不做
  • 对于可靠传输服务, 会实现发送端发送什么,接收端就收到什么

[!warning]

在一般的情况下,有线链路的误码率比较低,为了减小开销,并不会要求数据链路层提供可靠服务

但是使用的为无线链路的时候,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务

传输差错

比特差错只是传输差错的一种。

从整个计算机网络体系结构来看:传输差错总共包含三种,分组丢失分组失序分组重复(在这之中,将帧变为了分组)

上述三种差错,一般不会出现在数据链路层之中,而是出现其上层。

可靠传输服务并不局限于数据链路层,其他层均可实现可靠传输

eg:802.11无线局域网要求数据链路层实现可靠传输

以太网不要求数据链路层实现可靠传输

ip向上层提供的是无连接、不可靠的传输服务

TCP向上层提供的是面向连接的可靠传输服务

UDP向上层提供无连接、不可靠传输服务

可靠传输的实现复杂,开销大,是否使用取决于应用需求

以下三种的可靠传输实现机制的基本原理并不局限于数据链路层,可以应用到计算机网络体系结构中的各层协议之中。

停止等待协议

具体实现过程

第一种错误,传输数据data丢失解决办法

在这里插入图片描述

第二种错误 : ACK丢失,导致分组重复的问题

在这里插入图片描述

第三种错误 : ACK时间太长导致的数据重复确认,

解决办法:通过对ACK进行编号

停止—等待协议的信道利用率

从下面这个例子进行理解

在这里插入图片描述

由于Ta远小于Td一般可与忽略

  • 当往返时延RTT远大于数据帧发送时延Td的时候(例如使用卫星电路)信道利用率极低。

  • 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低

回退N帧协议GBN(GO-BACK-N)

  1. 采用3个比特给分组编序,即序号为0~7
  2. 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=5
  3. 接受窗口的尺寸WR的取值:WR=1;

当窗口的值超过其大小的时候,接收方无法分辨新的、旧的分组

累计确认

接收方不一定要对收到的数据分组逐个发送确认而是可以在收到几个数据分组之后,对按序到达的最后一个数据分组发送确认

ACKN表示序号为n及以前的所有数据分组都已正确接收

  1. eg: 发送ACK1说明对1及其以前的数据都存储完成
  2. 发送ACK4说明对4及其以前的数据都存接收完成
  3. 因此即使ACK1丢失,只要ACK4也能够到达,发送方依旧不需要重传

优缺点

  • 减小接收方的开销

  • 减少对网络资源的占用

缺点:不能向发送方及时放映出接收方已经正确接受的数据分组

选择重传协议SR

  1. 采用3个比特给分组编序,即序号为0~7
  2. 发送窗口的尺寸WT的取值:1<WT≤23-1,本例子取WT=4
  3. 接受窗口的尺寸WR的取值:WR=WT=1;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • pg 唯一性约束修复
  • Go语言的编程规则和秘籍
  • dll高级技术--动态注入:ImgWalk动态库,这个DLL用来检测被注入的进程中当前载入的各个模块名称---DLL程序
  • 公安智慧大楼信息化整体建设设计方案
  • Web开发 Ajax 2024/3/31
  • [pytorch] --- pytorch基础之transforms
  • TLS握手性能测试工具:快速重置、多线程与高级统计分析(C/C++代码实现)
  • 深入理解指针(5)
  • 【零知识证明】Groth16
  • 磐石云语音识别引擎
  • 笔记本电脑中怎么查看光驱
  • [VirtualBox+ubuntu24]设置linux学习环境
  • C++笔记14•二叉树之二叉搜索树•
  • while (r > b[i].r) del(a[r--]); while (r < b[i].r)
  • C/C++逆向:寻找mian函数(其他编译配置特征)
  • Apache Spark Streaming 使用实例
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Cookie 在前端中的实践
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Docker下部署自己的LNMP工作环境
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java基本数据类型之Number
  • Mac转Windows的拯救指南
  • Vim 折腾记
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 电商搜索引擎的架构设计和性能优化
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何用vue打造一个移动端音乐播放器
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 物联网链路协议
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # SpringBoot 如何让指定的Bean先加载
  • #etcd#安装时出错
  • (10)ATF MMU转换表
  • (day18) leetcode 204.计数质数
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (区间dp) (经典例题) 石子合并
  • (四)库存超卖案例实战——优化redis分布式锁
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转) ns2/nam与nam实现相关的文件
  • (转)Oracle存储过程编写经验和优化措施
  • .libPaths()设置包加载目录
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net 使用ajax控件后如何调用前端脚本
  • .net经典笔试题
  • .net项目IIS、VS 附加进程调试
  • .NET正则基础之——正则委托
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [20171106]配置客户端连接注意.txt
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解
  • [AutoSAR 存储] 汽车智能座舱的存储需求