当前位置: 首页 > news >正文

CN_数据链路层流量控制@可靠的传输机制@ARP协议

文章目录

  • 流量控制技术(协议)
    • 停止-等待流量控制
    • 滑动窗口流量控制
      • 发送窗口
      • 接收窗口
      • 基本原理
  • 可靠的传输机制
    • 确认机制ACK
    • 超时重传机制RTO
      • ARQ处理差错
      • 自动重传请求ARQ协议🎈
  • ARQ具体协议
    • 单帧ARQ协议
      • 停止-等待协议SW-ARQ
    • 连续ARQ协议
      • 后退N帧协议(GBN)
        • GBN多帧滑动窗口
          • 累计确认
        • 帧号范围/发送窗口大小限制@GBN
      • 选择重传协议SR
        • 帧号范围/发送窗口大小限制@SR
    • 小结
      • 滑动窗口特性
      • 连续ARQ 协议与停止等待协议比较

流量控制技术(协议)

  • 流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接收每个帧
    • 例如,在面向帧的自动重传请求系统中,当待确认帧的数量增加时,有可能超出缓冲存储空间而造成过载
    • 流量控制的基本方法是由接收方控制发送方发送数据的速率
  • 常见的方式有两种:
    • 停止-等待协议(类)
    • 滑动窗口协议(类)

停止-等待流量控制

  • 发送方每发送一帧,都要等待接收方的应答信号,之后才能发送下一帧:
  • 接收方每接收一帧,都要反馈一个应答信号,表示可接收下一帧,
  • 如果接收方不反馈应答信号,那么发送方必须一直等待
  • 每次只允许发送一帧,然后就陷入等待接收方确认信息的过程中,因而传输效率很低
  • 停止-等待流量控制是一类流浪控制技术,区别于停止-等待协议SW-ARQ(这该控制技术的具体的协议)

滑动窗口流量控制

发送窗口

  • 在任意时刻,发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;

接收窗口

  • 同时接收方也维持一组连续的允许接收帧的序号,称为接收窗口

基本原理

  • 发送窗口用来对发送方进行流量控制
    • 发送窗口的大小WT=WTransmitW_T=W_{Transmit}WT=WTransmit,
      • 代表在还未收到对方确认信息的情况下发送方最多还可以发送多少个数据帧
    • 接收窗口的大小WR=WReceiveW_R=W_{Receive}WR=WReceive
      • 设置于接收端,是为了控制可以接收哪些数据帧和不可以接收哪些帧
  • 在接收方,只有收到的数据帧的序号落入接收窗口内时,才允许将该数据帧收下
    • 若接收到的数据帧落在接收窗口之外,则一律将其丢弃

可靠的传输机制

  • 数据链路层的可靠传输通常使用
    • 确认超时重传两种机制来完成
  • 不过,实际应用中,主要在传输层中讨论/考虑可靠传输机制(比如TCP协议)

确认机制ACK

  • 确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收 有些情况下为了提高传输效率,将确认捎带在一个回复帧中,称为捎带确认

超时重传机制RTO

  • RTO:Retransmission TimeOut

  • 超时重传是指发送方在发送某个数据帧后就开启一个计时器

    • 在一定时间内如果没有得到发送的数据帧的确认帧,那么就重新发送该数据帧,直到发送成功为止

ARQ处理差错

  • 自动重传请求(Automatic Repeat reQuest,ARQ)
  • ARQ通过接收方请求发送方重传出错的数据帧来恢复出错的帧,是通信中用于处理信道所带来差错的方法之一

自动重传请求ARQ协议🎈

  • 自动重传请求 (wikipedia.org)

    • 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一
    • 它通过使用确认超时这两个机制,在不可靠服务的基础上实现可靠的信息传输
    • 如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送
    • ARQ可能包括
      • 停止等待ARQ协议
      • 连续ARQ协议,
    • 涉及许多机制:
      • 错误检测(Error Detection)、
      • 正面确认(Positive Acknowledgment)、
      • 超时重传(Retransmission after Timeout)
      • 负面确认及重传(Negative Acknowledgment and Retransmission)等机制
  • 传统自动重传请求分为三种

    • 即停止-等待(Stop-and-Wait):SW-ARQ
    • 后退N帧(Go-Back-N):GBN-ARQ
    • 选择性重传(Selective Repeat):SR-ARQ
  • 这三种协议是基于滑动窗口技术请求重发技术

    • 请求重发技术:使用可靠性技术中的确认和超时重传机制的技术
    • 第一种协议是单帧-滑动窗口结合了请求重发技术的低性能ARQ协议
    • 后两种协议是多帧-滑动窗口技术请求重发技术的结合
    • 多帧和单帧指定是发送窗口单次最多可以发送的帧数🎈
    • 由于窗口尺寸开到足够大时,帧在线路上可以连续地流动,因此又称其为连续ARQ协议
  • 数据链路层流量控制机制可靠传输机制是交织在一起的

ARQ具体协议

单帧ARQ协议

停止-等待协议SW-ARQ

  • SW-ARQ:单帧-滑动窗口-停止-等待协议

  • 在停止等待协议中,源站发送单个帧后必须等待确认,在目的站的回答到达源站之前,源站不能发送其他的数据帧

  • 滑动窗口机制的角度看,停止-等待协议相当于发送窗口和接收窗口大小均为1的滑动窗口协议

  • 基本步骤

    • 停止等待

      • 发送方每次只发送一个分组 在收到确认后再发送下一个分组
    • 编号

      • 对发送的每个分组和确认都进行编号
    • 自动重传请求

      • 发送方为每个发送的分组设置一个超时计时器
      • 若超时计时器超时,发送方会自动重传分组
  • 在停止等待协议中,除数据帧丢失外,还可能出现以下两种差错

    • 到达目的站的帧可能已遭破坏,接收站利用前面讨论过的差错检测技术检出后,简单地将该帧丢弃

      • 为了对付这种可能发生的情况,源站装备了计时器
      • 在一个帧发送之后,源站等待确认,如果在计时器计满时仍未收到确认,那么再次发送相同的帧 如此重复,直到该数据帧无错误地到达为止
    • 另一种可能的差错是数据帧正确确认帧被破坏,此时接收方已收到正确的数据帧,但发送方收不到确认帧,因此发送方会重传已被接收的数据帧,接收方收到同样的数据帧时会丢弃该帧,并重传一个该帧对应的确认帧

    • 发送的帧交替地用0和1来标识,确认帧分别用ACK0和ACK1来表示,收到的确认帧有误时,重传已发送的帧

    • 对于停止-等待协议,由于每发送一个数据帧就停止并等待,因此用1bt来编号就已足够

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

    • 连续出现相同序号的确认帧时,表明接收端收到了重复帧

    • 此外,为了超时重发和判定重复帧的需要,发送方和接收方都须设置一个帧缓冲区

      • 发送端在发送完数据帧时,必须在其发送缓存中保留此数据帧的副本,这样才能在出差错时进行重传
      • 只有在收到对方发来的确认帧ACK时,方可清除此副本

  • 主机甲采用ST-ARQ协议项主机乙发送数据,数据传输速率为C=3kb/s

  • 单向传播时延D=200ms

  • 忽略确认帧的传输时延

  • 当信道利用率等于0.4的时候,数据帧的长度L=?

  • 分析:

    • 计算发送周期T=Ts+2DT=T_s+2DT=Ts+2D

    • Ts=L/CT_s=L/CTs=L/C

    • 信道利用率

      • η=TsT=TsTs+2D=L/CL/C+2D=LL+2DC=0.4L=0.4(L+2DC)0.6L=0.8DCL=43DC=43×200ms×3kb/s=800bit\eta=\frac{T_s}{T}=\frac{T_s}{T_s+2D}=\frac{L/C}{L/C+2D}=\frac{L}{L+2DC}=0.4 \\L=0.4(L+2DC) \\0.6L=0.8DC \\L=\frac{4}{3}DC=\frac{4}{3}\times 200ms\times{3kb/s}=800bit η=TTs=Ts+2DTs=L/C+2DL/C=L+2DCL=0.4L=0.4(L+2DC)0.6L=0.8DCL=34DC=34×200ms×3kb/s=800bit

连续ARQ协议

后退N帧协议(GBN)

  • GBN:GoBackN(frame)

  • 接收点丢弃从第一个没有收到的数据包开始的所有数据包

  • 发送点收到NACK后,从NACK中指明的数据包开始重新发送

GBN多帧滑动窗口

  • 多帧-发送窗口

  • 在后退N帧式ARQ中,发送方无须在收到上一个帧的ACK后才能开始发送下一帧,而是可以连续发送帧

  • 当接收方检测出失序的信息帧后,要求发送方重发最后一个正确接收的信息帧之后的所有未被确认的帧;

  • 或者当发送方发送了N个帧后,若发现该N个帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方就不得不重传该出错帧及随后的N个帧

  • 换句话说,接收方只允许按顺序接收帧

  • 例如, 源站目的站发送数据帧

    • 当源站发完0号帧后,可以继续发送后续的1号帧、2号帧等
    • 源站每发送完一帧就要为该帧设置超时计时器
    • 由于连续发送了许多帧,所以确认帧必须要指明是对哪一帧进行确认
累计确认
  • GBN协议中,接受端通常采用累计确认的方式

    • GBN协议还规定接收端不一定每收到一个正确的数据帧就必须立即发回一个确认帧,

    • 而可以在连续收到好几个正确的数据帧后,才对最后一个数据帧发确认信息,

    • 或者可在自己有数据要发送时才将对以前正确收到的帧加以捎带确认

  • 这就是说,对某一数据帧的确认就表明该数据帧和此前所有的数据帧均已正确无误地收到

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

帧号范围/发送窗口大小限制@GBN

  • 后退N帧的接收窗口大小为1,可以保证接收数据帧

  • 对于GBN,若采用n bit对帧编号,发送窗口的尺寸WTW_TWTn,WTn,W_Tn,WT应该满足

    • WT∈[1,2n−1]W_T\in[1,2^n-1]WT[1,2n1]
  • 如果给定用于帧编号的编号数m,那么

    • N⩾WT+1N\geqslant{W_T}+1NWT+1
    • 需要占用的二进制位数为⌈log⁡2N⌉⩾⌈log⁡2(WT+1)⌉\lceil\log_2{N}\rceil\geqslant{\lceil\log_2{(W_T+1)}\rceil}log2Nlog2(WT+1)
  • 否则会造成无法分辨新帧和旧帧

  • 举一个具体的例子进行说明

    • 例如用n=3比特可编出8个不同的序号,因而发送窗口的最大值似乎应为8
    • 实际上,设置发送窗口为8将使协议在某些情况下无法工作(无法分辨新帧和旧帧)
    • 设发送窗口W=8,发送端发送完0~7号共8个数据帧
    • 因发送窗口已满,发送暂停 假定这8个数据帧均已正确到达接收端,并且对每个数据帧,接收端都发送出确认帧 下面考虑两种极端的情况
      • 第一种情况是(最好情况):所有确认帧都正确到达了发送端A,因而发送端接着又发送8个新的数据帧,其编号应是0~7
        • 注意,**序号(帧号)**是循环使用的 🎈
        • 因此序号虽然相同,但8个帧都是新的帧
          • 这是可以确认新旧的,因为接受到的确认帧表明,新来的8个帧是新的
          • 旧的8个帧都被确认了
      • 第二种情况是:(最坏情况)所有确认帧都丢失了
        • 经过一段由超时计时器控制的时间后,发送端重传这8个旧的数据帧,其编号仍为0~7.
        • 于是,当接收端第二次收到编号为0~7的8个数据帧时,就无法判定这是8个新的数据帧
          还是8个重传的旧数据帧
          • 无法判定新旧批次的话,接受端可能会接受多次(重复)同一批帧,不仅浪费资源还引起错误
        • 因此,将发送窗口设置为(2n=82^n=82n=8)显然是不行的
    • 如果将窗口设置为2n−1=8−1=72^n-1=8-1=72n1=81=7,那么可能出现的帧号为0∼60\sim{6}06
    • 发送窗口若干次(相邻批次)发送的帧号序列:
      • 0,1,2,3,4,5,6;
      • 7,0,1,2,3,4,5;
      • 6,.
    • 可见,这种情况下,接收端B就可以区分发送端发送来的相邻两批数据是不是同一批
      • 也就是可以区分新旧
  • 发送方:发送了0$\sim$6帧,
    • 在计时器超时的时候,发送方只收到了来自接收方传回的对1,3,5号帧的确认帧
    • 那么发送端需要重传的帧是?
  • 由于GBN采用累计确认方式,所以我们只关注发送端收到的最大的确认号(记为m),即可知道0∼\simm都已经被正确接受
  • 本例m=5,所以只需要重传帧号6的帧

  • [2014统考真题]主机甲与主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口尺寸为1000,数据帧长为1000字节,信道带宽为100M6/s,乙每收到一个数据帧立即利用一个**短帧(忽略其传输延迟)**进行确认,若甲、乙之间的单向传播时延是50s,
  • 则甲可以达到的最大平均数据传输速率约为(C)。
    • A.10Mb/s
      B.20Mb/s
      C.80Mb/s
      D.100Mb/s
  • 分析:
    • 考虑制约甲的数据传输速率的因素。
      • 首先,信道带宽能直接制约数据的传输速率,传输速率一定是小于等于信道带宽的。
      • 其次,因为甲、乙主机之间采用后退N帧协议传输数据,要考虑发送一个数据到接收到它的确认之前,最多能发送多少数据(量)
      • 所以甲的最大传输速率是这两个值中小的那一个。
    • 甲的发送窗口的尺寸为1000,即收到第一个数据的确认之前,最多能发送1000个数据帧,也就是发送1000×1000B=1MB的内容
    • 而从发送第一个帧到接收到它的确认的时间是一个帧的发送时延加上往返时延(确认帧的传输时间被忽略),即
      • t0=1000B100Mb/s=10B1Mbs=80b1Mbs=8×10−5s=0.00001st_0=\frac{1000B}{100Mb/s}=\frac{10B}{1Mb}s=\frac{80b}{1Mb}s=8\times{10^{-5}}s=0.00001st0=100Mb/s1000B=1Mb10Bs=1Mb80bs=8×105s=0.00001s
      • t0+2×50ms=0.10008st_0+2\times 50ms=0.10008st0+2×50ms=0.10008s
      • 此时的最大传输速率为1MB/0.10008s≈10MB/s=80Mb/s。
      • 信道带宽为100Mb/s,因此答案为min{80Mb/s,100Mb/s}=80Mb/s

  • 主机甲通过C=128kb/s卫星链路,采用滑动窗口协议向主机乙发送数据,

    • 链路单向传播时延为D=250s,
    • 帧长为S=1000字节。
    • 不考虑确认帧的开销,
    • 为使链路利用率不小于80%,帧序号的比特数至少是?
  • 分析:

    • 此类问题,对一个发送周期进行讨论,并求出周期内发送的帧数:

      • 发送周期:开始发送帧到收到第一个确认帧为止的过程

      • 用时为:

        • T=第一个帧传输时延+第一个帧的传播时延+确认帧的传输时延+确认帧的传播时延

          • 这里忽略确认帧的传输时延
        • 即:T=Ts+2DT=T_s+2DT=Ts+2D

          • Ts=SC=1000B128kb/s=2−4=12×18=0.5×0.125=0.0625sT_s=\frac{S}{C}=\frac{1000B}{128kb/s}=2^{-4}=\frac{1}{2}\times{\frac{1}{8}}=0.5\times0.125=0.0625sTs=CS=128kb/s1000B=24=21×81=0.5×0.125=0.0625s
        • 因此T=Ts+RTT=2−4s+2×250ms=2−4+2−1=0.5625sT=T_s+RTT=2^{-4}s+2\times 250ms=2^{-4}+2^{-1}=0.5625sT=Ts+RTT=24s+2×250ms=24+21=0.5625s,

    • 接着计算在T内需要发送多少数据(设为LLL)才能满足利用率不小于80%。

    • (L/128kb/s)/T≥0.8(L/128kb/s)/T≥0.8(L/128kb/s)/T0.8

      • L27kb/s×(2−4+2−1)s⩾0.8L1kb/s×(23+26)s=L(8+64)kb=L72kb⩾0.8L⩾0.8×72kb=8×7.2kb=7.2kB\frac{L}{2^7kb/s\times{(2^{-4}+2^{-1})}s}\geqslant{0.8} \\ \frac{L}{1kb/s\times{(2^{3}+2^{6})}s}=\frac{L}{ {(8+64)}kb} =\frac{L}{72kb}\geqslant{0.8} \\L\geqslant{0.8\times{72kb}}=8\times{7.2kb}=7.2kB 27kb/s×(24+21)sL0.81kb/s×(23+26)sL=(8+64)kbL=72kbL0.8L0.8×72kb=8×7.2kb=7.2kB

      • L/S=7.2kB/1kB=7.2(帧)L/S=7.2kB/1kB=7.2(帧)L/S=7.2kB/1kB=7.2()

      • 即在一个发送周期内至少发7.2个帧才能满足要求,

      • 设需要编号的比特数为n,则2n−1⩾7.22^n-1\geqslant7.22n17.2,因此n至少ceil(log⁡27.2)=4ceil(\log_2{7.2})=4ceil(log27.2)=4

选择重传协议SR

  • 发送点连续发送数据包但对每个数据包都设有个一个计时器
  • 当在一定时间内没有收到某个数据包的ACK时,发送点只重新发送那个没有ACK的数据包
    • 包括
      • 出现差错的数据帧
      • 计时器超时的数据帧
    • 需要将接受窗口从1进行扩大,便于接收发送序号不连续,但是仍然处在接收窗口中的那些数据帧(将要被发送过来的);
      • 等到所缺序号的数据帧收到后再一并送给主机
    • 每个发送缓冲区对应一个计时器,当计时器超时,缓冲区的帧就会重传
      • 一旦接收方怀疑帧出错,就会发送一个否定NAK给发送端,
      • 要求发送方对NAK指定的帧进行重传
    • WT,WR>1W_T,W_R>1WT,WR>1,每次可以发送或者接收多个帧,而且一般WT=WRW_T=W_RWT=WR
      • 选择重传协议是对单帧进行确认,所以发送窗口大于接收窗口会导致溢出
      • 发送窗口小于接收窗口会使得接收窗口多出发送窗口的那部分变得没有意义
      • 且最大值都为序号范围的一半,若采用n比特对帧编号,则需要满足:WTmax=WRmax=2n−1W_{Tmax}=W_{Rmax}=2^{n-1}WTmax=WRmax=2n1
        • 因为如果不满足该条件,即窗口大小大于序号范围一半
          • 当一个或多个确认帧(从接收方传回给发送方的帧)丢失时,发送方就会超时重传之前的数据帧
          • 接收方无法分辨是新的数据帧还是重传的数据帧
        • 为了避免接收端向前移动窗口后,新窗口与旧窗口产生重叠,所以接收窗口的最大尺寸不应该超过序号范围的一半
          • WR⩽2n−1W_R\leqslant{2^{n-1}}WR2n1

帧号范围/发送窗口大小限制@SR

  • 对于选择重传协议,若有n比特进行编号(作为帧号/分组号),则接收窗口WRW_RWR的最大值为W⩽2n−1W\leqslant{2^{n-1}}W2n1
  • 发送窗口大小为WTW_TWT,
    • 因为WT+WR⩽2nW_T+W_R\leqslant{2^n}WT+WR2nWR⩽WTW_R\leqslant{W_T}WRWT,
    • 则:
      • WR+WR⩽WT+WR⩽2nW_R+W_R\leqslant{W_T+W_R}\leqslant{2^{n}}WR+WRWT+WR2n
      • 2WR⩽2n;即:WR⩽2n−12W_{R}\leqslant{2^n};即:W_R\leqslant{2^{n-1}}2WR2n;:WR2n1
    • 所以关于接受窗口大小的两个限制条件:
      • WRW_RWR取最大值2n−12^{n-1}2n1.
      • WR⩽2n−WTW_R\leqslant{2^n-W_T}WR2nWT🎈
      • 并且取其中更严格的一个(同小取小)
  • 一般情况下选择重传协议的发送窗口和接收窗口的大小是相等的
  • 如果SR协议中接收窗口值大于1,(也就是SR是无序接收滑动窗口协议,GNB是有序接收的,两者的窗口大小约束不一样)
    • 接收窗口要等到接收范围内所有帧收到才能更新
    • 发送窗口等接收窗口更新后才会更新,那么发送窗口比接收窗口多出来的那部分窗口就没有意义

  • 对于滑动窗口协议,如果分组采用n=3bit编号,发送窗口大小WT=5W_T=5WT=5
  • 则接收窗口大小WR最大为?W_R最大为?WR?
    • WR⩽23−5=3W_R\leqslant{2^3-5}=3WR235=3
    • WR⩽23−1=4W_R\leqslant{2^{3-1}=4}WR231=4
    • 所以WR最大为3W_R最大为3WR3

  • 数据链路层采用选择重传协议SR传输数据,发送方已经发送了0∼30\sim{3}03号数据帧
  • 现在已收到1号帧的确认
  • 0,2号依次超时,此时需要重传的帧?
  • 分析:只有0,2号需要重传,因为SR协议只需要重传未确认的分组(数据帧)
    • 至于3号帧,问题中没有给出到底是出错还是超时,认为还处于传输的过程中,不计入重传对象

  • 两台主机之间的数据链路层采用GBN传输数据

    • 传输速率为v=16kb/s
    • 单向传播时延为270ms
    • 数据帧长范围是128∼512128\sim{512}128512Byte
    • 接收方总是以总数据帧等长的帧进行确认
    • 为了使得信道利用率达到最高,帧序号的比特数n至少为?
  • 分析:

    • 本题主要求解的是从发送一个帧到接收到这个帧的确认为止的时间内最多可以发送多少数据帧。

    • 要尽可能多发帧,提高信道利用率,应以短的数据帧计算,因此首先计算出发送一帧的时间

    • 数据帧长度是不确定的,范围是128~512B

    • 但在计算至少窗口大小时,为了保证无论数据帧长度如何变化,信道利用率都能达到最高

      • 这个最高在不同帧长下计算的结果不同,虽然具体的最高值不确定,但是这个最高在帧长范围区间的边界取到是容易判断的,这又有两种可能,以

        • 最短帧长计算
        • 最长帧长计算
      • 结论是,应以最短的帧长计算

      • 因为,如果以最长512B计算,那么求得的参数在传输帧长为128B的最短帧情况下,达不到最高信道利用率

      • 首先计算出发送一帧的时间

        • t0=128×8/(16×10−3)=64ms:t_0=128×8/(16×10^{-3})=64ms:t0=128×8/(16×103)=64ms:

        • 发送一帧到收到确认为止的总时间(发送周期)为t=t0+RTT+t0=t0+2D+t0=64+270×2+64=668mst=t_0+RTT+t_0=t_0+2D+t_0=64+270×2+64=668mst=t0+RTT+t0=t0+2D+t0=64+270×2+64=668ms:

        • 这段时间总共可以发送668/64=10.4帧,发送这么多帧至少需要用ceil(log⁡210.4)=4ceil(\log_2{10.4})=4ceil(log210.4)=4位比特进行编号。

        • 类似于指令流水,每个帧的发送时间越短,发送周期内可以发送出去的帧就越多

小结

滑动窗口特性

  • 只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才有可能(只有发送方收到确认帧后才一定)向前滑动

  • 从滑动窗口的概念看,停止-等待协议后退N帧协议和选择重传协议只在发送窗口大小接收窗口大小上有所差别:

    • 停止-等待协议:发送窗口大小=1,接收窗口大小=1

    • 后退N顿协议:发送窗口大小>1,接收窗口大小=1

    • 选择重传协议:发送窗口大小>1,接收窗口大小>1

  • 接收窗口的大小为1时,可保证帧的有序接收

  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的

    • 与传输层的滑动窗口协议的区别
      • 在TCP协议中,滑动窗口大小是有变换的

  • 若滑动窗口机制采用SR协议来进行流量控制,允许发送方在收到应答前连续发出多个帧,

    • 若帧序号长度为kbit,接收窗口的大小W⩽2k−1W\leqslant{2^{k-1}}W2k1,才能避免接收端向前移动窗口后,新的窗口和旧的窗口产生重叠

    • 设发送窗口的帧序列区间为[L,U],窗口大小为y=U−L+1y=U-L+1y=UL+1;发送窗口大小的初始值为W

      • 0⩽y⩽W0\leqslant{y}\leqslant{W}0yW

      • 0⩽U−L+1⩽WU−W+1⩽LL⩾U−W+1mod2k0\leqslant U-L+1\leqslant{W} \\ U-W+1\leqslant{L} \\ L\geqslant{U-W+1\mod{2^{k}}} 0UL+1WUW+1LLUW+1mod2k

连续ARQ 协议与停止等待协议比较

  • 连续ARQ协议停止-等待协议
    发送的分组数量一次发送多个分组一次发送一个分组
    传输控制滑动窗☐协议停等-等待
    确认单独确认+累积确认单独确认
    超时定时器每个发送的分组每个发送的分组
    编号每个发送的分组每个发送的分组
    重传回退N,多个分组一个分组

相关文章:

列举和删除.NET的版本

删除前 dotnet --list-sdksdotnet --list-runtimesdotnet --info从工具的发布页面下载 .NET 卸载工具 仅删除标记为预览版的 .NET SDK (最高预览版除外)。 dotnet-core-uninstall remove --all-previews-but-latest --sdk因为没有符合条件的,所有并未产生删除。...

【前端学习——js篇】6.事件模型

具体见:https://github.com/febobo/web-interview 6.事件模型 ①事件与事件流 事件(Events) 事件是指页面中发生的交互行为,比如用户点击按钮、键盘输入、鼠标移动等。在js中,可以通过事件来触发相应的操作,例如执行函数、改变…...

五大获取免费SSL证书/https证书的方式

SSL证书的必要性: 从2018年7月1日开始,谷歌浏览器(Chrome)将显示所有未使用SSL证书的网站标记为“不安全”,而拥有SSL证书的网站的权重排名都会获得提升。现在各大浏览器都有自己的标记方式来标注网站的“不安全”。各大搜索引擎也会更加注重网站安全性来进行网站的排名。…...

Redis分布存储方案

...

Vue 二次封装组件的艺术与实践

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

阿里云实时计算Flink的产品化思考与实践【上】

摘要:本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分: 阿里云实时计算 Flink 简介产品化思考产品化实践SQL 产品化思考及实践展望 该主题由黄鹏程和陈婧敏共同完成,前半程…...

CN_数据链路层流量控制@可靠的传输机制@ARP协议

文章目录流量控制技术(协议)停止-等待流量控制滑动窗口流量控制发送窗口接收窗口基本原理可靠的传输机制确认机制ACK超时重传机制RTOARQ处理差错自动重传请求ARQ协议🎈ARQ具体协议单帧ARQ协议停止-等待协议SW-ARQ例连续ARQ协议后退N帧协议(GBN)GBN多帧滑动窗口累计确…...

程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…...

安装ubuntu20.04, CUDA11.4, cnDNN, tensorflow, pytorch

ubuntu22.04默认python为3.11 ubuntu20.04默认python为3.8 第一步,分区安装系统 efi引导区, 逻辑分区,512M root: 主分区,512M swap: 逻辑分区,64G home:逻辑分区,320G /:逻辑分区, 130G, CUDA是安装…...

shell脚本受限执行

shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.受限的内容包括:使用 cd 命令更改工作目录. 更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值. 读或更改 shell 环境选项…...

HTTP 速查手册

一、通用身份验证 # 服务端返回401,并告知验证类型为Basic GET 401 Unauthorized WWW-Authenticate: Basic realm"description"# 浏览器输入验证信息后,请求头中携带验证信息 Authorization: Basic xxxxxxxxxx二、Cookie # 服务端返回set-co…...

【计算机视觉】 摄像机标定

摄像机标定 齐次坐标 齐次坐标,将欧氏空间的无穷远点,与投影空间中有实际意义的消失点,建立起映射关系。 把齐次坐标转化为笛卡尔坐标的方法:是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质: 比较好的…...

【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…...

DHTMLX Diagram JavaScript/HTML5 Pro Library:5.0

Diagram — JavaScript/HTML5 Diagram Library Ω578867473 破解版DHTMLX Diagram comprises a set of interactive HTML5 UI components such as organization charts, flowcharts, decision trees, block diagrams, mind maps, etc. Consisting of nodes and connectors, di…...

GPS卫星位置解算

本文介绍了基于C语言的GPS卫星位置解算原理与程序设计。针对每个原理、公式、代码设计进行了详细讲解,希望能够给测绘学子们带来帮助。 参考书籍: 李征航 黄劲松:GPS测量与数据处理(第三版) 目录 基础原理 1&#xf…...

大数据:Sqoop 简介与安装

一、Sqoop 简介 Sqoop 是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出: 导入数据:从 MySQL,Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中; 导出数据&am…...

[附源码]计算机毕业设计文曦家教预约系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...

HK1 BOX刷入 Armbian系统作为服务器

HK1 BOX刷入 Armbian系统作为服务器 1 安装Armbian到EMMC 硬件 HK1 BOX s905 x3 固件版本选择 Armbian_23.02.0_Aml_s905x3_bullseye_5.15.80_server_2022.12.01用usb启动,tf/sd有的设备不行,有干扰,有可能从TF卡无法启动系统。 用usb启…...

CEC2015:动态多目标野狗优化算法求解CEC2015(提供完整MATLAB代码,含GD、IGD、HV和SP评价指标)

一、动态多目标优化问题简介 现实世界中,许多优化问题不仅具有多属性,而且与时间相关,即随着时间的变化,优化问题本身也发生改变,这类问题称为动态多目标优化问题(dynamic multi-objective optimization p…...

【蓝桥杯选拔赛真题31】python三位数组合个数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 python三位数组合个数 一、题目要求 1、编程实现 2、输入输出...

SpringBoot项目--如何不停服更新应用?

原文网址:SpringBoot项目--如何不停服更新应用?_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java后端项目如何不停机更新服务。 在生产环境中,一般都会每个服务部署多个实例。只要多于1个实例,就可以不停服更新应用。 不停服…...

MVVM与Vue响应式原理

Vue的响应式实现原理 MVVM M:模型 》data中的数据 V:视图 》模板 VM:视图模型 》Vue实例对象 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0EWNM16D-1670161519474)(C:\Users\lucas\Desktop\学习\图片\mode…...

vue和react的生命周期

vue和react的生命周期 一、Vue的生命周期二、React的生命周期2.1.类组件2.2.函数式组件一、Vue的生命周期 初始化阶段(组件创建、数据初始化)、挂载、更新、销毁 父子组件生命周期执行顺序 初次加载组件时:父beforeCreate – 父created – 父beforeMount – 子beforeCreate …...

浏览器高度兼容性

浏览器的卷去高度 1.标准模式 document.documentElement.scrollTop 2.非标准模式 document.body.scrollTop 浏览器高度兼容性 1.标准模式下 浏览器的实际高度: document.body.clientHeight 浏览器的可视高度:document.documentElement.clientHeight 2.非…...

关于天干地支及其计算

以天干地支计算日期是我国悠良的传统文化,最近在看如何计算人的生辰八字,写了个程序,但是只能算年的干支,月、日的干支计算方法太复杂了,望之只能却步,还是乖乖去查万年历比较好。这里记下关于干支的一些东…...

数据结构和算法之如何建立图

小白BG.1 邻接矩阵表示的图结点的结构 typedef struct GNode *PtrToGNode;//PtrToGNode是指向GNode的一个指针 struct GNode{ int Nv;//顶点数 int Ne;//边数 WeightType G[MaxVertexNum][MaxVertexNum]; DataType Data[MaxVertexNum];//存顶点的数据 }; typedef PtrToGNode MG…...

计算机毕业设计Java大众采编本微资讯发布平台(源码+系统+mysql数据库+lw文档)

计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档) 计算机毕业设计Java大众采编本微资讯发布平台(源码系统mysql数据库lw文档)本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse…...

web前端-javascript-立即执行函数(说明、例子)

立即执行函数 /* (function(){alert("我是一个匿名函数~~~"); })(); */(function (a, b) {console.log("a " a);console.log("b " b); })(123, 456);1. 说明 函数定义完,立即被调用,这种函数叫做立即执行函数立即执…...

【计算机视觉】图像形成与颜色

图像形成与颜色 光照及阴影 辐射度学 颜色 颜色信息反映了入射光的能量分布与波长,可见光的波长在400nm到760nm之间。 RGB RGB分别代表三个基色(R-红色、G-绿色、B-蓝色),如(0,0,0)表示黑色、(255, 255, 255)表示白色。其中2…...

Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目

文章目录前言视频介绍项目截图项目地址项目源码以上就是本篇文章的全部内容,将你编写好的项目分享给你的朋友们或者那个TA吧!制作不易,求个三连!❤️ 💬 ⭐️前言 今天博主在刷短视频时😐,朋友推…...

[附源码]Python计算机毕业设计SSM进出口食品安全信息管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…...

电平触发的触发器

普通的SR锁存器没有任何抗干扰能力 我们要加控制信号,来抵抗干扰 比如说我们不把信号直接加在门上,我们可以再加一级门电路,让这个输出和输入不在同一个门上,我们希望加入一个控制信号,来控制电路工作的时刻 对电路结…...

php后端+JQuery+Ajax简单表单提交

通过ajax,如果从后端直接想前端返回数组,那前端收到的是一个‘Array’的字符串。所以,我比较习惯的是用json对象的格式。由后端通过json_encode()函数,把数组封装成对象,传递到前端;前端也以json的格式接收。这里用提交表单来举例说明。 页面显示如下: JQueryAjax.…...

论文投稿指南——中文核心期刊推荐(计算机技术2)

>>>深度学习Tricks&#xff0c;第一时间送达<<< 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。下面&#xff0c;简单介绍下什么是中文核心期刊要目总览&#xff1a; 《中文核心期刊要目总…...

集合java

java集合 集合、数组都是对多个数据进行存储操作的结构&#xff0c;简称Java容器 此时的存储&#xff0c;主要是指内存层面的存储&#xff0c;不涉及持久化的存储&#xff08;txt,jpg,avi&#xff09; Java集合可分为Collection 和 Map 两种体系 1. Collection接口&#xff1…...

spring boot 应用mybatis

Mybatis入门: Mybatis入门_做测试的喵酱的博客-CSDN博客 目录 一、spring boot 应用mybatis 核心 二、举例&#xff1a; 2.1 背景 2.2 项目结构&#xff1a; 2.3 依赖包 pom 2.4 项目配置文件application.yml 2.5 实例层entity 2.6 mybatis的mapper层 2.7 spring boot…...

Java项目:ssm图书馆管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 基于ssm的图书馆管理系统.主要功能包括&#xff1a;图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为…...

详解设计模式:命令模式

命令模式&#xff08;Command Pattern&#xff09;也被称为行动模式&#xff08;Action Pattern&#xff09;、事物模式&#xff08;Transaction Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 命令模式 是一种数据驱动的设计模式。请求以命令…...

家庭用户无线上网案例(AC通过三层口对AP进行管理)

组网需求 为一个家庭用户使用的网络架构。该家庭消费用户的上网流量大多是低速流量&#xff0c;例如浏览网页、玩游戏、看视频等。家庭成员使用的无线终端主要为手机、PC、电视机等。终端接入的数量正常情况下在10个以内&#xff0c;偶尔有家庭聚会等特殊情况&#xff0c;终端接…...

Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

在我们实际工作中,总会遇到这样需求,在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等。今天就给大家介绍一个 Spring Boot 神器,专门帮助大家解决项目启动初始化资源操作。 这个神器就是 CommandLineRunner,CommandLineRunner 接口的 Co…...

用Hopper修改代理软件端口

背景 用代理软件可以访问google&#xff0c;但是端口经常不固定&#xff0c;从缺省1080变成了随机。 前几天其实已经用Hopper 3.0看了一次&#xff0c;但是好像不支持go&#xff0c;所以没反编译成功&#xff0c;这次换了4.0&#xff0c;支持了go。 Hopper与逆向 逆向的目的…...

PKI等介绍

PKI 1、概述 KPI名称&#xff1a;Public Key Infrastructure 公钥基础设施 KPI作用&#xff1a;通过加密技术和数字签名保证信息的安全 KPI组成&#xff1a;公钥加密技术、数字证书、CA、RA 2、信息安全三要素 机密型、完整型、身份验证、操作的不可否认性 3、哪些领域…...

《模拟电子技术》半导体原理部分笔记

《模拟电子技术》笔记绪论第一章 常用半导体器件第二章 基本放大电路绪论 有的人把三极管的出现作为电子技术工业革命的开始标志学习架构&#xff1a;半导体器件&#xff08;二极管、三极管、场效应晶体管&#xff09;、基于上述管的放大电路、集成运算放大器、放大电路的频率…...

Python与MySQL交互

第四章 Python与MySQL交互 1、客户端库概述及安装 PyMySQL介绍 PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个客户端库。 PyMySQL安装&#xff1a; pip install pymysql执行过程如下图&#xff1a; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来…...

list的模拟实现(万字解读+由浅入深)

先申明一下本篇总体介绍过程是按照逐步深入去写的&#xff0c;所以可能有些同样类型不在一块&#xff01; 前言&#xff1a; 写这篇博客的时候&#xff0c;我是边思考边写它&#xff01;自己其中感觉自己对于list的理解更加的深入&#xff0c;其中提出的很多问题让我明白了lis…...

Java项目:SSM CRM人事管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 CRM人事管理系统&#xff0c;主要功能有&#xff1a; 用户管理&#xff1a;用户查询、添加用户、编辑、删除&#xff1b; 职位管理&#xff1a…...

Qt+opencv 鼠标画线实现几何图形识别并动态创建

前言 使用Qt OpenCV实现&#xff0c;通过鼠标画线绘制几何图形&#xff0c;然后通过opencv进行图形轮廓识别&#xff0c;返回图形顶点&#xff0c;然后创建对应的几何图形添加到场景中。绘制使用QGraphics体系完成。 看效果图&#xff1a; 本文demo在这里 点击下载 环境: …...

HTML5期末大作业——HTML+CSS+JavaScript平遥古城旅游景点介绍(6页)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…...

HTML5期末考核大作业 基于HTML+CSS+JavaScript沪上美食(9页)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…...

Reg注册表读写

在Windows 95及其后继版本中&#xff0c;采用了一种叫做“注册表”的数据库来统一进行管理&#xff0c;将各种信息资源集中起来并存储各种配置信息。按照这一原则&#xff0c;Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表&#xff0c;用来管理…...

HTML入门零基础教程(五)

嗨&#xff0c;大家好&#xff0c;我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助&#xff0c;请支持一波。 希望未来可以一起学习交流。 目录 一、图像标签 1.图像标签 2.图标标签的其它属性 3.图像标签属性注意点&#xff1a; 一、图像标签 1.…...

java通过lock实现同步锁

这里我们是一个卖票的演示代码 其实 同步锁 远不止一个synchronized 它本身有一个 加上锁 和释放锁的过程 为了 让我们更好的理解这个过程 JDK5之后 为我们提供了一个单独的锁工具 lock lock是一个接口 他提供了 synchronized 方法 和 更广泛的语句操作 lock方法 获得锁 unl…...

Java多线程同步工具类:Semaphore原理剖析

Java多线程同步工具类&#xff1a;Semaphore原理剖析 文章目录Java多线程同步工具类&#xff1a;Semaphore原理剖析Semaphore原理实战案例前驱知识准备&#xff1a;AbstractQueuedSynchronizer队列同步器 [Java多线程之&#xff1a;队列同步器AbstractQueuedSynchronizer原理剖…...

C++之面向对象

目录 对象与类 类的语法&#xff1a; C中class与struct的区别&#xff1a; 通过类实例化对象的方式 具体案例 类作用域与分文件编写 创建circle.h头文件 创建源文件circle.cpp 创建all.cpp来作为程序的入口 封装 封装的意义 访问权限符 成员属性私有化 优点 具体…...

Windows-》CMD命令

CMD命令【1】Windows-》CMD命令1.mstsc&#xff1a;打开远程桌面连接。2.services.msc&#xff1a;打开本地服务设置。3.notepad&#xff1a;打开记事本。4.control&#xff1a;打开控制面板。5.regedit&#xff1a;打开注册列表编辑器。6.compmgmt.msc---设备管理器。&#xf…...

秒级使网站变灰,不改代码不上线,如何做到?

注意&#xff1a;文本不是讲如何将网站置灰的那个技术点&#xff0c;那个技术点之前汶川地震的时候说过。 本文不讲如何实现技术&#xff0c;而是讲如何在第一时间知道消息后&#xff0c;更快速的实现这个置灰需求的上线。 实现需求不是乐趣&#xff0c;指挥别人去实现需求才…...

Vue 3与其他框架对比

Vue 3与其他框架对比 Vue.js自2014年发布以来,凭借轻量级、高性能和渐进式等特点,已成为了前端开发中最流行的框架之一。近期,Vue团队正式发布了Vue 3的稳定版本,带来了诸多改进和创新,进一步提升了Vue的开发体验和性能表现。本文将结合Vue 3的新特性,对比其与React、Angular等…...

Python学习之-正则表达式

目录 前言&#xff1a;1.re.serach1.1例子&#xff1a; 2.re.match2.1示例1&#xff1a;2.2 示例2&#xff1a; 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1&#xff1a;4.2 示例2: 5.re.split5.1 示例1:5.2 示例2&#xff1a;5.3 示例3&#xff1a; 6.re.sub6.1 示例&#…...

fs.1.10 ON CENTOS7 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs1.10版本的流程记录。 环境 docker engine&#xff1a;Version 24.0.6 centos docker&#xff1a;7 freeswitch&#xff1a;v1.10.7 手动模式 centos准备 docker hub拉取centos镜像。…...

Android 自定义EditText

文章目录 Android 自定义EditText概述源码可清空内容的EditText可显示密码的EditText 使用源码下载 Android 自定义EditText 概述 定义一款可清空内容的 ClearEditText 和可显示密码的 PasswordEditText&#xff0c;支持修改提示图标和大小、背景图片等。 源码 基类&#xf…...

什么是自然语言处理(NLP)?自然语言处理(NLP)的概述

什么是自然语言处理&#xff1f; 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;和计算语言学领域的一个分支&#xff0c;它致力于使计算机能够理解、解释和生成人类语言。随着技术的发展&#xff0c;NLP已经从简单的模式匹配发展到了能够理解…...

校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!

随着科技的不断发展&#xff0c;智慧校园系统和跑腿外卖小程序已经成为当今社会的热门话题。作为未来的重要趋势之一&#xff0c;科技在教育领域中的应用越来越广泛。本文将探讨智慧校园系统和跑腿外卖小程序的开发过程&#xff0c;并阐述如何利用科技“育”见未来 一、智慧校…...