接收器告诉新的滑动窗口协议中的旧数据包(选择性重复)

时间:2014-03-09 15:18:12

标签: c networking udp sliding-window

假设发送方和接收方都有一个16尺寸的缓冲区,窗口大小为7。

换句话说,每一面都有一个缓冲区,一个阵列,可以存储16帧。每个帧都有一个适合16帧缓冲区(数组中的索引)的id。接收器有一个窗口,在任何给定时间都可以接受任何顺序的7帧。当填充缓冲区中最旧的帧时,窗口将滑动一次。

我现在的问题是,让我们说如果一个帧在路上迷路了,但不知何故让它回来太晚了。接收器太迟了,它实际上填满了帧缓冲区的下一个圆圈。

  1. 发件人发送帧:0,1,2,3,4,5,6,7。
  2. 接收方获取帧并发回ACK以获得最多7个(或每个帧)。
  3. 发件人在第0帧获得超时,然后重新发送。
  4. 发件人最多可获得7个ACK,因此会发送下一帧:8,9,10,11,12,13,14
  5. 接收器获得以下数据包:8,9,10,11,12,13,14。它发送一个ACK以获取它们并打开缓冲区:15,0,1,2,3,4 ,5,6。
  6. 接收方获取由于超时而由发送方发送的旧帧0。收件人认为数据包是合法的并存储它。
  7. 如何避免在第6步发生的事情? 我应该发送整个窗口的CRC吗? CRC并不完美,所以可能还有问题。

    我目前通过C中的UDP套接字执行此操作,因此使用C标记。

0 个答案:

没有答案