流量控制(接收方控制发送方速度):
场景:
- 发送方:发送数据速率高。
- 接收方:接收数据能力差。
基本方法:接收方控制发送方发送数据的速率;
常见方法:
1.停止-等待协议
2.滑动窗口协议:后退N帧协议(GBN)、选择重传协议(SR)
与传输层的流量控制对比:
1.对象
数据链路层的流量控制是点对点的;是每两个相邻节点间的流量控制,如主机到路由器,路由器到路由器;
传输层的流量控制是端到端的,是两个主机端的流量控制;
2.机制
数据链路层的流量控制,如果接收方接收不了就不再给发送方发送确认帧,发送方长时间未收到确认帧或收到NAK等根据具体情况重传数据帧;
传输层的流量控制,通过**“告诉”发送方窗口值为多少**;
停止-等待协议:
发送方必须收到接收方发送的上一帧的确认才能继续发送下一帧;
信道占用率:
帧长度
数据传输速率
帧长度
数据传输速率
+
R
T
T
+
确认帧长度
数据传输速率
\frac{\frac{帧长度}{数据传输速率}}{\frac{帧长度}{数据传输速率}+RTT+\frac{确认帧长度}{数据传输速率}}
数据传输速率帧长度+RTT+数据传输速率确认帧长度数据传输速率帧长度
滑动窗口的思想来看:发送窗口=1,接收窗口=1;
需要和自动重传结合,否则可能会陷入发送方一直等待的死锁状态;
滑动窗口协议:
后退N帧协议(GBN):
发送端每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可以发送的帧 (即窗口内的帧全部是己发送但未收到确认的帧) ,发送方就会停止发送 ,直到收到接收方发送的确认帧使窗口移动 ,窗口内有可以发送的帧,之后才开始继续发送 。
接收端收到数据帧后 ,将窗口向前移一个位置,并发回确认帧 ,若收到的数据帧落在接收窗口之外则一律丢弃 。
发送方:
上层的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送,如果窗口已满,发送方只需将数据返回给上层,提示上层窗口已满,上层等一会再发送。(实际情况是发送方先缓存这些数据,窗口空闲时再发送)
收到了一个ACK帧
GBN协议中,对n帧的确认采用累积确认的方式,标明接收方已经收到n帧和它之前的全部帧。
超时
与停止-等待协议一样,如果出现超时,发送方重传所有已发送但未被确认的帧。
接收方:
如果正确收到n号帧,并且按序,那么接收方为n帧发送一个ACK确认帧,并将帧中的数据部分交付给上层。其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK,接收方无需缓存任何失序帧,只需要维护一个信息,就是下一个按序接收的帧序号。意思是不是按序收到的帧都会被丢弃,并且不会回复确认帧。
发送方窗口最大为 2n - 1,接收窗口大小为1
一个小题目:
答案:B
解析:(这里的窗口大小指发送窗口+接收窗口)在连续ARQ协议中,发送窗口大小<=窗口总数-1;eg:窗口总数为8,编号为0 ~ 7,假设8个帧都已发出,下一轮又发出编号0 ~ 7的8个帧,接收方将无法判断第二轮发的8个帧到底是重传帧还是新帧。另外对于回退N帧协议,发送窗口的大小可以等于窗口总数-1,因为它的接收窗口大小为1,所有的帧保证按序接收。
滑动窗口的特性 :
只有接收窗口向前滑动时(同时接收方发送了确认帧),发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动。
信道占用率:
(
R
T
T
+
确认帧长度
数据传输速率
)
时间内连续发送的帧
(
受发送窗口的限制
)
以及开始的一帧,一共发送的时间除以整个发送周期
(RTT+\frac{确认帧长度}{数据传输速率})时间内连续发送的帧(受发送窗口的限制)以及开始的一帧,一共发送的时间除以整个发送周期
(RTT+数据传输速率确认帧长度)时间内连续发送的帧(受发送窗口的限制)以及开始的一帧,一共发送的时间除以整个发送周期
从滑动窗口的概念看 ,停止-等待协议、后退 N 帧协议和选择重传协议只在发送窗口大小和接收窗口大小上有所差别 :
停止等待协议 :发送窗口大小 =1,接收窗口大小=1 ;
后退 N 帧协议:发送窗口大小>1 ,接收窗口大小=1;
选择重传协议 :发送窗口大小>1,接收窗口大小>1。
对于选择重传协议:
W
R
+
W
T
≤
2
n
;
接收窗口最大时:
W
R
m
a
x
=
W
T
m
a
x
=
2
n
−
1
对于选择重传协议:W_R+W_T\leq2^n ;接收窗口最大时:W_Rmax=W_Tmax=2^{n-1}
对于选择重传协议:WR+WT≤2n;接收窗口最大时:WRmax=WTmax=2n−1
当接收窗口的大小为 1 时,可保证帧的有序接收
数据链路层的滑动窗口协议中 ,窗口的大小在传输过程中是固定的(注意与传输层的滑动窗口协议的区别)
选择重传协议(SR):
解决后退N帧协议GBN数据帧丢失需要重传确认的问题,选择重传协议SR解决问题的办法是设置单个确认,同时加大接收窗口,设置接收缓存(缓存乱序帧)
发送方:
上层的调用
上层要发送数据时,SR发送方先检查发送窗口可用于该帧的序号,如果序号位地发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回上层之后再传输。
收到了一个ACK帧
如果收到ACK,加入该帧序号在窗口内,则SR发送方将被确认的帧标记为已接收,如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧,如果窗口移动到有序号并未发送的帧,则发送帧。
超时
每个帧都有自己的定时器,当某帧确认超时,则只重传某帧。
接收方:
SR接收方将确认一个正确接收的帧而不管其是否按序,失序的帧将被缓存,并反回给发送方一个该帧的确认帧,当序号最小的帧被接收,这时可以将一批按序帧交付给上层,则向前移动滑动窗口。
只重传出错帧
可靠传输(我发什么,你收什么):
自动重传协议(Auto Repeat reQuest, ARQ),接收方请求发送方重传出错的数据帧来恢复出错的帧;
停止等待ARQ、后退N帧ARQ和选择重传ARQ,后两者是滑动窗口技术和请求重发技术的结合;
窗口开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议;
实际中,链路层很少使用可靠传输。
最后附上一题(通过数据帧携带确认帧)