数据链路层流量控制是点到点的,传输层是端到端;
    数据链路层窗口大小是一定的


    流量控制

    流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接收每个帧;流量控制的基本方法是由接收方控制发送方发送数据的速率

    1.停止-等待流量控制基本原理

    发送方:每发送一帧,都要等待接收方的应答信号,之后才能发送下一帧;
    接收方:每接收一帧,都要反馈一个应答信号,表示可以接收下一帧,如果接收方不反馈应答信号,那么发送方必须一直等待。

    每次只允许发送一帧,然后就陷入等待接收方确认信息的过程中,传输效率低

    2.滑动窗口流量控制基本原理

    发送窗口

    • 任意时刻,发送方都维持一组连续的允许发送的帧的序号;
    • 发送窗口WT代表还未收到对方确认信息的情况下,发送方最多还可以发送多少个数据帧

    接收窗口

    • 接收方维持一组连续的允许接收帧的序号;
    • 接收窗口是为了控制可以接收哪些数据帧和不可以接收哪些数据帧,在接收方,只有收到的数据帧的序号落入接收窗口内时,才允许将该数据帧收下,若落在窗口外则丢弃

    Image [1].png

    a:允许发送0~4号共5个帧
    b:允许发送1~4号共4个帧
    c:不允许发送任何帧
    d:允许发送5~7号共三个帧

    Image [2].png

    WR=1的接收窗口的意义:
    a:准备接收0号帧
    b:准备接收1号帧
    c:准备接收4号帧

    发送端
    滑动:发送端每收到一个确认帧,发送窗口就向前滑动一个帧的位置
    停止发送:当发送窗口内没有可以发送的帧(即窗口内的帧全部是已发送但未收到确认的帧)时

    接收端
    滑动:收到数据帧,窗口前移一个位置
    丢弃:收到的数据帧落在接收窗口外,一律丢弃

    滑动窗口特性

    1. 只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才有可能(只有发送方收到确认帧后才一定)向前滑动
    2. 不同的滑动窗口,发送窗口和接收窗口大小不同
      • 停止-等待:WT=1,WR=1
      • 后退N帧:WT>1,WR=1
      • 选择重传:WT>1,WR>1
    3. 接收窗口大小为1时,可保证帧的有序接收
    4. 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的;注意区分传输层的滑动窗口

    可靠传输

    通常使用确认和重传机制

    捎带确认:将确认带在一个回复帧中
    超时重传:发送方在发送某个数据后就开启一个计时器,在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止

    自动重传请求(Auto Repeat reQuest,ARQ):接收方请求发送发重传出错帧;停止-等待(Stop-and-Wait)ARQ、后退N帧(Go-Back-N)ARQ、选择性重传(Selective Repeat)ARQ


    单帧滑动窗口与停止等待协议

    Image [3].png

    在停止等待协议中,除了数据帧丢失,还可能出现以下两种差错:

    • 到达目的站的帧可能已遭破坏,接受站利用在前面讨论过的差错检测技术检出后,简单地将该帧丢弃。为了对付这种可能发生的情况,源站装备了计时器,在一个帧发送之后,源站等待确认,如果在计时器计满时仍未收到确认,则再次发送同样的帧。如此重复,直到该数据帧无错误地到达为止。
    • 另一个可能的差错是数据帧正确而确认被破坏。为了避免这样的问题,发送的帧交替地用0和1来标识,肯定确认则分别用ACK0和ACK1来表示,当收到的确认有误时,则重传已发送的帧。下面分析停止等待协议的实现步骤。

    在停止-等待协议中,若连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。


    多帧滑动窗口与后退N帧协议(GBN)

    发送方不需要在收到上一帧的ACK后才能开始发送下一帧,而是可以连续发送帧。当接受方检测出失序的信息帧后,要求发送方重发最后一个正确接受的信息帧之后的所有未确认的帧;或者当发送方发送了N个帧后,若发现该N个帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不又重传该出错帧及随后的N个帧。接收方只允许按顺序接收帧。

    Image [4].png
    GBN工作原理:对出错数据帧的处理

    1. 源站向目的站发送数据帧。当源站发完0号帧后,可以继续发送后续的1号帧、2号帧等。源站每发送一帧就要为该帧设置超时计时器。由于连续发送了许多帧,所以确认帧必须要指明是对哪一帧进行确认。<br /> 为了减少开销,GBN协议还规定接受端不一定每收到一个正确帧就必须发回一个确认帧,而是可以在连续收到好几个正确的确认帧后,才对最后一个数据帧发确认信息,或者可以在自己有数据要发送时才将对以前正确收到的帧加以捎带确认。这就是说,对某一数据帧的确认就表明该数据帧和这以前所有的数据帧均已正确无误地收到了。

    ACKn表示对第n号帧的确认,表明接受方已正确收到第n帧及以前的所有帧,下一次期望收到第n+1号帧。接受端只按序接收数据帧。虽然在有差错的2号帧之后接着又收到了正确的6个数据帧,但接收端必须将这些帧丢弃。接收端虽然丢弃了这些不按序的无出错帧,但应重复发送已经发送过的最后一个确认帧ACK1(这是为了防止已经发送过的确认帧ACK1丢失)。


    多帧滑动窗口与选择重传协议(SR)
    设法只重传出现差错的数据帧或计时器超时的数据帧,但此时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机

    在选择重传协议中,每个发送缓冲区对应一个计时器,当计时器超时时,缓冲区的帧就会重传;接收方怀疑帧出错,发送否定帧NAK给发送方,要求发送方对NAK中指定的帧进行重传

    Image.png

    接收窗口WR+发送窗口WT≤2n;假定采用累计确认,接收窗口为WR≤2n-1,接收窗口最大值:WTmax=WRmax=2n-1
    一般情况下,SR协议中,接收窗口大小和发送窗口的大小都是相同的