滑动窗口:数据链路层与传输层


转载自数据链路层滑动窗口协议&& 老师的计算机网络课程

滑动窗口既用于数据链路层,又用于传输层

1 数据链路层的滑动窗口

1.1 连续ARQ协议

什么是连续ARQ协议

  • 发送方维持着一个一定大小的发送窗口,位于发送窗口内的所有分组都可连续发送出去,而中途不需要等待对方的确认;这样信道的利用率就提高了。而发送方每收到一个确认就把发送窗口向前滑动一个分组的位置。

连续ARQ协议包括:

  • 停止-等待Stop-and-Wait ARQ:发送窗口 = 接收窗口 = 1;效率低下。
  • SR协议(选择重传):当发送方接受到接受方的状态报告指示报文出错时,发送方只发送出错的报文。因此必须在接受端加大缓存,以备所有序号都收到且连续然后一并交给主机。
  • GBN(回退N帧)协议:发送端发送完一个数据分组后,并不停下来等待确认消息,而是连续发送N个数据分组消息。当发送方接受到接受方的状态报告指示报文出错,发送方将重传过去的n个报文。该方法比停等式减少等待时间,提高吞吐率;但是一帧出错,必须重传其帧和后面n-1帧,增加了系统开销,在信道越差时,有待于确认的帧越多,可能要退回来重发很多帧,所以此方法性能不一定比停等式优越。

在这里插入图片描述

1.2 SR协议(选择重传)

在这里插入图片描述

  • 接收方必须有较大的缓存,注意缓存与窗口不是同一个东西;
  • 接收窗口必须<= 2^(n-1)(其中n为序列号位数),否则会发生重叠冲突
  • 发送窗口小于或等于接收窗口,因为发送窗口大于接收窗口部分的帧不能被接收,所以发送窗口大于接收窗口没有意义,故取发送窗口等于接收窗口。

1.3 GBN(回退N帧)

回退N帧:


在这里插入图片描述

  • 隐含着接收窗口大小 = 1
  • 发送窗口大小 <= 2^n.

2 TCP滑动窗口

解析TCP滑动窗口

TCP滑动窗口定义

1.发送方的滑动窗口
发送方的发送缓存内的数据可以分为4类:

  1. 已发送,已收到ACK;
  2. 已发送,未收到ACK;
  3. 未发送,允许发送;
  4. 未发送,不允许发送。

发送方的滑动窗口中有2、3两类数据

2.接收方的滑动窗口
接收方的缓存数据包括3类数据:

  1. 已接收(估计就是这部分数据会存在粘包现象);
  2. 未接收,准备接收;
  3. 未接收且不准备接受。

其中,类型2属于接收窗口。

TCP滑动窗口的大小

  • 接收方窗口大小:与接收方的处理能力有关;
  • 发送方的滑动窗口 = min{接收方允许的窗口,拥塞窗口};
  • 接收方允许的窗口大小应该就是TCP数据段中的win字段,即TCP Window Size
  • 注意: TCP中的数据段有的序列号以及确认号,所以发送窗口和接收窗口的大小不用考虑序号重叠问题了。

TCP滑动窗口工作过程

1.发送窗口只有收到发送窗口内数据的ACK确认,才会移动窗口的左边界;
2.在接收窗口,只有前面所有段都接收到,才会移动左边界,举例说明:

  • 假设接收窗口为1、2、3、4,若接收到1、2则可以将接收窗口移动到3、4、5、6;
  • 假设接收窗口为1、2、3、4,若接收到1、2、4,那么滑动到3、4、5、6,但是此时的4是已经接收到了的,此时若收到3,那就可以将窗口滑动到5、6、7、8;

模拟TCP滑动过程

找到了一个模拟TCP窗口发送的动画的地址,稍微有缺陷:1. 丢包率如果设得太高,有时无论重发多少次都不能恢复正常 2. 窗口最大可为10,其实应该为9
明确发送端和接收端,发送A~S数据包,我们不会从头到尾分析,因为过程比较长,这个模拟过程有以下条件:
1.简化了窗口大小,双方窗口大小都一直是4
2.设置一定的丢包率,否则没什么值得分析的,包括sender发送的数据包和receiver回复的ACK包。
3.简化重传机制,出现丢包则直接重传,不等3个冗余ACK和超时。
4.既不是选择重传也不是退回N步,重传的包是随机的发。

模拟过程如下:

  1. 首先发送端发送A,B,C,D四个包,但是A,B丢失,只有C,D到达接收端。
    在这里插入图片描述
  2. 接收端没有收到A,所以不回复ACK包。发送端重传A,B,C,D四个包,这次全都到达了。
    在这里插入图片描述
  3. 接收端先获得A,发ACK包A,但是中途丢失;获得B后,根据累计确认的原则,发D的ACK包,然后窗口滑动。再次获得C,D后,连续回复2个D的ACK包,其中C对应的ACK包丢失。
    在这里插入图片描述
  4. 发送端连收2个D的ACK包,说明4个包对方都已收到,窗口滑动,发E,F,G,H包,其中G包丢失。现在整个序列的状态:ABCD是已发送已确认,EFGH是已发送未确认,I~S是不能发送。
    在这里插入图片描述
  5. 接收端先收到E,发ACK包;收到F后发F的ACK包;未收到G,还是发F的ACK包;收到H,还是发F的ACK包。不幸的是,三个ACK包全都丢失。
    在这里插入图片描述
  6. 发送端收到E的ACK包,窗口向右滑动一位;然后再发送F,G,H,I,其中F丢失。
    在这里插入图片描述
  7. 接收端获得I,因为没有G,只好回复F的ACK包。相继收到G,H包。
    在这里插入图片描述
  8. 接收端根据累计确认,连发两个I包,其中H对应的丢失。窗口向右滑动。
    在这里插入图片描述
  9. 发送端接收I的ACK包后,向右滑动四位。发送J,K,L,M四个包,后面不再分析。
    在这里插入图片描述
  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值