计网笔记 数据链路层 (1-2) 封装成帧、差错控制、流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)

文章目录

  • 前言
    • 在这里插入图片描述
  • 零、数据链路层基本概念
  • 一、功能
    • 0、数据链路层功能概述
    • 1、封装成帧和透明传输
      • 1.1封装成帧
      • 1.2 透明传输
      • 1.3组帧方法
    • 2、数据链路层的差错控制
      • 2.0差错从何而来
      • 2.1位错(比特错,1变成0,0变成1)
      • 2.2帧错(丢失,重复,失序)定时器、编号机制
    • 3、流量控制 ★★★
      • 3.1 基本概念
      • 3.2 流量控制的方法
      • 1、停止等待协议(效率低一些)
      • 2、滑动窗口协议(效率高一些)
      • 2.1 后退N帧协议(GBN)
      • 2.2 选择重传协议(SR)(目前最好的)
    • 4、可靠传输★★★


前言

在这里插入图片描述

零、数据链路层基本概念

1、结点:主机、路由器

2、链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。

3、数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。

4、帧:链路层的协议数据单元,封装网络层数据报

数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送网络层给的数据报。
<注意>
在分析数据链路层时,看成水平方向的数据链路层数据传输。

一、功能

0、数据链路层功能概述

概述:
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

<举例>
boosA (网络层)让 秘书A(数据链路层)送一份文件给boosB,秘书A将文件拆分并编号让傻子A(物理层)送到秘书B手上,这个过程物理层可能会丢失数据,根据编号可以把数据重新找回来

功能:

功能一:为网络层提供服务。
无确认无连接服务:通常用于实时通信,误码率较低的信道
有确认无连接服务:步提前建立连接,对方收到会返回一个确认帧。等不到的话就重新发
有确认面向连接服务:最可靠

功能二:链路管理。即连接的建立、维持、释放
功能三:组帧
功能四:流量控制
功能五:差错控制(帧错/位错)

1、封装成帧和透明传输

1.1封装成帧

封装成帧:就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,其中有一样叫:帧定界(确定帧的界限)。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
在这里插入图片描述

1.2 透明传输

透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。(就不用管内容是什么,直接传就完事儿了)

1.3组帧方法

1、字符计数法
就是在帧的首部做计数,这个字符记录了当前帧有多少个字符。
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧比如311和4222,如果前面的帧丢失变成31,那么后面的4就会被补到前面变成314导致错误
在这里插入图片描述

2、字符填充法
就是加头加尾分别标记开始结束,和零比特填充法(见下)对比,开始和结束的对应的字符不一样
在这里插入图片描述解决方法:添加转义字符。即对于那些与标记字符重复的数据流。在它们的前面添加一段转义字符,这祥接收方在解析帧时。看到这些转义字符就不会认为那些特殊的数据当成帧的开始/结束了。
在这里插入图片描述
3、零比特填充法(普遍)
和字符填充法不一样的点在于:开始和结束的对应的标志字符是一样的。
在这里插入图片描述<无论五个1后面是1还是0,都加一个0。这样接收端和发送端处理数据都便捷>
开始和结束时六个1

4、违规编码法(普遍)
曼彻斯特在编码的时候,前高后低记为1(高低),前低后高记为0(低高)。所以数据中不会出现高高和低低。
在这里插入图片描述

2、数据链路层的差错控制

2.0差错从何而来

在这里插入图片描述

2.1位错(比特错,1变成0,0变成1)

在这里插入图片描述

1、检错编码(奇偶校验码、循环冗余码CRC,在数据最低位加上一位或几位数据)

1.1 奇偶校验码
奇偶校验:只需包含1个附加比特。
对于偶校验,选择一个值,使得所有比特中1出现偶数次。
对于奇校验,选择一个值,使得所有比特中1出现奇数次。接收方通过检测1出现的次数判断是否出现差错。如果出现偶数个比特差错,则检验不出

缺点:只能检测出奇数个比特错误,检测成功率位50%。
偶数个比特错误:比如111这串数字,冗余码给1,那么规则就是偶检验。但如果变成1001,1的个数也是偶数,但是数据已经错了

在这里插入图片描述

2、循环冗余码CRC
在这里插入图片描述在这里插入图片描述>CRC:循环冗余法 FCS:冗余码
在这里插入图片描述

可靠传输:数据链路层发送端发送什么,接收端就收到什么。
链路层使用CRC检验,能够实现无比特差错的传输,是指帧中不会出现位错,但是有的出现位错的帧会被丢弃,所以还不能叫做可靠传输

2、纠错编码(海明码)(发现错误、找到位置、纠正错误)(校验码位置不一定在最低位)

在这里插入图片描述

1、确认校验码位数r:设数据k位,校验码r位,k+r个数据,每个数据各错一次的情况就是 k+r 种情况,还有个情况是不出错,所以+1。r位校验码每一个无非是0或者1,所以可以表现2r种情况。所以海明不等式是:2r >= k+r+1。计算的时候把r带入,暴力计算就行。
在这里插入图片描述

2、确认校验码和数据位置
刚刚求出校验码是三位,从低位到高位分别填在20、21、22 的位置。原本的数据从高到低补入
在这里插入图片描述

3、求出校验码的值
比如x4,所在的位置是100,那么它就管理位置是1**类型的数。如果是偶校验,那么它所管理的4、5、6、7号数(110x)就要有偶数个1,所以推出x4 = 0
在这里插入图片描述
4、检错并纠错
在这里插入图片描述
在这里插入图片描述

2.2帧错(丢失,重复,失序)定时器、编号机制

3、流量控制 ★★★

3.1 基本概念

较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。

数据链路层与传输层流量控制的区别
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。(接收到且还有余力再接收,才会回复确认信息)
传输层流量控制手段:接收端给发送端一个窗口公告。(告诉发送端接收了多少,还能接收多少)

3.2 流量控制的方法

1、停止等待协议(效率低一些)

在这里插入图片描述在这里插入图片描述1.1 无差错情况
发送方发送一个帧,接收一个确认信号即可。
在这里插入图片描述
1.2 有差错情况

停止等待协议的有差错情况:
使用一个超时计时器,每发一帧就开始计时,设置时间略长于一个RTT (往返时延)

发送端发送数据开始,到发送端收到来自接收端的确认 (接收端收到数据后便立即发送确认),总共经历的时延
RTT=传播时延x2+处理时间(有时可能直接忽略)

1.2.1 数据帧丢失或者检测到帧出错的情况
数据帧丢失 : 压根没有接收到
检测到帧出错的情况 : 接收到了但是检测到帧出错
这两种都不能算正确接收,所以接收方不会返回一个接收信号。

数据帧和确认帧都需要进行编号
如果连续出现相同的发送序号的数据帧,说明发送端出现超时重传。(帧丢失)
连续出现序号相同的确认帧,说明接收方收到了相同的重复的帧(帧重复)

在这里插入图片描述1.2.1 ACK丢失
在这里插入图片描述

1.2.1 ACK迟到

当发送完数据帧1以后,应该收到确认帧1,此时收到确认帧0就知道是来迟了,直接丢掉。

在这里插入图片描述

如果是在发送第二个数据帧0之后收到第一个确认帧0,那么就会理解发送数据帧1,此时第二个确认帧0回来了,会被丢弃,因为此时在等待的是确认帧1。

1.3 停止等待协议的特点
优点:简单
缺点:信道利用率太低
在这里插入图片描述
在这里插入图片描述

2、滑动窗口协议(效率高一些)

在这里插入图片描述发送方可以连续发送:发送窗口里面的多个帧,而不是接收到一个帧才能发下一个。接收方接收到第一个信号就会移动一个接收窗口,然后给发送发一个确认信号。接收方接收到一个确认信号才能移动一格发送窗口。

2.1 后退N帧协议(GBN)

因为停止等待协议太浪费时间了,所以尝试采用GBN,发送连续多个数据帧,以增大信道利用率
在这里插入图片描述

累计确认
就是收到一个确认,那么它和它之前的所有帧都默认已收到

超时事件
举个例子
发送方:发送0,1,2,3,4。在这个过程中,接收方先接收到0,返回ack0,于是它开始等1,但是它收到2、3以后都没有收到1,那么他就清楚1丢失了,于是默认1后面收到的数据都是丢失的。于此同时,发送方在一个计时器以后没能等到ack1,就会从1开始重新传(1,以及1以后的都重新传)

在这里插入图片描述

举个例子
发送方发送:0、1、2、3、4、5
但是接收方接到0、1、3、4、5
于是expectedseqnum = 3 接到的4、5会被丢弃。接收方重新发送ack2(为最近按序接收的帧重新发送ACK)

下图是一个实例
注释:此图发送2顿时丢失,所以接收方几首收到后面的帧也是直接丢弃并且发送最晚收到的有效帧1的ACK,直至2顿的超时重传机制被触发进行重传并得到ACK之后接收方才会接受2顿以及后面的顿如果所示,GBN的形式就像排队,接收端为所有帧“预定”了接收位置,如果接收端发送的数据因为某些原因没有接收到,即使收到了这一帧后面所有的帧,这些“排在后面的”帧也要被丢弃
在这里插入图片描述

发送窗口不能无限大,与使用的编号的比特数有关
二进制表示。很简单,就是1比特编号0和1,
同理2比特编号0-3,二进制表示就是00,01,10,11。
在这里插入图片描述

GBN优缺点
优点:相对于上面的停止等待协议,明显提高了信道利用率,
缺点:因为重传机制的原因,导致已经收到数据却需要强行丢弃,进而造成浪费

在这里插入图片描述Q:为什么最后一个公式是100010008,而不是1000,100.8ms不是传输一帧的速率吗

2.2 选择重传协议(SR)(目前最好的)

在这里插入图片描述1、GBN协议的弊端

GBN中的累计重传机制会导致批量重传,一个帧传错了,它后面所有的帧都要重传一次。

优化思路是:那么可不可以只重传出错的帧?

——可以,设置单个帧的确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧。

2、选择重传协议中的滑动窗口
在这里插入图片描述3、SR发送方必须相应的三件事

  1. 上层的调用

从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

  1. 收到了一个ACK

如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前(右)移动到具有最小序号(窗口内)的未确认帧处。(别管什么最小,其实就是移动到第一个还没确认帧的窗口那)如果窗口移动了并且有序号在窗口内的未发送帧,则发送者些帧。

  1. 超时事件

每个帧都有自己的计时器,一个超时事件发生后只重传一个帧。

4、SR接收方要做的事

对接收窗口内应收到的帧来者不拒。SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个帧的确认帧**(收谁确认谁)**,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
在这里插入图片描述

以下是一个运行中的SR例子

运行中的SR(假设发送窗口和接收窗口尺寸都为4)
在这里插入图片描述

5、滑动窗口长度

Q:窗口长度可以无限吗?以下两种情况出现不同的错误,但是接收端都接到一个0号帧(不知道是第几个0号帧)
在这里插入图片描述第一种情况:ack0、ack1、ack2全部丢失,计时器超时以后发送端重新发送,接收端收到的是第一个0号帧;

第二种情况:ack2丢失,接收端将会收到第二个0号帧;

问题在于 发送窗口 相对于 帧的编号 比过大。

发送窗口最好等于接收窗口(大了会溢出,小了没意义)

WTmax=TRmax=2n−1

T为Send Window发送窗口
R为Receive Window接收窗口
n为用多少比特来编帧的序号。

本题中0、1、2、3共4位可以用2bit来编,所以本题中的n为2,窗口小于等于2时就不会出现问题。

6、SR协议重点总结

  1. 对数据帧逐一确认,收一个确认一个;

  2. 只重传出错帧

  3. 接收方有缓存

  4. 滑动窗口大小应小于等于WTmax=TRmax=2n−1

在这里插入图片描述
在这里插入图片描述

4、可靠传输★★★

可靠传输是发送端发送什么,接收端就要受到什么

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复习一周,面了京东和百度,不小心都拿了Offer...

我个人情况是5年软件测试经验&#xff0c;在家复习了一周&#xff0c;面了京东和百度&#xff0c;都顺利拿下offer&#xff0c;下面是我的面试经历分享&#xff0c;希望能带来一些不一样的启发和帮助。 两家公司最常问的就是下面这些问题&#xff1a; 请介绍一下你之前做过哪些…

String类

目录 一.认识 String 类 二.常用方法 1.字符串构造&#xff08;定义&#xff09; 2.字符串指为空和null 3.String对象的比较 &#xff08;1&#xff09;equals和的区别 &#xff08;2&#xff09;compareTo比较 4.字符串查找 5.字符串转化 &#xff08;1&#xff09;…

前几天面了个32岁的测试员,年薪50w问题基本都能回答上,应该刷了不少八股文···

互联网行业竞争是一年比一年严峻&#xff0c;作为测试工程师的我们唯有不停地学习&#xff0c;不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水&#xff0c;进入心仪的企业&#xff08;阿里、字节、美团、腾讯等大厂.....&#xff09; 所以&#xff0c;大家就迎来了…

centerpoint论文和代码解读

目录 一、序论 二、论文结构 三、代码 论文地址&#xff1a; https://arxiv.org/pdf/2006.11275.pdf 代码地址&#xff1a;tianweiy/CenterPoint (github.com) 一、序论 centorpoint是一种anchor-free的方法&#xff0c;直接预测物体的中心点&#xff0c;然后直接回归其wh…

【C++】unordered_map与unordered_set(系列关联式容器)

文章目录 1.unordered系列关联式容器2. unordered_map3.unordered_set 1.unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;如map和set&#xff0c;它们在查询时效率可达logN&#xff0c;即最差情况下需要比较红黑树的高度…

将 Segment Anything 扩展到医学图像领域

文章目录 前言技术交流SAM 拆解分析从医学角度理解 SAM 的效用MedSAM实验总结 前言 SAM 是一种在自然图像分割方面取得成功的模型&#xff0c;但在医学图像分割方面表现不佳。MedSAM 首次尝试将 SAM 的成功扩展到医学图像&#xff0c;并成为用于分割各种医学图像的通用工具。为…

一文读懂 DNS 解析

导读 文章为“一文读懂域名与网站系列”第二篇&#xff0c;上篇文章主要介绍了域名的注册、建站和管理&#xff0c;通过本文你可以了解以下几个问题&#xff1a; 域名的结构、常用解析记录的类型 DNS 解析的过程 DNS 解析拓展知识 众所周知&#xff0c;互联网中的地址其实是…

Invicti v23.5 for Windows 发布 - 企业应用安全测试

Invicti v23.5 for Windows - 企业应用安全测试 Invicti Standard 11 May 2023 v23.5.0.40516 请访问原文链接&#xff1a;https://sysin.org/blog/invicti/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Invicti 是一种自动…

ESP32在linux下烧录,提示权限有问题,解决方法

执行idf.py -p /dev/ttyACM0 flash下载时&#xff0c;提示这个错误 serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: /dev/ttyACM0 解决方法&#xff1a; 1检查串行端口 /dev/ttyUSB0 是否已被其他程序占用…

系统分析师之项目管理(十七)

一、范围管理 范围管理&#xff1a;确定项目的边界&#xff0c;即哪些工作是项目应该做的&#xff0c;哪些工作不应该包括在项目中。 二、时间管理 时间管理&#xff1a;也叫进度管理&#xff0c;就是用科学的方法&#xff0c;确定目标进度&#xff0c;编制进度计划和资源供应计…

SpringBoot整合Swagger

Swagger的作用&#xff1a;生成前后的接口文档&#xff1a; 了解Swagger的概念及作用 掌握在项目中集成Swagger自动生成API文档 一、SpringBoot集成Swagger 1.依赖&#xff1a; <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><depe…

【A、B、C、D、E类IP地址划分依据,你都会吗?】

IP 地址的格式&#xff1a;IP 地址 网络地址 主机地址 如果 IP 进行了子网划分&#xff1a; 则IP地址网络地址子网地址主机地址 网络地址是互联网上的节点在网络中具有的逻辑地址。MAC 地址&#xff0c;处于数据链 路层&#xff0c;IP 地址处于网络层&#xff0c;端口号处…

人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么?

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么&#xff1f;在自然语言处理中&#xff0c;上采样、下采样、负采样都是用于处理数据不平衡问题的技术&#xff0c;目的是为了优化模型的训…

C# 对PdfiumViewer工具栏进行自定义,实现放大缩小,首页, 尾页,上一页等功能。

文章目录 前言PdfiumViewer工具栏扩展1 创建winform工程&#xff0c;UI界面2 打印预览3 放大功能4 缩小功能5 按比例缩放6 全屏7 首页和尾页8 上一页和下一页9 页码输入框10 显示当前预览的页码 小结 前言 关于PdfiumViewer的介绍 C# 使用PdfiumViewer实现对PDF文档打印预览&a…

路径规划算法:基于麻雀优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于麻雀优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于麻雀优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法麻雀…

Qt使用星空图作为窗口背景,点击键盘的WASD控制小飞机在上面移动。

事件函数的使用依托于Qt的事件机制&#xff0c;一个来自于外部事件的传递机制模型如下所示 信号槽虽然好用&#xff0c;但是无法包含所有的情况&#xff0c;事件函数可以起到对信号槽无法覆盖的一些时机进行补充&#xff0c;事件函数的使用无需连接。 常用的事件函数如下所示。…

【Mysql实战】使用存储过程和计算同比环比

背景 同环比&#xff0c;是基本的数据分析方法。在各类调研表中屡见不鲜&#xff0c;如果人工向前追溯统计数据&#xff0c;可想而知工作量是非常大的。 标题复制10行&#xff0c;并且每行大于10个字符【源码解析】SpringBoot接口参数【Mysql实战】使用存储过程和计算同比环比…

vite跨域问题,你可能需要看这篇文章

最近在学习项目的时候&#xff0c;使用了vite工具进行构建&#xff0c;然后出现了跨域的问题&#xff0c;中间的曲折不过多叙述&#xff0c;直接进入正题。 前端成功启动后的界面&#xff1a; 然后在后端进行的Controller上使用了如下的配置 然后浏览器就会出现跨域的问题 为什…

【论文复现】基于区块链的分布式光伏就地消纳交易模式研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

UE4及Airsim安装时遇到的问题及解决办法

UE4及Airsim安装时遇到的问题及解决办法 目录 UE4及Airsim安装时遇到的问题及解决办法前言UE4下载慢解决方法 Airsim编译过程中提示&#xff1a;无法打开包括文件: “Eigen/Dense”: No such file or directory [D:\software\Visual_studio2022\2022Community\AirSim\Air解决办…