数据链路层协议ARQ

OSI-RM体系结构中,流量控制和差错控制是在数据链路层实现的。

差错控制:

在信息传输过程中,由于种种原因,可能发生“1”变为“0”或“0”变为“1”的情况,这就是出了差错。差错控制可以通过引入奇偶校验码、汉明码、循环冗余校验码等方法实现。在下面的流量控制中,实际上也包含了差错控制功能。

流量控制:

流量控制是协调链路两端发送站和接收站之间的数据传输流量,以保证双方的数据发送和接收达到平衡的一种技术。

在发送方和接收方的数据链路层分别有一个发送缓存和接收缓存,若进行全双工通信,双方都要同时设置发送缓存和接收缓存。缓存是一个存储空间,它是必不可少的,因为通信线路中以比特流形式传输的,而计算机内部传输是以字节并行传输的。

停止等待协议

开关式流量控制:当接收方有足够的缓存空间,发出“开”命令,通知发送方开始发送数据;当接收方来不及处理接受的信息,并且接收缓冲区也被耗尽或将要耗尽时,发出“关”命令,通知发送方停止发送数据。

协议式流量控制:发送时,发送方一次发送完一个数据帧后便主动停止发送,等待接收端会送的应答。如果受到肯定的应答,则继续发送下一帧;如果收到否定应答或在规定时间内没有收到应答,则重发该帧。

滑动窗口协议

允许发送方在收到接收方肯定应答之前连续发送多个帧的策略,就是滑动窗口协议。

发送方未得到确认而允许连续发送帧的最大数目,称为发送窗口尺寸;发送方最早发送但还未收到确认的帧的序号,称为滑动窗口的后沿;发送方在收到确认信号之前允许发送的最后帧的序号,称为发送窗口的前沿。

连续ARQ协议

连续协议中接收窗口固定设置为1,最大发送窗口为2^n-1。n是表示帧的序号所占用的比特数。

正常情况:发送方在发送窗口内连续发送多个帧,接收方每收到一帧确认无误后交给网络层,使接收序号加一,给出应答,准备接收下一帧。

帧丢失或损坏:接收方不能按信号顺序接受到正确的第N帧,后面的帧虽正确但不符合要求。接收方对出错的第N帧和其后的所有帧都要丢弃,对所有丢弃的帧不予应答。

确认应答帧丢失:发送方没有收到某一帧的确认应答,会重复发送该帧和其后面的所有帧。接收方根据帧信号判断是重复帧。对重复帧要丢弃,并依次重新返回应答。

选择ARQ协议

选择协议发送窗口和接收窗口都大于1。最大接收窗口<=2^(n-1)。

由于接收窗口大于1,所以当接收窗口内的某一帧出错时,不影响对其后面帧的接收。如果这些帧经过检查是正确的,可以先保存下来。当发送方发现某帧需要重发时,只重发出错的帧而其后的帧不必重发。接收方收到重发的帧后,可以将其和保存在缓存区的帧重新排序后交给网络层,然后发出累计确认应答。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大眼瞪小眼

操作系统常用算法

介绍:又称为高级调度或长程调度,调度对象是作业。根据作业控制块(JCB)中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中...

4581
来自专栏ericzli

Jetson TX1上安装Tensorflow Serving遇到的问题总结

本文的目的是分享在TX1上安装Tensorflow Serving时遇到的主要问题,避免重复踩坑。

3934
来自专栏Linux内核

Linux OOM机制分析

oom_killer(out of memory killer)是Linux内核的一种内存管理机制,在系统可用内存较少的情况下,内核为保证系统还能够继续运行下去...

1.3K7
来自专栏GAN&CV

ubuntu16.04安装caffe cpu版

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

2634
来自专栏Snova云数仓

gpexpand分析

具体包括不限于以下内容: 创建用户名,设置环境变量,创建数据目录,安装greenplum软件包,解压目录路径。

3.4K6
来自专栏机器学习算法原理与实践

scikit-learn 和pandas 基于windows单机机器学习环境的搭建

    很多朋友想学习机器学习,却苦于环境的搭建,这里给出windows上scikit-learn研究开发环境的搭建步骤。

882
来自专栏深度学习那些事儿

深度学习必备:通过VNC连接ubuntu(linux)工作站

此篇讲解如果通过VNC实现win10电脑操控(ubuntu)linux电脑,只需一个键盘一个鼠标就可以操控两个电脑,实现高效率工作。

6965
来自专栏Python私房菜

实战 | 用aiohttp和uvloop实现一个高性能爬虫

asyncio于Python3.4引入标准库,增加了对异步I/O的支持,asyncio基于事件循环,可以轻松实现异步I/O操作。接下来,我们用基于asyncio...

1613
来自专栏linjinhe的专栏

LevelDB:整体架构

上图简单展示了 LevelDB 的整体架构。LevelDB 的静态结构主要由六个部分组成:

3723
来自专栏Java3y

操作系统第五篇【死锁】

3144

扫码关注云+社区

领取腾讯云代金券