计算机网络 | 流量控制与可靠传输机制

242 阅读6分钟

为什么要有这个层?

较高的发送速度较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。 每个层都有自己的流量控制,对于数据链路层的流量控制是点对点(相邻两个结点)的,而传输层的流量控制是端到端(主机与主机)的。

  • 数据链路层流量控制手段:接收方收不下就不回复确认

  • 传输层流量控制手段:接收端给发送端一个窗口公告。

方法

停止-等待协议

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

image.png 异常原因 - 丢包:物理线路故障、设备故障、病毒攻击、路由信息错误等原因,会导致数据包的丢失。(链路层-帧,传输层-报文段/用户数据报,网络层-IP数据版/分组)

停等协议——无差错情况

发送1个数据帧就停止,进行等待 image.png

停等协议——有差错情况

超时计时器:每次发送一个帧就启动一个计时器,重传时间应该比平均往返时延要长一些RTT(Round-Trip Time)

1. 数据帧丢失或检测到帧出错 image.png

2. ACK 确认帧丢失 在重传时间内发现没有收到确认帧 image.png

3. ACK迟到 确认帧迟迟不到,重复的那个都丢掉

image.png

优点:简单,但信道利用率太低了。 td:发送方发送时延,ta:接收方发送时延,rtt:往返时延

image.png

信道利用率

有效数据传输时间/总时间 image.png 有效数据传输时间/实际时间周期

image.png

滑动窗口协议(side window)自动重传请求(ARQ automatic repeat request)

发送窗口

  1. 发送缓冲区的子集
  2. 用于存放已发送,但是没有得到确认的分组
  3. 一开始的发送窗口是空集,发送了一个分组则前沿向前滑动一格,直到发送缓冲区的上限
  4. 收到了老分组的确认,后沿向前滑动,但不能超过前沿

image.png

接收窗口

窗口大小为1

  • 当窗口在0,则只能接收0号分组。0号分组接收确认之后,向后滑动1格,等待1号的到来,其他的都是乱序分组。

  • 如果这时来了二号分组和三号分组,则抛弃掉,并给最高序号分组的确认,ACK=1的确认。(因为1是已确定的最高序号的分组)

接收窗口>1

  • 0号分组确认,向前滑动1格,意味着接收方可以接收1-5号分组

image.png

  • 1号分组来了之后,向发送端发送ACK=1的确认,并向前滑动1格

image.png

  • 3号分组来了,发送ACK = 3的确认,4号分组到ACK = 4的确认,但不能向前滑动

image.png

  • 这时2号到来,向前移动三格,ACK = 2的确认

综上

  • 接收窗口尺寸Wr=1,则只能顺序接收 —— Go-Back-N协议-对顺序到来最高的确认,累计确认(如果发送的时ACK=1,则说明1号即以前的分组都已经确认了)
  • 接收窗口尺寸Wr>1,则可以乱序接收 —— select repeat协议 - 向对方发送单独的确认而不是累计的确认,非累计确认,收到哪个分组就确认哪个分组

正常情况下:发送方数据发送给接收方,接收方收到数据,向前滑动,并给发送方确认,发送方收到确认后则向前滑动,导致有新的分组落入新的缓冲区,又可以进行新一轮的发送。

在ARQ协议中,发送窗口的大小≤窗口总数 - 1

  • 而对于GBN来说,发送窗口可以 = 总窗口 - 1;因为他们的接收窗口为1,是可以保证按序接收的。

  • 所以对于窗口大小为n的滑动窗口,他的发送窗口的大小为n - 1,也就是说最多可以有n - 1个发送窗口发送但没有确认。

异常情况下GBN( go - back - n )的2窗口互动

发送窗口

  • 新分组落入发送缓冲区范围,发送->前沿滑动

  • 超时重发机制让发送端将发送窗口中的所有分组发送出去,因为如果1没确认,2、3到达了接收方也是会丢弃的。

  • 来了老分组的重复确认->后沿不向前滑动-新的分组无法落入发送缓冲区的范围(此时如果发送缓区有新的分组可以发送)

接收窗口

  • 收到乱序分组,没有落入到接收窗口范围内,抛弃

  • (重复)发送老分组的确认,累计确认

GBK中序列号大小要比发送窗口大小大1,序列号的位数则取log

  • 当窗口大小为3,(0 1 2),序列号大小也为3时,假设为 0 1 2,开始发送数据,首先将三个数据包发送出去,当收到了0的确认后,移动窗口为 1 2 0,那么当再次收到0的确认后,就无法判断是第一个0的重复确认还是新数据包的确认了。

  • 当窗口大小为3,(0 1 2),序列号大小为4,假设为0 1 2 3,开始发送数据,收到了0的确认后,移动窗口为 1 2 3,这时候如果收到0的确认,可以确定是第一个0的重复确认,而不会产生歧义。

异常情况下SR( select repect)的2窗口互动

发送窗口

  • 新分组落入发送缓冲区范围,发送->前沿滑动

  • 超时重发机制让发送端将超时的分组重新发送出去

  • 来了乱序分组的确认 -> 后沿不向前滑动 -> 的分组无法落入发送缓冲区的范围(此时如果发送缓冲有新的分组可以发送)

接收窗口

  • 收到乱序分组,落入到接收窗印范围内,接收
  • 发送该分组的确认,单独确认

GBN 和 SR异同

相同:发送窗口>1;一次可以发送多个分组

不同

GBN

  • 发送窗口最大2n2{^n}-1,GBN接收窗口为1

  • 只能顺序接收发送端;从表现来看,一旦一个分组没有发成功,如:0,1.2,3,4; 假如1未成功,234都发送出去了,要返回1再发送:GB1;

  • 只维护一个定时器

SR

  • SR接受窗口>1,最大2的(n-1)次方
  • 接收端可以乱序接收发送端:发送0,1.2.3.4,一旦1未成功,2.3,4,已发送,无需重发,选择性发送1;
  • 对每一个发送未确定的,都设置一个定时器

对比

image.png