计算机网络之流量控制与可靠传输机制
数据链路层的流量控制
较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。
打个比方就像我喂犯人吃饭,如果我把饭送进去,犯人送出来一个空碗,就说明犯人还有胃口,还可以再吃,就暗示我们继续送。这个空碗就像是一个确认帧,来告诉发送方还可以继续发送。
传输层流量控制手段:接收端给发送端一个窗口公告。
流量控制的方法
停止-等待协议
每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzWnJ5w7-1667573138937)(D:\学习!!\Typora各种图片\停止等待协议.png)]
效率是比较低的。
为什么要有停止等待协议?
除了比特出差错,底层信道还会出现丢包问题。
丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。(在链路层就叫帧,在网络层叫做ip数据报或者分组,在传输层就叫数据段 )
研究停止等待协议的前提?
虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。
停等协议有几种应用情况?
无差错情况&有差错情况
无差错情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xr1m5IcE-1667573138939)(D:\学习!!\Typora各种图片\无差错情况.png)]
有差错情况
数据帧都是或检测到帧出错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yqlgU8L6-1667573138940)(D:\学习!!\Typora各种图片\有差错情况.png)]
打个比方就像女生给男朋友发消息,但男生没有及时回复,女生就会自动发送下一条,或者打电话。
需要注意!
1.发完一个帧后,必须保留它的副本。
⒉数据帧和确认帧必须编号。(保证每个帧不会重复传递)
ACK(确认帧)丢失
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wCmPlmBm-1667573138942)(D:\学习!!\Typora各种图片\ACK丢失.png)]
ACK(确认帧)迟到
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Mt6M08g-1667573138944)(D:\学习!!\Typora各种图片\ACK迟到.png)]
性能分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmeL6NNP-1667573138945)(D:\学习!!\Typora各种图片\停止等待协议性能分析.png)]
优点就是简单,缺点就是信道利用率低:
信道利用率
U
=
T
0
T
0
+
R
T
T
+
T
A
信道利用率U=\frac{T_0}{T_0+RTT+T_A}
信道利用率U=T0+RTT+TAT0
信道利用率
发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率。
信道利用率
=
(
L
/
C
)
/
T
信道利用率=(L/C)/T
信道利用率=(L/C)/T
T表示发送周期从,开始发送数据,到收到第一个确认帧为止
L表示T内发送L比特数据
C表示发送方数据传输率
信道吞吐率=信道利用率*发送方的发送速率
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ck4VWAE8-1667573138946)(D:\学习!!\Typora各种图片\信道利用率例题.png)]
滑动窗口协议——后退N帧协议(GBN)和选择重传协议(SR)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2Kdu7MM-1667573138947)(D:\学习!!\Typora各种图片\滑动窗口协议.png)]
停止-等待协议可以看作是一种特殊的滑动窗口协议
协议 | 窗口大小 |
---|---|
停止-等待协议 | 发送窗口大小=1,接收窗口大小=1; |
后退N帧协议(GBN) | 发送窗口大小>1,接收窗口大小=1; |
选择重传协议(SR) | 发送窗口大小>1,接收窗口大小>1; |
后退N帧协议(GBN)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KC7wVdRU-1667573138948)(D:\学习!!\Typora各种图片\后退N帧协议中的滑动窗口.png)]
1.上层的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口已满,发送方只需将数据返回给上层,暗示上层窗口已满。上层等一会再发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)。
⒉收到了一个ACK(数据帧)
GBN协议中,对n号帧的确认采用累积确认(非常重要)的方式,标明接收方已经收到n号帧和它之前的全部帧。
3.超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样,定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有己发送但未被确认的帧。
GBN接收方要做的事
如果正确收到n号帧,并且按序,那么接收方为n帧发送个ACK,并将该帧中的数据部分交付给上层。
其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需要维护一个信息: expectedseqnum(下一个按序接收的帧序号)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rErfEebe-1667573138949)(D:\学习!!\Typora各种图片\运行中的GBN.png)]
滑动窗口长度
若采用n个比特对帧编号,那么发送窗口的尺寸 W T W_T WT应满足 1 ≤ W T ≤ 2 n − 1 1\leq W_T\leq2^n-1 1≤WT≤2n−1。因为发送窗口尺寸过大,就会使得接收方**无法区别新帧和旧帧。**接受窗口大小为1。
例如在一个2比特对帧编号的数据报,123123…选用尺寸4对其进行传送,如果第一个帧0就丢失了,那么会进行重传操作,此时又发送了一遍0123,那么接收方就无法识别这是新的0123还是旧的0123,导致传输出错
例题
主机甲与主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口尺寸为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲、乙之间的单向传播时延是50ms,则甲可以达到的最大平均数据传输率约为()。
A. 10Mb/s
B. 20Mb/s
C. 80Mb/s
D. 100Mb/s
考虑制约甲的数据传输速率的因素;首先,信道带宽能直接制约数据的传输速率,传输速率一定是小于等于信道带宽的。其次,因为甲乙主机之间采用后退N帧协议传输数据,要考虑发送一个数据到接收到他的确认之前,最多能发送多少数据,甲第最大传输速率受这两个条件约束,所以甲的最大传输速率就这两个值之间的最小值。
首先计算甲将发送窗口中所有的数据发送出去需要的时间:
1000
×
1000
×
8
b
i
t
(
1
字节
)
100
×
1
0
6
b
/
s
=
80
m
s
\frac{1000\times1000\times 8bit(1字节)}{100\times10^6b/s}=80ms
100×106b/s1000×1000×8bit(1字节)=80ms
再计算传输延迟+甲发送第一个帧的发送时长:
2
×
50
m
s
+
1000
×
8
b
i
t
100
×
1
0
6
b
/
s
=
100.08
m
s
2\times50ms+\frac{1000\times8bit}{100\times10^6b/s}=100.08ms
2×50ms+100×106b/s1000×8bit=100.08ms
计算最大平均数据传输率:
1000
×
1000
100.08
≈
80
M
b
/
s
\frac{1000\times 1000}{100.08}\approx80Mb/s
100.081000×1000≈80Mb/s
比较
m
i
n
{
80
M
b
/
s
,
100
M
b
/
s
}
min\{80Mb/s,100Mb/s\}
min{80Mb/s,100Mb/s}
选C。
选择重传协议(SR)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-anGI6x7P-1667573138950)(D:\学习!!\Typora各种图片\选择重传协议中的滑动窗口.png)]
SR发送方必须响应的三件事
1.上层的调用
从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。
⒉收到了一个ACK
如果收到ACK,加入该帧序号在窗口内,则sR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
3.超时事件
每个帧都有自己的定时器,一个超时事件发生后只重传一个帧。
SR接收方要做的事
来者不拒(窗口内的帧)
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个该帧的确认帧【收谁确认谁】,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-as2M9Jan-1667573138950)(D:\学习!!\Typora各种图片\来者不拒.png)]
运行中的SR
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqDC6tzA-1667573138951)(D:\学习!!\Typora各种图片\运行中的SR.png)]
SR滑动窗口的长度
发送窗口最好等于接受窗口。(大了会溢出,小了没意义)
W
T
m
a
x
=
W
R
m
a
x
=
2
n
−
1
W_{Tmax}=W_{Rmax}=2^{n-1}
WTmax=WRmax=2n−1
W
T
m
a
x
W_{Tmax}
WTmax表示发送窗口,
W
R
m
a
x
W_{Rmax}
WRmax表示接收窗口。
M9Jan-1667573138950)]
运行中的SR
[外链图片转存中…(img-BqDC6tzA-1667573138951)]
SR滑动窗口的长度
发送窗口最好等于接受窗口。(大了会溢出,小了没意义)
W
T
m
a
x
=
W
R
m
a
x
=
2
n
−
1
W_{Tmax}=W_{Rmax}=2^{n-1}
WTmax=WRmax=2n−1
W
T
m
a
x
W_{Tmax}
WTmax表示发送窗口,
W
R
m
a
x
W_{Rmax}
WRmax表示接收窗口。