滑动窗口
滑动窗口的出现是伴随着对停等协议的改善而出现的流水线协议而出现的,也叫GBN协议(Go-Back-N Protocol)。下面的文章对GBN和滑动窗口混用,其实是一个概念。
停等协议一次只能发送一个分组,接受到该分组的ack之后才能发送下一个分组,大大影响了传输效率。
流水线协议则一次能发送N个分组。这个N就是滑动窗口的大小!
其实滑动窗口也就是通信双方之间的链路一次最多发送分组的数量。与停等协议中只能发送的那一个分组对应。因为发送分组和接受对应的ack是一个比较耗时的过程,所以会出现有的分组已被发送而没有确认,有的分组还没来得及发送的情况。伴随着一些已经发送的分组被确认,窗口也会慢慢向前滑动,也就是可以发送新的下一个分组了。= =滑动窗口这个名字挺唬人的,其实了解后也就是简单的概念。(为什么要起这么晦涩拗口的名字啊!!)
滑动窗口只会一个分组一个分组地按顺序交付给上级协议,所以会丢失所有失序分组。(为什么不缓存正常提前到达的失序分组呢。因为如果接收方等待0分组,而接受到1分组并缓存,并不会把1分组交付给上级协议,因为失序了。也就不会发送1分组的ACK,发送方也自然收不到1分组的ack。超时定时器触发后,发送房会重传0和1分组,接收方缓存的1分组并没有起到作用,所以干脆不缓存)
GBN的缺陷:因为接收方不会缓存提前到来的分组,而是直接丢失,等待正常序列的分组的到来。从而可能会出现这样一种情况:发送方发送0 1 2 3 4分组,0分组在发送中丢失,1 2 3 4正常到达接收方。而接收方预期的下一个分组是0,会把1 2 3 4直接丢失,不会发送任何ack。从而发送方会重传0 1 2 3 4分组,