【计算机网络-数据链路层】流量控制与可靠传输机制

news2025/1/19 14:38:16

文章目录

  • 1 停止-等待协议
    • 1.1 无差错情况
    • 1.2 有差错情况——数据帧出错或丢失
    • 1.3 有差错情况——ACK 丢失
    • 1.4 有差错情况——ACK 迟到
    • 1.5 性能分析
    • 1.6 相关例题
  • 2 后退 N 帧协议(GBN)
    • 2.1 无差错情况
    • 2.2 超时重传、回退 N 帧
    • 2.3 相关例题
  • 3 选择重传协议(SR)
    • 3.1 有差错情况
    • 3.2 相关例题
  • 4 总结

自动重传请求(Automatic Repeat reQuest,ARQ)通过接收方请求发送方重传出错的数据帧来恢复出错的的帧。

1 停止-等待协议

为讨论问题方便,设发送方为 A,接收方为 B。

1.1 无差错情况

在这里插入图片描述

  • A 发送数据帧 DATA0,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA0,就向 A 发送确认帧 ACK0
  • A 在超时计时器到期之前,收到数据帧 DATA0 的确认,就再发送数据帧 DATA1,然后再发送数据帧 DATA0,如此反复。

【注】对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有 0 和 1。对确认帧也是同样的道理。

1.2 有差错情况——数据帧出错或丢失

在这里插入图片描述

  • A 发送数据帧 DATA1,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA1,检测到出现了差错,就丢弃数据帧 DATA1;或数据帧 DATA1 在传输过程中丢失了。此时 B 不会发送任何信息。
  • A 的超时计时器到期后,仍未收到确认帧 ACK1,就认为刚才的数据帧丢失了。
  • A 进行超时重传,重新发送数据帧 DATA1,发完就暂停发送,启动超时计时器,等待 B 的确认。

1.3 有差错情况——ACK 丢失

在这里插入图片描述

  • A 发送数据帧 DATA1,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA1,发送确认帧 ACK1,但在传输途中丢失。
  • A 的超时计时器到期后,仍未收到确认帧 ACK1,就认为刚才的数据帧丢失了。
  • A 进行超时重传,重新发送数据帧 DATA1,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA1,重新发送确认帧 ACK1,并丢弃重复的数据帧 DATA1。

1.4 有差错情况——ACK 迟到

在这里插入图片描述

  • A 发送数据帧 DATA0,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA0,发送确认帧 ACK0,但在传输途中遭遇阻塞,未及时传输到 A。
  • A 的超时计时器到期后,仍未收到确认帧 ACK0,就认为刚才的数据帧丢失了。
  • A 进行超时重传,重新发送数据帧 DATA0,发完就暂停发送,启动超时计时器,等待 B 的确认。
  • B 收到数据帧 DATA0,重新发送确认帧 ACK0,并丢弃重复的数据帧 DATA0。
  • A 在超时计时器到期之前,收到这一轮的确认帧 ACK0,就再发送数据帧 DATA1。
  • 这时 A 才收到先前的确认帧 ACK0,A 将该重复的确认帧 ACK0丢弃。

1.5 性能分析

在这里插入图片描述

信道利用率:

U = T D T + R T T + T A \begin{equation} U=\frac{T_D}{T+RTT+T_A} \end{equation} U=T+RTT+TATD

因为确认分组长度远小于数据分组长度: T A < < T D T_A<<T_D TA<<TD,所以又可以化简为:

U = T D T + R T T \begin{equation} U=\frac{T_D}{T+RTT} \end{equation} U=T+RTTTD

【注】设时间 T T T内发送 L L L比特数据,数据传输率为 C C C,则:

信道利用率 = L C T 信道利用率=\frac{\frac{L}{C}}{T} 信道利用率=TCL

信道吞吐率 = 信道利用率 × 发送方的发送速率 信道吞吐率=信道利用率 \times 发送方的发送速率 信道吞吐率=信道利用率×发送方的发送速率

1.6 相关例题

【例 1】主机甲采用停-等协议向主机乙发送数据,数据传输速率是 3kbps,单向传播延时是 200ms,忽略确认帧的传输延时。当信道利用率等于 40% 时,数据帧的长度为(D)。

A. 240 比特

B. 400 比特

C. 480 比特

D. 800 比特

【解】设数据帧长度为 x b x b xb,代入数据得:

信道利用率 = 数据帧的发送时延 数据帧的发送时延 + 单向传播时延 × 2 40 % = x b 3 k b / s x b 3 k b / s + 200 m s × 2 \begin{align*} 信道利用率 &= \frac{数据帧的发送时延}{数据帧的发送时延+单向传播时延 \times 2} \\ 40\% &= \frac{\frac{x b}{3kb/s}}{\frac{x b}{3kb/s} + 200ms \times 2} \end{align*} 信道利用率40%=数据帧的发送时延+单向传播时延×2数据帧的发送时延=3kb/sxb+200ms×23kb/sxb

解得 x = 800 b x=800b x=800b

2 后退 N 帧协议(GBN)

发送窗口:发送方需要维护一个发送窗口 W T W_T WT,在未收到接收方确认分组的情况下,发送方可将序号落入 W T W_T WT内的所有数据分组连续发送出去。采用 n 个比特给分组编序号,则 W T W_T WT的取值范围是 1 < W T ≤ 2 n − 1 1<W_T≤2^n-1 1<WT2n1

【注】若 W T > 2 n − 1 W_T>2^n-1 WT>2n1,则接收方无法分辨新旧数据分组。

接收窗口:接收方需要维护一个接收窗口 W R W_R WR,只有正确到达接收方(无误码)且序号落入 W R W_R WR内的数据分组才被接收方接收。 W R W_R WR的取值只能是 1。

为讨论问题方便,设发送方为 A,接收方为 B,假设采用 3 个比特给分组编序号,则 W T W_T WT的取值范围是 2~7,这里取 W T = 5 W_T=5 WT=5

2.1 无差错情况

  • 初始时:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 发送 W T W_T WT内的序号 0:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 接收方 B 收到序号 0,检查发现序号 0 是 W R W_R WR内,于是接收,并返回 ACK0, W R W_R WR向前移动一个序号。发送方 A 收到 ACK0 后, W T W_T WT向前移动一个序号:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 接下来发送方 A 发送序号 1,跟之前一样的过程。当 A 发完前 5 个数据后的情况如下:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 当然,接收方不必对收到的每一个数据分组都发送一个确认分组,而是可以在收到几个序号连续的数据分组后,对按序到达的最后一个数据分组发送确认分组,这叫累积确认。ACKn 表明序号为 n 及之前的所有数据分组都已正确接收(如 ACK4 表示序号 0~4 已正确接收):
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认

2.2 超时重传、回退 N 帧

  • 初始时:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 发完 W T W_T WT的 5 个数据,序号 0 和序号 1 没有问题,接收方 B 依次返回了 ACK0 和 ACK1, W T W_T WT W R W_R WR向前移动到相应位置。但序号 2 出现了误码,被接收方 B 丢弃,同时重复发送 ACK1(接收方必须按序接收数据分组);之后 B 收到正确的序号 3 和 4,但因为没有落入 W R W_R WR,所以都被丢弃,且 B 重复发送了两次 ACK1:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 针对序号 2 的重传计时器已经超时,但仍未等来 B 发来的 ACK2,因此 A 重发 W T W_T WT的 5 个数据(注意与初始时所发数据不同了)。这次接收方 B 收到了正确的数据,并依次返回 ACK:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认

2.3 相关例题

【例 1】数据链路层使用后退 N 帧(GBN)协议,发送方已经发送了编号 0~7 的帧。当计时器超时时,若发送方只收到了 0、2、3 号帧的确认,则发送方需要重发的帧数是(C)。

A. 2

B. 3

C. 4

D. 5

【例 2】主机甲与主机乙之间使用后退 N 帧(GBN)协议传输数据,甲的发送窗口尺寸为 1000,数据帧长为 1000 字节,信道带宽为 100Mbps,乙每收到一个数据帧就立即利用一个短帧(忽略其传输延迟)进行确认,若甲乙之间的单向传播延迟是 50ms,则甲可以达到的最大平均数据传输速率约为(C)。

【解】

在这里插入图片描述

最大平均数据传输速率 = 可发送的数据量 数据帧的发送时延 + 单向传播时延 × 2 = 1000 × 8 × 1000 1000 100 × 1 0 6 + 50 × 1 0 − 6 × 2 = 80 M b p s \begin{align*} 最大平均数据传输速率 &= \frac{可发送的数据量}{数据帧的发送时延+单向传播时延 \times 2} \\ &= \frac{1000 \times 8 \times 1000}{\frac{1000}{100 \times 10^{6}} + 50 \times 10^{-6} \times 2} \\ &= 80Mbps \end{align*} 最大平均数据传输速率=数据帧的发送时延+单向传播时延×2可发送的数据量=100×1061000+50×106×21000×8×1000=80Mbps

3 选择重传协议(SR)

为了使发送方仅重传出现差错的数据分组,接收方不再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认。用 n ( n > 1 ) n(n>1) n(n>1)个比特给分组编号:

{ 1 < W R ≤ W T W T + W R ≤ 2 n \left\{ \begin{aligned} %\nonumber 1<W_R≤W_T\\ W_T+W_R≤2^{n}\\ \end{aligned} \right. {1<WRWTWT+WR2n

因此有: 1 < W R ≤ 2 n − 1 1<W_R≤2^{n-1} 1<WR2n1

W R W_R WR取最大值 2 n − 1 2^{n-1} 2n1时, W R W_R WR也取最大值 2 n − 1 2^{n-1} 2n1

【注】为何如此取值?

  • 1 < W R ≤ W T 1<W_R≤W_T 1<WRWT W R W_R WR超过 W T W_T WT没有意义。
  • W T + W R ≤ 2 n W_T+W_R≤2^{n} WT+WR2n:确保接收窗口向前滑动后,落入接收窗口内的新序号与之前的旧序号没有重叠,避免无法分辨新旧数据分组。

现假设采用 3 个比特给分组编序号,则序号范围是 [ 0 , 2 3 − 1 ] [0,2^3-1] [0,231],发送窗口取最大值 W T = 2 3 − 1 = 2 2 W_T=2^{3-1}=2^2 WT=231=22,接收窗口取最大值 W R = 2 3 − 1 = 2 2 W_R=2^{3-1}=2^2 WR=231=22

3.1 有差错情况

  • 初始时:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 发送 W T W_T WT内的序号 0~3:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 接收方 B 只收到序号 0 和序号 2,序号 1 丢失,序号 3 误码被 B 丢弃。于是 B 发送 ACK0 和 ACK2:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 针对序号 1 和序号 3 的重传计时器已经超时,所以重新发送序号 1 和序号 3。接收方 B 正确接收后发送 ACK1 和 ACK3:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认
  • 发送方 A 收到 ACK 后,双方的滑动窗口向前移动,继续下一轮传输:
数据序号01234567012
发送方 A 的 W T W_T WT
发送方 A 已发送
接收方 B 的 W R W_R WR
接收方 B 已确认

3.2 相关例题

【例 1】数据链路层采用选择重传协议(SR)传输数据,发送方已发送了 0~3 号数据帧,现已收到 1 号帧的确认,而 0、2 号帧依次超时,则此时需要重传的帧数是(B)。

A. 1

B. 2

C. 3

D. 4

4 总结

协议发送窗口 W T W_T WT接收窗口 W R W_R WR
停止-等待协议 1 1 1 1 1 1
后退 N 帧协议 1 < W T ≤ 2 n − 1 1<W_T≤2^n-1 1<WT2n1 1 1 1
选择重传协议 1 < W R ≤ W T , W T + W R ≤ 2 n 1<W_R≤W_T, W_T+W_R≤2^{n} 1<WRWT,WT+WR2n 1 < W R ≤ 2 n − 1 1<W_R≤2^{n-1} 1<WR2n1

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

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

相关文章

AX7A200教程(6): 串口接收图片数据,通过hdmi接口输出显示

本章节主要使用uart接收图片数据&#xff0c;然后通过ddr3缓存&#xff0c;最后通过hdmi接口显示输出&#xff0c;功能框图如下图所示 uart接收的图片数据位1024*768*3分辨率大小的数据&#xff0c;一共2359296个字节&#xff0c;输入图片如下图所示 图片属性 串口接收数据&…

基于matlab分析卫星星座对通信链路的干扰

一、前言此示例说明如何分析从中地球轨道 &#xff08;MEO&#xff09; 中的卫星星座到位于太平洋的地面站的下行链路上的干扰。干扰星座由低地球轨道&#xff08;LEO&#xff09;的40颗卫星组成。此示例确定下行链路闭合的时间、载波噪声加干扰比以及链路裕量。此示例需要卫星…

锚框+ssd v2 整合笔记

13.4. 锚框 — 动手学深度学习 2.0.0 documentation 13.7. 单发多框检测&#xff08;SSD&#xff09; — 动手学深度学习 2.0.0 documentation 锚框 一.归一化推导公式 目标检测SSD | Lee的个人博客 之前笔记有点错误 https://mp.csdn.net/mp_blog/creation/editor/129528…

输入电阻、输出电阻、特性阻抗、阻抗匹配

一、输入阻抗和输出阻抗 1.输入阻抗 输入阻抗&#xff08;input impedance)是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U&#xff0c;测量输入端的电流I&#xff0c;则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端&#xff0c;这个电阻的阻值&#…

云原生助力数字原生企业业务快速迭代|阿里云峰会精彩回顾

导语&#xff1a; 4月11日&#xff0c;2023 阿里云峰会如期举行。一直以来&#xff0c;阿里云都积极融入企业数字原生创新发展的新浪潮&#xff0c;是中小企业走向数字原生坚实的支持者。阿里云坚持以数据和智能驱动&#xff0c;与合作伙伴、企业客户一起专注于技术创新&#x…

《Scikit Learn | MorvanZhou 》learning notes

学习资源 https://scikit-learn.org/stable/https://morvanzhou.github.io/tutorials/machine-learning/sklearn/ 文章目录1 Why Scikit Learn2 通用学习模式&#xff08;牛刀小试 pipeline&#xff09;3 sklearn 强大数据库&#xff08;Loaders / Sample Generator&#xff0…

new/delete内存分配操作符

目录 一、C/C的内存分布 二、new与delete操作符 1.new/delete 的使用 2.new申请失败抛异常 3.new/delete操作内置类型 4.new/delete 操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 1.对于内置类型 2.对于自定义类型 ①new的实现…

Prophet学习(四)趋势Changepoints

目录 趋势Changepoints&#xff08;Trend Changepoints&#xff09; Prophet中的自动更改点检测&#xff08;Automatic changepoint detection in Prophet&#xff09; 调整趋势灵活性&#xff08;Adjusting trend flexibility&#xff09; 指定变更点的位置&#xff08;Spe…

DnCNN-pytorch版本代码运行环境配置

一、DnCNN-pytorch相关下载 (1)DnCNN-pytorch版本代码下载 https://download.csdn.net/download/qq_41104871/87457414 (2)GPU版本的torch0.4.1下载 https://download.csdn.net/download/qq_41104871/87658469 (3)相对应的torchvision0.2.1下载 https://download.csdn…

Redis多级缓存搭建(结合案例学习)

文章目录一. JVM进程缓存1. 在docker中安装Mysql服务2. 向数据库中导入数据和导入案例代码3. 在dokcer中部署nginx服务器实现方向代理4. 在nginx目录下导入主页面5. 配置nginx实现反向代理6. 初步认识Caffine7. 使用Caffeine实现本地进程缓存8. 总结二. LUA语法1. 初识Lua2. 基…

TCP并发服务器模型

文章目录1. 循环服务器2. 并发服务器2.1 多进程并发服务器2.2 多线程并发服务器3. 基于TCP的文件传输服务(目前只有下载)1.tftp下载模型2.TFTP通信过程总结3.tftp下载协议分析1. 循环服务器 一次只能处理一个客户端&#xff0c;等这个客户端退出后&#xff0c;才能处理下一个客…

vue大坑:v-for的key以及props传参不当导致的闭包

为什么props传参在模版中使用没问题&#xff0c;在函数中使用不变化 场景 当我们点击上方的月份时&#xff0c;会改变下方加载的卡片信息 代码&#xff1a; 父组件&#xff1a; <divv-for"(item, index) in vocalStore.getCardMonthData":key"index"…

电梯导航案例

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>小兔鲜儿 - 新鲜 惠民 快捷!</title><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"render…

WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)

问题描述 前几天&#xff0c;发现每次打开wps时机箱风扇就转得厉害&#xff0c;把WPS界面叉掉后&#xff0c;桌面的任务栏—就是桌面最下面得黑框框—显示Windows图标和时间日期的那个地方也没有WPS任务&#xff0c;但是机箱还是响的厉害&#xff0c;检查了任务管理器发现一直…

SpringBoot自动配置的原理是什么?

自动配置的核心就在SpringBootApplication注解上&#xff0c;SpringBootApplication这个注解底层包含了3个注解&#xff0c;分别是&#xff1a; SpringBootConfiguration ComponentScan EnableAutoConfiguration EnableAutoConfiguration这个注解才是自动配置的核心。 它封…

速Raysync v6.6.8.0版本发布

最近镭速发布了v6.6.8.0版本&#xff0c;已经发布上线了。主要更新内容有服务器下发任务支持指定客户端&#xff0c;客户端增加日志清理和日志压缩&#xff0c;自动删除源文件保持源目录结构&#xff0c;支持将文件投递给其他成员等功能&#xff0c;详细的更新内容如下&#xf…

Flink DataStream读写Hudi

一、pom依赖 测试案例中&#xff0c;pom依赖如下&#xff0c;根据需要自行删减。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-ins…

HTML+CSS+JS 学习笔记(一)———HTML(下)

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;前端 &#x1f331;往期回顾&#xff1a;HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(上) HTMLCSSJS 学习笔记&#xff08;一&#xff09;———HTML(中) &#x1f618;博客制作不易…

Linux工具——gcc和gdb

&#x1f3c0;博主主页 &#x1f3c0;gitee主页 目录&#x1f3c0;Linux编译器-gcc⚽️gcc使用⚽️函数库&#x1f3c0;Linux调试器-gdb⚽️简介⚽️gdb使用&#x1f3c0;Linux项目自动化构建工具-make/Makefile⚽️简介⚽️依赖关系⚽️make/Makefile实现原理⚽️项目清理&…

证明电压电流相位差的余弦值和功率因数相等

证明&#xff1a;“电压电流相位差的余弦值”和“功率因数”相等。 电压电流相位差的余弦值和功率因数相等&#xff0c;这在《电路分析》中给出过结论&#xff0c;但没有给出详细的证明过程。其次&#xff0c;在电气工程师考试中&#xff0c;也会经常遇到。 电压电流相位差&am…