精华内容
下载资源
问答
  • 滑动窗口协议

    2021-03-31 22:15:58
    滑动窗口协议一、流量控制二、滑动窗口协议①保证次序②如何提高吞吐量③如何实现最优解 一、流量控制 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,...


    一、流量控制

    如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。

    可以通过滑动窗口协议实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的ACK中包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

    二、滑动窗口协议

    • TCP协议的使用
    • 维持发送方/接收方缓冲区。缓冲区是用来解决网络之间数据不可靠的问题,例如:丢包、重复包、出错、乱序。
    • 在TCP协议中,发送方和接收方通过各自维持自己的缓冲区,通过商定包的重传机制等一系列操作。来解决不可靠问题。

    ①保证次序

    问题提出:在我们滑动窗口协议之前,我们如何来保证发送方与接收方之间,每个包都能被收到。并且是按次序的呢?Alt
    发送方发送一个包1,这时候接收方确认包1.发送包2,确认包2.就这样一直下去,直到把数据完全发送完毕,这样就结束了。这种方式可以解决丢包、出错乱序的一些情况!同时也存在一些问题。吞吐量非常的低。我们发完包1,一定要等确认包1,我们才能发送第二个包。

    ②如何提高吞吐量

    Alt
    如图,我们可以把两个包一起发送,然后一起确认。可以看出我们的改进方案比之前的好的多,所花的时间只是一个来回的时间。接下来,我们还有一个问题:如何达到最优的吞吐量的情况。

    ③如何实现最优解

    问题:我们每次需要发多少个包过去呢?发送多少包是最优解呢?
    

    我们能不能把第一个和第二个包发过去后,收到第一个确认包就把第三个包发过去呢?而不是去等到第二个包的确认包才去发第三个包。这样就很自然的产生了我们“滑动窗口”的实现。
    Alt
    在图中,我们可以看出灰色1号2号3号包已经发送完毕,并且已经收到ACK这些包就已经是过去式。4,5,6,7包是黄色的,表示已经发送了,但是并没有收到对方的ACK,所以也不知道接收方有没有收到。8,9,10号包是绿色的。是我们还没有发送的。这些绿色也就是我们接下来马上要发送的包。可以看出我们的窗口正好是11格。后面的11-16还没有被都进内存,要等到4-10号包有接下来的动作之后,我们的包才会继续往下发送。
    正常情况
    Alt
    可以看到4号包对方已经被接收到,所以被涂成了灰色。“窗口”就往右移一格,这里只要保证“窗口”是7格的。我们就把11号包读进了我们的缓存。进入“待发送”的状态。8,9号包已经变成了黄色,表示已经发送出去了。接下来的操作就是一样的了,确认包后,窗口往后移继续将未发送的包读进缓存,把“待发送”状态的包变为“已发送”。
    丢包情况
    又可能我们包发过去,对方的ACK丢了。也有可能我们的包并没有发送过去。从发送方角度看就是我们并没有受到ACK。
    Alt
    发生的情况:一直在等ACK。如果一直等不到的话,我们也会把读进缓存的待发送的包也一起发过去。但是,这个时候我们的窗口已经发满了。所以并不能把12号读进来,而是始终在等待5号包的ACK。

     如果我们的ACK始终不来怎么办?
    

    超时重发
    这里要说明一点:这个ACK是要按顺序的。必须要等到5的ACK收到,才会把6-11的ACK发送过去。这样就保证了滑动窗口的一个顺序。
    Alt
    这个时候可以看出5号包已经接收到ACK,后面的6,7,8号包也已经发送过去已ACK。窗口便继续向后移动。

    参考链接

    一篇带你读懂TCP之“滑动窗口”协议.

    展开全文
  • 实验一.doc 对于滑动窗口协议的介绍 a) 窗口机制 b) 1比特滑动窗口协议 c) 后退n协议 d) 选择重传协议 实验一:实验报告.doc 说明了试验过程和总结等。 SlideWindowSender.exe :发送窗口演示程序 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,616
精华内容 1,046
关键字:

滑动窗口协议