【流量控制】
概述
流量控制涉及链路上的帧的发送速率的控制,使接收方有足够的缓冲空间来接收每一个帧,其基本方法是由接收方控制发送方发送数据的速率,常见方式有停止-等待协议(Stop and Wait)、滑动窗口协议,其中,滑动窗口协议可分为后退 $N$ 帧协议(Go-Back-N,GBN)、选择重传协议(Selective Repeat,SR)
对于滑动窗口协议来说,在任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;接收方维持一组连续的允许接收的帧的序号,称为接收窗口,在传输过程中,两个窗口大小是固定的
从滑动窗口的概念来看,停止-等待协议、后退 $N$ 帧协议、选择重传协议之间只在发送窗口与接收窗口的大小上有区别:
- 停止-等待协议:发送窗口大小 $=1$,接收窗口大小 $=1$
- 后退 $N$ 帧协议:发送窗口大小 $>1$,接收窗口大小 $=1$
- 选择重传协议:发送窗口大小 $>1$,接收窗口大小 $>1$
停止-等待协议
发送方每发送一帧,都要等待接收方的应答信号,之后才能发送下一帧;接收方每接收一帧,都要反馈给发送方一个应答信号,表示可接收下一帧
由于发送方每次发送一帧后就陷入等待接收方确认信息的过程中,传输效率很低
此外,如果接收方不反馈应答信号,那么发送方会一直等待
滑动窗口协议
发送窗口用来对发送方进行流量控制,其大小代表在还没有收到对方确认信息的情况下发送方最多还可发送多少个数据帧
在发送端,每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可发送的帧时,即窗口内全是已发送但未收到确认的帧,发送方就会停止发送,直到收到接收方发送的确认帧,才会使窗口移动,之后,若移动的窗口内有可以发送的帧,就可继续发送
接收窗口用来可控制可以接收哪些数据帧、不可以接收哪些数据帧,只有当收到的数据帧的序号落入接收窗口,才允许将该数据帧收下,若接收到的数据帧的序号不在接收窗口中,则会将该数据帧丢弃
在接收端,当收到一个数据帧后,窗口将后移一个位置,并发回该数据帧的确认帧,若收到的数据帧落在接收窗口之外则一律丢弃,可以发现,当接收窗口大小 $=1$ 时,可以保证帧的有序接收
【可靠传输机制】
可靠传输保证了数据传输无误,通常采用确认、超时重传两种机制来实现
确认,是一种无数据的链路层控制帧,其可以使接收方能够让发送方知道哪些内容被正确接收,某些情况下,通常将确认捎带在一个回复帧中,称为捎带确认
超时重传,是指发送方在发送某个数据帧后就启动一个计时器,在一定时间内如果没有收到数据的确认帧,就重新发送该数据帧
自动重传请求(Auto Repeat ReQuest,ARQ)就是结合确认与超时重传两种机制的可靠传输方法,其通过接收方请求发送方重传出错的数据帧来恢复出错的帧
在数据链路层中,流量控制与可靠性传输两者是交织在一起的,可分为三种:停止等待 ARQ、后退 N 帧 ARQ、选择性重传 ARQ
前者是停止等待协议与可靠性传输机制的结合,后两者是滑动窗口协议与可靠性传输机制的结合,同时,当窗口尺寸开到足够大时,帧在链路上可以连续地流动,因此后两者又并称连续 ARQ 协议