• 网络——流量控制&可靠传输&滑动窗口


    可靠传输:发送端发啥,接收端收啥
    流量控制:控制发送速率,使接收方有足够的缓冲空间来接收每一个帧。
    链路层流量控制——接收方收不下就不回复确认
    传输层流量控制——接收端给发送端一个窗口公告

    停止-等待协议

    每发送完一个帧就停止发送,等待对方确认,在收到确认后再发送下一个帧。

    发送窗口大小=1,接收窗口大小=1

    信道利用率:发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率

    在这里插入图片描述

    【例】(2020年408真题)甲向乙发数据帧,采用停止-等待协议,数据帧长与确认帧长均为1000B。数据传输速率是10kbps,单项传播延时是200ms,则甲的最大信道利用率(40%)
    【分析】数据帧传输耗时:1000B/10kbps=0.8s
    确认帧传输耗时:0.8s
    甲发送数据帧时延:200ms
    乙发送确认帧时延:200ms
    总耗时:0.8s+200ms+0.8s+200ms=2s
    信道利用率 = 有效传输时间 总时间 = 0.8 s 2 s 信道利用率=\frac{有效传输时间}{总时间}=\frac{0.8s}{2s} 信道利用率=总时间有效传输时间=2s0.8s=40%

    【例】一个信道的数据传输率为4kb/s,单向传播时延为30ms,如果使停止-等待协议的信道利用率达到80%,要求的数据帧长度至少为______。
    【分析】 L / 4 L / 4 + 2 × 30 \frac{L/4}{L/4+2\times 30} L/4+2×30L/4=80%,计算出L=960bit

    后退N帧协议(GBN)

    发送方连续发出N个帧,接收方流水线接收各个帧,并进行差错检测;一旦某个帧出错,接收方就丢弃该帧和它之后收到的所有帧,对出错的帧不发送确认帧;发送方在出错帧的确认帧超时后,从出错的帧开始重传所有已发送但未被确认的帧。
    接收方可以累积确认(捎带确认)
    发送窗口大小: 1 ≤ W T ≤ 2 n − 1 1 \leq W_{T} \leq 2^{n}-1 1WT2n1,接收窗口大小:1
    在这里插入图片描述

    【例】(2012年36题)两台主机直接的数据链路层采用后退N帧协议(GBN)传输数据,数据传输速率为16kbps,单向传播时延为270ms,数据帧长度范围是128-512字节,接收方总是以与数据帧等长的帧进行确认。为使信道利用率最高,帧序号的比特数至少为______。
    【分析】为了降低传输开销,选择数据帧长度为128bit,发送一帧的时间:
    128 × 8 1600 = 64 m s \frac{128\times8}{1600}=64ms 1600128×8=64ms
    发送一帧到收到确认为止的总时间: 64 + 270 × 2 + 64 = 668 m s 64+270\times2+64=668ms 64+270×2+64=668ms
    这段总时间可以发送的帧数量: 668 64 = 10.4375 \frac{668}{64}=10.4375 64668=10.4375

    发送窗口大小: 1 ≤ W T ≤ 2 n − 1 1 \leq W_{T} \leq 2^{n}-1 1WT2n1,其中n是构成帧序号的比特数量,
    根据连续发送帧数量的计算结果10.4375, W T W_{T} WT的取值为11,带入公式解得n至少为4

    选择重传协议(SR)

    发送方可以连续的发送多个帧,接收方对数据帧逐一确认,发送方收到ACK时继续发送后面的帧,若超时未收到应答,则重传出错帧;接收方可以不按照序号接收数据帧,收到帧不正确则丢弃,正确则放入缓存,再按顺序一起交付。
    发送窗口 W R W_{R} WR大小>1,接收窗口 W T W_{T} WT大小>1
    W T ⩽ W R ⩽ 2 n − 1 W_{T}\leqslant W_{R}\leqslant 2^{n-1} WTWR2n1
    W R + W T ⩽ 2 n W_{R}+W_{T}\leqslant 2^{n} WR+WT2n
    【例】对于滑动窗口协议,如果分组序号采用3bit,发送窗口大小为5,接收窗口最大是(3)
    【分析】 5 + W T ⩽ 8 5+W_{T}\leqslant 8 5+WT8
    W T ⩽ 4 W_{T}\leqslant 4 WT4
    解得 W T = 3 W_{T}=3 WT=3

  • 相关阅读:
    使用Docker部署Tomcat
    纯c语言版单链表(上)
    【Python】基本使用
    JDBC入门和API详解
    luffy项目前端创建、配置、解决跨域问题、后端数据库迁移
    企业网络自动化配置
    SpringMVC基础源码分析(一)
    数据库读写分离和分库分表
    大数加减,不使用BigInt,可以采用进位运算
    基于Python+MySQL的书店销售管理管理子系统设计
  • 原文地址:https://blog.csdn.net/vavid317/article/details/126001843