目录
一、流水线技术
1. 流水线技术简介
流水线:允许发送方允许发送多个 “在路上的” 且还没有被确认的报文。
- 必须扩大序号的覆盖范围
- 必须在发送方/接收方处设置缓冲区
2. 流水线技术的两种通用形式
- 回退 N 步法(Go-Back-N,GBN)
- 选择重传法(Selective Repeat,SR)
3. 流水线技术提高利用率
U 代表利用率,在这里是指发送方忙于发送的时间的占比。
采用流水线技术,如下图所示。
首个分组的 RTT 以接收到 ACK 的第一个 bit 为止。
此时发送者的利用率为:
可见,在这里流水线技术将发送者的利用率提高了 3 倍。
二、回退 N 步法(GBN)
0. GBN 中的发送方和接收方
1)发送方需要做的:
- 在分组头中规定一个 k 位的序号,则序号范围为 [0,2^k-1]
- 设置窗口:允许连续发送 N 个未被确认的报文
- 设置一个定时器:记录最早的未被确认的报文的发送时间
发送方窗口里报文的状态:
- 已发送但未确认
- 未发送
2)接收方需要做的:
- 设置窗口:每次只接收 1 个期待接收的报文
- 只需要记住被期待接收的序号 ExpectedSeqNum
- 总是为正确接收的最高序号的分组发送 ACK
- 可能生成重复的 ACKs
若接收到失序分组:
- 丢弃该分组,并不会缓冲,因为没有接收缓冲区!
- 重发最高序号分组的 ACK
1. 一次性发送窗口内的 N 个报文
发完这 N 个报文,就停止发送。
2. 报文得到确认时
receiver 确认收到 1 号报文,sender 得到确认,窗口右移一格,sender 发送此前未发送的 5 号报文。
3. 报文丢失时
假设 2 号报文在传输过程中丢失了,那么即使 3 号报文到达了 receiver,receiver 也会拒绝接收它,更不用说反馈确认信息了。对于 4 号报文和 5 号报文也不例外。
在拒绝接收 3 号报文的同时,接收方还会反馈 ack1,以告诉 sender 2 号报文丢失。对于 4 号报文和 5 号报文也不例外。
4. 确认信息超时时
由于 receiver 是一个很专一的人,它拒绝除 2 号报文以外的所有报文,然而 2 号报文又丢失了,因此 receiver 无法反馈确认信息,从而导致 sender 长时间无法收到确认信息。
幸好有一个定时器在记录 2 号报文的确认时间,该 计时器 用于记录最早的未被确认报文的发送时间。它告诉 sender 超时了,于是 sender 重发窗口里的所有报文。
5. 确认信息丢失时
假设 receiver 接收了 2 号报文和 3 号报文,但是相应的确认信息在传输过程中丢失了。而之后 receiver 又接收了 4 号报文,并且其确认信息顺利传输给了 sender 。
sender 认为像 receiver 这样专一又负责的人,一定是已经接收到了 4 号报文之前的所有报文才会反馈 4 号报文的确认信息。因此 sender 放心的右移三次窗口,并且发送在窗口里出现的新报文。
- 暗示当前分组之前的所有分组都被正确接收了
- 窗口可以一次性右移多个位置
6. 举例说明
三、选择性重传法(SR)
1. SR 中的发送方和接收方
1)发送方需要做的:
- 在分组头中规定一个 k 位的序号,则序号范围为 [0,2^k-1]
- 设置窗口:允许连续发送 N 个未被确认的报文
- 设置多个定时器:必须为每个已发送未确认的报文设置一个定时器
发送方窗口里报文的状态:
- 未发送
- 已发送但未确认
- 已发送且已确认
2)接收方需要做的:
- 设置窗口:接收所需的所有分组,包括失序分组和有序分组
- 总是为正确接收的分组发送 ACK,无论是失序分组还是有序分组
接收方窗口里报文的状态:
- 期待接收
- 已接收但未确认
- 已接收且已确认
当接收到分组时,若序号在窗口范围之中:
[rcvbase, rcvbase + N -1]
- 对于失序分组,缓冲但并不交付上层
- 对于有序分组,交付上层,右移窗口(可能不止一格)
个人感觉,有序分组就是序号等于接收窗口基序号的分组。
当接收到分组时,若序号在窗口范围之前:
[rcvbase - N, rcvbase -1]
说明:接收方正确接收了该分组,但是该分组的确认信息丢失了,因此在超时时发送方重发了该分组。解决方法为:接收方重发该分组的确认信息 ACK 。至于范围为什么是这个,是因为发送方只有接收到了接收方的确认信息才能右移窗口。由于发送窗口长度为 N,因此至多可能比接收方少移 N 格。
2. 举例说明
1)接收方总是发送分组自己的 ACK
即使是分组 2 丢失了,接收方反馈的分组 3 确认信息仍为 ack3,而不像 GBN 那样返回 ack1(因为重复的 ack = nak)。
2)接收方接收到缝隙分组将会一起交付
3)发送方在分组超时时自动重发分组
4)发送方接收到失序确认信息将不会右移窗口
3. 选择重传的窗口大小选择
由于在 SR 中,发送方窗口和接收方窗口的滑动是异步的,因此可能出现如下问题。
注意:分组是不同的分组,只不过序号可能相同罢了。
sender 发了 0、1、2 三个分组,receiver 正确接收了并右移窗口三格,但由于 receiver 反馈的 ack0、ack1、ack2 全部丢失了,因此 sender 的窗口无法移动。一段时间后,pkt0 超时,sender 重发 pkt0 。此时接收窗口中的是下一轮的 pkt0,但它会误以为 sender 重发的 pkt0 是这一轮的pkt0,从而导致数据错误。
发生问题的原因是:sender 和 receiver 不知道互相窗口的移动情况。
它们之间有一层厚障壁!
解决方法:使序号范围覆盖两个窗口,即序号范围 ≥ 发送窗口长度 + 接收窗口长度。
从而使序号能够在两窗口间保证唯一性。
今天的文章设计一个流水线可靠数据传输协议都需要哪些核心组件_三层交换机的工作原理是什么[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83049.html