TCP滑动窗口机制与原理详解

TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。

 

TCP协议里窗口机制有2种:一种是固定的窗口大小;另一种是滑动的窗口。

这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小可以实现流量控制。

 

接下来我们要把重心放在网络传输的可靠性上面。一起来看TCP协议,它是如何解决网络传输不可靠的问题?这其中有个很关键的部分,就是我们的滑动窗口协议。

 

注意:下面的内容不仅仅只是讲解了“TCP滑动窗口机制与原理”,也阐述了“TCP固定窗口协议与TCP滑动窗口协议的区别”,以及“TCP固定窗口协议与TCP滑动窗口协议的优缺点”。

 

滑动窗口协议:

  • TCP协议的使用
  • 维持发送方/接收方缓冲区

 

缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序

在TCP协议中,发送方和接受方通过各自维护自己的缓冲区。通过商定包的重传机制等一系列操作,来解决不可靠的问题。

 

问题一:如何保证次序?

问:在我们滑动窗口协议之前,我们如何来保证发送方与接收方之间,每个包都能被收到。并且是按次序的呢?

答:TCP固定窗口协议

TCP固定窗口协议

 

发送方发送一个包1,这时候接收方确认包1。

发送包2,确认包2。

就这样一直下去,直到把数据完全发送完毕,这样就结束了。那么就解决了丢包,出错,乱序等一些情况!

同时也存在一些问题。

问题:吞吐量非常的低。我们发完包1,一定要等确认包1。我们才能发送第二个包。

 

问题二:如何提高吞吐量?

问:那么我们就不能先连发几个包等他一起确认吗?这样的话,我们的速度会不会更快,吞吐量更高些呢?

答:TCP滑动窗口协议TCP滑动窗口协议

 

如图,这个就是我们把两个包一起发送,然后一起确认。可以看出我们改进的方案比之前的好很多,所花的时间只是一个来回的时间。接下来,我们还有一个问题:改善了吞吐量的问题。

 

问题三:如何实现最优解?

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

 

我们能不能把第一个和第二个包发过去后,收到第一个确认包就把第三个包发过去呢?而不是去等到第二个包的确认包才去发第三个包。这样就很自然的产生了我们"滑动窗口"的实现。

TCP滑动窗口

在图中,我们可看出灰色1号2号3号包已经发送完毕,并且已经收到Ack。这些包就已经是过去式。

4、5、6、7号包是黄色的,表示已经发送了。但是并没有收到对方的Ack,所以也不知道接收方有没有收到。

8、9、10号包是绿色的。是我们还没有发送的。这些绿色也就是我们接下来马上要发送的包。

可以看出我们的窗口正好是11格。后面的11-16还没有被读进内存。要等4号-10号包有接下来的动作后,我们的包才会继续往下发送。

 

正常情况TCP滑动窗口正常情况

可以看到4号包对方已经被接收到,所以被涂成了灰色。“窗口”就往右移一格,这里只要保证“窗口”是7格的。 我们就把11号包读进了我们的缓存。进入了“待发送”的状态。8、9号包已经变成了黄色,表示已经发送出去了。接下来的操作就是一样的了,确认包后,窗口往后移继续将未发送的包读进缓存,把“待发送“状态的包变为”已发送“。

 

丢包情况

有可能我们包发过去,对方的Ack丢了。也有可能我们的包并没有发送过去。从发送方角度看就是我们没有收到Ack。

TCP滑动窗口丢包情况

发生的情况:一直在等Ack。

如果一直等不到的话,我们也会把读进缓存的待发送的包也一起发过去。但是,这个时候我们的窗口已经发满了。所以并不能把12号包读进来,而是始终在等待5号包的Ack。

 

问:如果我们这个Ack始终不来怎么办呢?

答:这时候我们有个解决方法:超时重发。

 

超时重发

这里有一点要说明:这个Ack是要按顺序的。必须要等到5的Ack收到,才会把6-11的Ack发送过去。这样就保证了滑动窗口的一个顺序。

TCP滑动窗口超时重发

这时候可以看出5号包已经接受到Ack,后面的6、7、8号包也已经发送过去已Ack。窗口便继续向后移动。

 

总结:

从我们为了增加网络的吞吐量,想讲数据包一起发送过去,这时候便产生了“滑动窗口”这种协议。有了“滑动窗口”这个概念,我们又解决了其中出现的一些问题。例如丢包,我们又通过重发的机制去解决了。

    A+
发布日期:2020年09月15日 11:28:31  所属分类:经验
最后更新时间:2020-09-15 11:28:31
付杰
  • ¥ 159.0元
  • 市场价:599.0元
  • ¥ 68.0元
  • 市场价:168.0元
  • ¥ 79.0元
  • 市场价:99.0元
  • ¥ 159.0元
  • 市场价:398.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: