文章目录
- 一. 流量控制
 - ① 必要性
 - ② 数据链路层 VS 传输层
 - ③ 定义
 - ④ 方法
 - 1)停止等待协议
 - 2)滑动窗口协议
 - 关系:
 - 包括:
 
- 3)协议对比
 
- 二. 停止-等待协议
 - 必要性
 - 应用情况
 - ① 无差错情况
 - ② 有差错情况
 - 1)数据帧丢失,或检测到帧出错。
 - 2)ACK丢失
 - 3)ACK迟到
 
- ③ 性能分析
 - 结论
 - 解析图
 - 信道利用率 && 信道吞吐率
 - 1)定义
 - 2)例题
 
- 三. 后退N帧协议(GBN)
 - ① GBN的滑动窗口
 - ② GBN发送方要做的三件事
 - ③ GBN接收方要做的事
 - ④ 运行图
 - ⑤ 滑动窗口长度
 - ⑥ GBN重点总结
 - ⑦ 例题
 - ⑧ 性能分析
 
- 四. 选择重传协议(SR)
 - ① 滑动窗口
 - ② SR发送方必须响应的三件事
 - ③ SR接受方要做的事
 - ④ 运行图
 - ⑤ 滑动窗口长度
 - ⑥ SR协议重点 && 例题
 - 重点
 - 例题
 
- ⑦ 思维导图
 
ppt来源:王道考研B站教程
一. 流量控制
① 必要性
较高的发送速度和较低的接收能力不匹配的话,会造成传输出错
② 数据链路层 VS 传输层
| 层 | 模式 | 流量控制手段 | 
|---|---|---|
| 数据链路层 | 点对点 | 收不下就不回复确认 | 
| 传输层 | 端到端 | 给发送端一个窗口公告 | 
③ 定义
控制发送速率,使接收方有足够的缓冲空间来接收每一个帧。
④ 方法
1)停止等待协议
2)滑动窗口协议
关系:
解决了流量控制,以及可靠传输(通过发送方自动重传)
包括:
- 后退N帧协议(GBN)
 - 选择重传协议(SR)
 
3)协议对比
也就是说,其实停等协议也可以看成是一种滑动窗口协议。
 
二. 停止-等待协议
下简称”停等协议“
必要性
- 底层信道会出现丢包问题。
 - 流量控制
 
应用情况
① 无差错情况
0帧、1帧为编号。ACK为确认帧。(acknowledgement frame)
 注意:帧编号可以重复利用,比如此处0,1就是不断给新帧重复使用的。
 
② 有差错情况
停等协议的有差错情况,都是基于超时计时器来进行处理的。
 让我们在第一种差错情况中对超时计时器进行更多的介绍。
1)数据帧丢失,或检测到帧出错。
- 数据帧丢失:即接收端并没有接收到数据帧。
 - 检测到帧出错:接收端接收到了数据帧,但是检测到数据帧出错了。
 
这两种都产生一样的结果:接收端不返回ACK。
下图中,感叹号部分的原因为:
- 保留副本:可能需要重新发送这个帧(由于之前丢失或出错)。
 - 必须编号:防止重复。

 
2)ACK丢失
描述:接收端接收到数据了,但是发送给发送端的ACK丢失了的情况。
解决流程:
 i) 由于没有回收到ACK,触发了超时计时器,发送端重新发送当前数据帧。
 ii) 接收端再次收到当前数据帧,由于我们有编号,于是判断这是重复帧,丢弃重复帧,并且再次传ACK。
 iii) 发送端接收到ACK,错误解决。(当然,如果又丢失则继续这个流程)
 
3)ACK迟到
描述:接收端接收到数据了,但是ACK迟到了,触发了超时计时器的情况。
解决流程:
 i) ACK迟到导致触发超时计时器,发送端重传数据帧。
 ii) 接收端收到重复数据帧,丢弃重复帧,并重传ACK。
 iii) 发送端在某刻终于收到迟到ACK,由于编号重复,丢弃迟到ACK。

③ 性能分析
结论
简单,信道利用率太低。
解析图
可见一个周期中,RTT占了很大的比例。
 
信道利用率 && 信道吞吐率
1)定义

2)例题
- RTT = 双向传播事延 = 2 * 30ms
 - 此处TD = L / 4kb/s,TA题干未给,不计。(见解析图中的公式变量。)

 
三. 后退N帧协议(GBN)
GBN:Go Back N
首先来一个GBN协议与前面的停等协议的对比图吧!
 停等协议  |  GBN协议 | 
由停等协议到GBN协议,有两个前提:
- 必须增加序号范围
 - 发送方要缓存多个分组
 
① GBN的滑动窗口
传送帧分为三个部分:
- 发完被确认的帧
 - 还能发送的帧(即正在发送窗口里的帧)
 - 还不能发的帧

 
② GBN发送方要做的三件事
简单来说,就是:
- 与上层的交流:上层发送数据,发送方如果窗口满,则退还数据给上层。(实际可以缓存数据)
 - 对ACK采取累计确认方式。
这里要举个例子:发送0、1、2,只返回ack1,则说明:0,1都收到,重传2。而非只收到1。 - 超时事情处理:重传所有已发但未确认帧。
举个例子:发送0、1、2、3,返回ack1,超时后重传2、3。
(之后的SR协议就是对此处进行了优化。)

 
③ GBN接收方要做的事
下图简而言之就是:
- 正确按序收到n号帧后,发送ack N(累计确认),上传数据给上层。
 - 维护Expected_Seq_Num。
举个例子:发0、1、2、3,接收到0、2、3,则发ack0,expectedseqnum=1(期待接收帧是1)
这里提了一下缓存失序帧,其实就是为SR协议引一下,因为SR协议会缓存失序帧。

 
④ 运行图
图中需要注意:
- 接收3、4、5后,都丢弃,并且发送的都是ACK 1。
 - 超时计时器:超时后,重传所有已发未确认帧,结合expectedseqnum=2来维护运行。

 
⑤ 滑动窗口长度
- 采取n比特对帧编号的情况:发送窗口尺寸W满足:1 ≤ W ≤ 2n2 ^ n2n-1
 - 原因:尺寸过大会导致接收方无法区分新帧与旧帧。
如果不太了解为啥无法区分,可以到SR协议部分再看看解析。 
⑥ GBN重点总结
这里直接看图就好
 
⑦ 例题

 做这道题需要的知识点:
- 累计确认
 - GBN的重发机制
 
解析:由于收到了3号帧的确认,也就是ACK 3,那么由累计确认机制可知:0、1、2、3号帧都成功传送。因此,只有4、5、6、7号帧需要重发。所以选C.4。
⑧ 性能分析
i) 优点:连续发送数据帧 => 提高信道利用率。
 ii) 缺点:重传时要把已经正确传输的数据帧重传 => 传送效率降低。
最后来一个GBN的思维导图
 
四. 选择重传协议(SR)
SR:Selective Repeat
对于之前的GBN协议,我们了解其弊端:批量重传。
 而为了解决这一弊端,我们有一个解决方法:
单个确认,加大接收窗口,设置接收缓存,支持乱序(缓存乱序到达帧)
由此引出SR协议
① 滑动窗口
与GBN协议不同在于:
- 见接收方窗口的紫色部分6,新增缓存功能。
 - 见发送方窗口的绿色部分3,支持乱序确认,也就是重传时可以传2,4而省略3。
 - 下界:位于发送方窗口的最小序号位,下图中为2号帧。

 
② SR发送方必须响应的三件事
- 上层调用同GBN,不赘述。
 - ACK:与GBN不同,并非累计确认。具体可见图中解释。
举个例子:
发0、1、2、3、4,收到ACK1 、2、3,那么说明0、4并没有被正确接收。并且由于0是下界,因此不能移动窗口。于是重传0、4,如果只返回ACK0,那么窗口移动,下界变成4。 - 超时事件:一个超时事件对应一个帧的重传

 
③ SR接受方要做的事
分成三类。
- 接受乱序,缓存失序帧。如下图的6号帧
 - 比下界序号还小的帧,返ACK。(下图5号帧前的01234,只是重新确认已发)
 - 其他情况:忽略。
 
移动滑动窗口的情况:下界帧成功返回ACK。
 
④ 运行图
- 2帧丢失后,3帧缓存,发送ACK3 (GBN则返ACK2)
 - 2帧超时后,重传2帧。(GBN则返2345)
 - 移动窗口:重传2帧后,2-5都成功了,移动下界到6。

 
⑤ 滑动窗口长度
公式:WtmaxWtmaxWtmax = WrmaxWrmaxWrmax = 2n-1
限制原因:
同GBN,会导致接收方无法区分新帧与旧帧。
 见图左,与图右流程:
- 共同点:最后都是接受0号帧
 - 不同点:左边是重传(旧帧),右边不是重传(新帧)
 
解决方法:按公式给窗口长度,就不会出现这种二义性错误。
 
⑥ SR协议重点 && 例题
重点
直接见下图
 
例题

 考察知识:
- SR协议的重传机制
 
解析:
- 1号帧已经确认,不需要重传
 - 0、2号帧超时,需要重传
 - 3号帧,没超时,先不处理。
 
因此,最终只需要重传0、2号帧,答案选A.2。
⑦ 思维导图

终于补完这一小节的内容了= =,一篇博客拖了好久。
要抓紧写完三四章的内容了!
停等协议 
GBN协议