Skip to content

(二)流量控制和可靠传输

1. 概念和方法

1.1. 流量控制

  • 控制发送方的发送速度,以和接收方的速度匹配

  • 方法:滑动窗口机制,限制发送方一次性发送的数据帧数量;

1.2. 可靠传输

  • 确保接收方按正确的顺序收到正确的数据帧

  • 方法:确认和重传机制;

2. 停止 - 等待协议

  • 自动重传请求(ARQ)机制:指发送端自动请求重传的一种机制;

  • 该协议可视为一个窗口大小为 1 的滑动窗口协议;

2.1. 无差错

img_6TF9W1xFdJ

2.2. 有差错:超时重传

img_2KNoIHLFjI

  • B 未收到或受到错误帧时,不会发送确认信号,A 超时未收到回应,进行重传;

  • 为实现超时重传,A 需要暂存当前要发送的帧,且分组要进行编号

  • 超时时间应略大于数据帧的平均往返时间

2.3. 确认帧丢失

img_Q9jdoUr2n5

  • B 丢弃重复的 M1,并再次发送确认帧;

  • 为了分辨重复的数据帧,分组需要编号

2.4. 确认迟到

img_NjSTBmFxou

2.5. 信道利用率

img_BUebE7P6c3

  • 停止等待协议的信道利用率η=TD/(TD+RTT+TA)(无差错情况下);

    • RTT=2τ,为数据帧平均往返时间,其中 τ端到端的传播时延

    • TD:发送端发送分组所需时间;

    • TA:接收端进行确认所需时间;

2.6. 流水线传输

img_pqWoc6iESP

  • 发送端可以连续发送最多 k 个分组,而不必每发送一个分组就需要等待确认;

  • 此时:η=kTD/(TD+RTT+TA)

  • 信道利用率达到最大时,最小的 kmin,满足:η=kminTD/(TD+RTT+TA)=1

3. 连续 ARQ 协议

  • 即发送窗口 k>1 的 ARQ 协议;

3.1. 滑动窗口机制

img_ckBaHDY20a

  • 发送窗口:实现流量控制,其大小和接收端接受能力有关;

3.2. 帧的分类

  • 不允许发送:不在滑动窗口里的帧,上图 (b) 的 1 和 7~12 号;

    • 已发送且已确认:1 号;

    • 未发送但不允许发送:7~12 号;

  • 已发送但未确认:滑动窗口里除最前一个以外的,上图 2~5 号;

  • 可以发送但未发送:滑动窗口里的最前一个,上图 6 号;

3.3. 错误帧处理

  • 后退 N 帧协议(GBN,Go-back N,常考

    • 发送多个帧时,若中间某帧丢失(但其之前的帧均完好),则接收端只对丢失帧以前的帧进行确认

    • 发送端需要将此丢失帧及其之后的帧全部重发

  • 累积确认

    • 发送端不必对收到的每一帧都发送确认帧;

    • 发送端对按序到达的最后一帧发送确认,表示此帧及其之前的都已正确接收

    • 优点:容易实现,节约带宽;

    • 缺点:中间帧丢失时,只能确认到此帧之前,对于此帧之后的帧,不能反应正确接收的情况;

  • 选择重传协议(SR)

    • 接收端用一个缓冲区暂存收到的帧;

    • 接收端可要求发送端重传出错的帧,并在收到正确的帧后,和缓冲区中其余帧组合为正确的数据发往上层;

    • 此协议不能用累计确认

3.4. 滑动窗口实现

  • 数据结构

    • 发送端:设置变量 SWS(Send Window Size),称为发送窗口;

    • 接收端:设置变量 RWS(Receive Window Size),称为接收窗口;

    • SWS:表示在发送端没有收到确认的情况下,最多可以发送的帧个数

      • 停止等待协议可视为 SWS=1 的一种;
  • 发送端规则

    • 窗口内的帧:允许发送,不考虑是否收到确认;

    • 窗口右侧的帧:不允许发送;

    • 每发送完一帧,SWS - 1,但发送窗口的位置不变,SWS 为 0 时不得继续发送;

    • 收到一个帧的确认时,窗口向右移动一位,SWS + 1;

      • 累计确认时,一次可以移动多位,对应 SWS + n;
  • 捎带确认

    • 接收端不会立即回发确认帧,而是等待一小段时间;

    • 若接收端同时还有发送到发送端的数据帧,则将确认帧附加在数据帧上一并发送;

    • 与单独发送确认帧区分:捎带确认的回复时间较长;

  • 接收端规则

    • 收到的帧序号和接收窗口的序号一致时才接收,否则丢弃;

    • 每正确接收一帧,接收窗口向右滑动一位,并发送该帧确认信号;

      • 累计确认时,可以滑动多位;
  • SWS 和 RWS 的设置

    • RWS = 1:一次只接受一个帧;

    • RWS = SWS:一次性可以接受发送的全部帧;

    • RWS > SWS:无意义;

    • SWS 最大值SWSmax=NRWSN 是发送的不同帧序号的个数;

      • 例:帧序号用 3 个 bit 编码,则可表示的序号为 0~7,共 8 个不同序号值;

      • 原:SWS = 8,RWS = 1,发送端发送帧 0~7,接收方正确接收,但回发的确认帧丢失,则此时:

        • 发送端重传帧 0~7;

        • 接收端应将新收到的帧 0 丢弃,但接收端无法区分收到的帧 0 是属于上一批重复的还是新的一批帧;

      • 改:SWS = 7,RWS = 1,发送端发送帧 0~6,确认信号丢失,此时:

        • 发送端重传帧 0~6;

        • 接收端已收到帧 0~6,等待帧 7,则收到重发的帧时会出现序号不匹配,能正确地丢弃重复帧;

    • GBN 协议下,SWSmax=2n1n 为编码帧序号的 bit 个数;

    • 选择重传协议下,SWSmax=2n1

  • ACK 确认帧含义

    • 1)确认收到 k 号帧;

    • 2)k -1 号帧及其之前的全部接收,准备接收 k 号帧(常考)