小马无意中发现一个比较清晰的TCP滑动窗口视频教程,总结后在此分享,图文结合,一分钟即可秒懂窗口滑动原理,再也不怕面试官吓唬你了。视频源地址点这里,感谢原作者分享。
TCP如何实现可靠传输和流量控制
1.以字节为单位的滑动窗口技术(主要解决流量控制)
2.重传机制
滑动机制
发送窗口只有收到发送窗口内字节的ACK确认,才会移动发送窗口的左边界。
接收窗口只有在前面所有的段都确认的情况下才会移动左边界。当在前面还有字节未接收但收到后面字节的情况下,窗口不会移动,并不对后续字节确认。以此确保对端会对这些数据重传。
遵循快速重传、累计确认、选择确认等规则。
发送窗口大小由接收窗口接收缓存大小决定。比如发送方发的window size = 20;就是接收端最多发送20字节,这个20一般就是发送方接收缓存的大小。
百科滑动窗口协议在这里,但小马觉得要是图文结合更易懂一点。
举个栗子
假设A往B发送数据包(比如一个文件,整个是1-32字节),接收窗口大小20字节,当然实际可能是几千几万。参考教程。
A往B分别发送了窗口大小20字节内的数据包,4个。窗口大小外的数据包不能发送。
B发现收到的是连续的,就回复A说已经收到6了,下一个包可以发7了。此时的场景相当于我们下载文件时的临时文件,文件还没传完。
窗口后移(不用等窗口里的1-20全部确认发完才后移),并删除已确认的数据包1-6。后移后窗口中的数据21-26可以继续发送。
计算机程序可以处理1-6的数据包数据了。
如果发送过程中,7-9丢包。B只会发送到1-6的确认包,也就是下一个包是7。接收者B的选择性确认SACk告诉A哪一段缺失了,A只重发缺失的,后面已经确认收到的10-12不重发。未收到确认的数据包不能移窗口(收到12 但是前面不连续,所以不能后移,要等重发)。
A如果超时没有收到B回复,重发时间是有选择的,这个不深入了。
附上一个模拟动画:下载地址。
网络通信原理(很详细易懂的教程)。